Так что я работаю над очень важным школьным проектом. Теперь я знаю, как читать все из файла WAVE, включая данные. Дело в том, что мне нужны не только реальные значения данных, но и знак. Файл имеет 16 бит / с, но я не знаю, как получить фактическое значение, например, -365 или +19934.
Это то, что я делаю до сих пор
лер = фред (&sbyte, 1, X, audio);
Какой номер я должен поставить вместо «Х». 4?
Я определил sbyte как подписанный символ, но подписанный символ идет только от -128 до 127, что означает, что он не дает мне необходимой информации.
Мне нужны эти цифры для анализа. Если бы вы могли помочь мне здесь, потому что я слишком потерян.
Благодарю.
С этой страницы: https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
16-битные сэмплы хранятся в виде целых чисел со знаком 2-х в диапазоне от -32768 до 32767.
В этом случае вы хотите использовать 16-битный тип данных, который в C ++ / C является short
short data;
fread(&data, sizeof(short), 1, audio);
Это прочитает 2 байта для вас и сохранит их в кратком виде. Вы хотите сделать это в цикле
Во-первых, вам нужно прочитать header
информация в первых 44 байтах, как можно увидеть в следующей ссылке:
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
Оттуда вы можете получить BitsPerSample
и бросить прочитанные байты в short
целое число, если это 16, char
если это 8 или int
если это 32
short[] data = new short[NumSamples * NumChannels];
fread(data, sizeof(short), NumSamples * NumChannels, audio);