У меня проблемы с чтением 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);
}
Не работает и показывает вывод (выше).
Я следую стандартам, найденным здесь
Где data
- массив char
, а rawSignal
- std::vector<double>
Я, вероятно, просто неправильно передаю преобразование, но не могу понять, где. У кого-нибудь есть предложения?
Спасибо
РЕДАКТИРОВАТЬ:
Вот что сейчас отображается (в виде графика):
Вот что он должен отображать:
data
- это просто массив символов. Я не уточняю, что это8bits
или что-то в этом роде .. Например.data = new char[padded_size];
так должно ли это быть16bit char array
? - person Phorce   schedule 12.09.2013char
- это элемент определенного размера. На большинстве процессоров, с которыми вы столкнетесь, это будет 8 бит, хотя есть исключения (например, некоторые TI DSP). - person Chris Stratton   schedule 12.09.2013