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.

questionAnswers(1)

yourAnswerToTheQuestion