Мне нужно прочитать значения звуковых образцов. Я использую для этого звуковых сообщений обратного вызова (от компании Apple SpeakHere примера):Значения образцов AudioQueue неверны
UInt32 samplesCount = inCompleteAQBuffer->mAudioDataBytesCapacity/2;
UInt16 *samples = (UInt16 *)inCompleteAQBuffer->mAudioData;
for (int i=0; i < samplesCount; i++)
{
printf("%i\n", samples[i]);
}
Значения возвращаются, но когда я сравниваю их с графом от дерзости, они, кажется, не так:
Значения Audacity от 1 (65535) до -1 (0). Таким образом, логически первое значение выборки должно быть 32767, вторая должна быть ~ 50 000 ...
Но я получаю другие результаты:
value - position
65535 - 0
29501 - 1
26086 - 2
63656 - 3
28477 - 4
65407 - 5
36802 - 6
36546 - 7
18244 - 8
17220 - 9
player settings:
(Float64) mSampleRate = 44100
(UInt32) mBytesPerPacket = 2
(UInt32) mFramesPerPacket = 1
(UInt32) mBytesPerFrame = 2
(UInt32) mChannelsPerFrame = 1
(UInt32) mBitsPerChannel = 16
(UInt32) mReserved = 0
Вопрос - почему выборочные значения, возвращаемые из mAudioData не правы?
Благодарим вас за ответ. Но я уже использовал пример аудио единицы из [link] (https://github.com/reinforce-lab/MonoTouch.AudioUnit) и SInt32, чтобы получить образцы значений, и это сработало для меня. Btw, есть ли разница между SInt16 и UInt16? Я имею в виду использование UInt16 вместо SInt16 для получения значений в диапазоне от 0 (-32767 в SInt16) до 65535 (32767 в SInt16) неправильно? – f3n1kc
Все в порядке со мной, но вы не увидите значений так же, как смелость, если вы не поменяете байты и не используете SInt16. – hooleyhoop