C ++ читает 16-битный WAV-файл
У меня проблемы с чтением в 16-битном файле .wav. Я прочитал в заголовке информацию, однако, преобразование, похоже, не работает.
Например, в Matlab, если я читаю в волновом файле, я получаю данные следующего типа:
-0.0064, -0.0047, -0.0051, -0.0036, -0.0046, -0.0059, -0.0051
Тем не менее, в моей программе C ++ возвращается следующее:
0.960938, -0.00390625, -0.949219, -0.00390625, -0.996094, -0.00390625
Мне нужно, чтобы данные были представлены таким же образом. Теперь для8 bit
WAV-файлы я сделал следующее:
uint8_t c;
for(unsigned i=0; (i < size); i++)
{
c = (unsigned)(unsigned char)(data[i]);
double t = (c-128)/128.0;
rawSignal.push_back(t);
}
Это сработало, однако, когда я сделал это для 16 бит:
uint16_t c;
for(unsigned i=0; (i < size); i++)
{
c = (signed)(signed char)(data[i]);
double t = (c-256)/256.0;
rawSignal.push_back(t);
}
Не работает и показывает вывод (выше) .I '
м по найденным стандартамВот
кудаdata
этоchar
массив иrawSignal
это яstd::vector
Я, вероятно, просто передаю неверное обращение, но не могу понять, где. У кого-нибудь есть предложения?
Спасибо
РЕДАКТИРОВАТЬ:
Это то, что сейчас отображается (на графике):
Вот что должно отображаться: