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Я, вероятно, просто передаю неверное обращение, но не могу понять, где. У кого-нибудь есть предложения?

Спасибо

РЕДАКТИРОВАТЬ:

Это то, что сейчас отображается (на графике):

Вот что должно отображаться:

Ответы на вопрос(5)

Ваш ответ на вопрос