Получение реальных значений из файла WAV Переполнение стека

Так что я работаю над очень важным школьным проектом. Теперь я знаю, как читать все из файла WAVE, включая данные. Дело в том, что мне нужны не только реальные значения данных, но и знак. Файл имеет 16 бит / с, но я не знаю, как получить фактическое значение, например, -365 или +19934.
Это то, что я делаю до сих пор

лер = фред (&sbyte, 1, X, audio);

Какой номер я должен поставить вместо «Х». 4?

Я определил sbyte как подписанный символ, но подписанный символ идет только от -128 до 127, что означает, что он не дает мне необходимой информации.

Мне нужны эти цифры для анализа. Если бы вы могли помочь мне здесь, потому что я слишком потерян.

Благодарю.

1

Решение

С этой страницы: 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 байта для вас и сохранит их в кратком виде. Вы хотите сделать это в цикле

3

Другие решения

Во-первых, вам нужно прочитать header информация в первых 44 байтах, как можно увидеть в следующей ссылке:
https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

Оттуда вы можете получить BitsPerSample и бросить прочитанные байты в short целое число, если это 16, char если это 8 или int если это 32

1

short[] data = new short[NumSamples * NumChannels];
fread(data, sizeof(short), NumSamples * NumChannels, audio);
-1
По вопросам рекламы [email protected]