C ++ lendo arquivo Wav de 16 bits

Estou tendo problemas para ler em um arquivo .wav de 16 bits. Eu li na informação do cabeçalho, no entanto, a conversão parece não funcionar.

Por exemplo, no Matlab, se eu ler no arquivo wave, recebo o seguinte tipo de dado:

 -0.0064, -0.0047,  -0.0051, -0.0036, -0.0046, -0.0059,  -0.0051

No entanto, no meu programa C ++, o seguinte é retornado:

0.960938, -0.00390625, -0.949219, -0.00390625, -0.996094, -0.00390625

Eu preciso que os dados sejam representados da mesma maneira. Para agora8 bit arquivos .wav Eu fiz o seguinte:

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);
}

Isso funcionou, no entanto, quando fiz isso por 16 bits:

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);
}

Não funciona e mostra a saída (acima).

Estou seguindo os padrões encontradosAqui

Ondedata é umchar matriz erawSignal é umstd::vector<double> Eu provavelmente estou apenas entregando a conversão errada, mas não consigo descobrir onde. Alguém tem alguma sugestão?

obrigado

EDITAR:

Isto é o que está exibindo agora (em um gráfico):

Isto é o que deveria estar exibindo:

questionAnswers(5)

yourAnswerToTheQuestion