Lendo dados do buffer de áudio com o AudioQueue
Eu estou tentando ler dados de áudio via AudioQueue. Quando faço isso, posso verificar se a profundidade de bits do arquivo é de 16 bits. Mas quando eu obtenho os dados reais da amostra, só vejo valores de -128 a 128. Mas também estou vendo dados intercalados de aparência suspeita, o que me dá bastante certeza de que apenas não estou lendo os dados corretamente.
Então, para começar, posso verificar se o arquivo de origem é um arquivo wav mono de 16 bits de 44100.
Meu buffer é alocado assim:
char *buffer= NULL; buffer = malloc(BUFFER_SIZE); assert(buffer);
Todos os valores relevantes são definidos e usados em:
AudioFileReadPackets(inAudioFile,false,&bytesRead,NULL,packetNum,&numPackets,buffer);
Como teste, só para ver os dados recuperados, eu corro:
for(int i=0;i<BUFFER_SIZE;i++){ NSLog(@"%i", buffer[i]); }
Agora, eu sei que o meu arquivo de origem tem um pico em todo o lugar, mas os valores que vejo são apenas no máximo -128 e 128. Sendo que este é um arquivo de 16 bits, eu esperaria que os valores fossem -32768 a 32768.
Além disso, parece haver dois padrões nos dados. Aqui está um exemplo dos dados retornados:
70 -13 31 -11 -118 -9 -15 -7 116 -4 31 -1 28 1 84 2 -123 3 -97 4 110 5 54 6 126
Agora dê uma olhada em todas as outras linhas começando com a segunda linha: -13. Veja como ele aumenta, não uniformemente, mas pelo menos suavemente? As linhas ímpares não estão nem perto desse nível.
Meu primeiro pensamento seria que este é um dado estéreo intercalado, mas não, é apenas um canal, então não deveria haver qualquer intercalação, certo?
Meu melhor palpite é que eu estou apenas lendo os dados incorretamente, então os dados de amostra estão sendo medidos em dois retornos. Alguma ideia de como lê-lo corretamente?
Obrigado por ler toda a questão e por qualquer insight que você possa oferecer.