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: