1
오디오 샘플 값을 읽어야합니다. 나는 (애플 SpeakHere 예제에서) 그 audioQueue 콜백을 위해 사용하고 있습니다 :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의 차이점은 무엇입니까? SInt16 대신 UInt16을 사용하여 0에서부터 -32767 (SInt16에서 -32767)까지의 값을 65535 (SInt16에서 32767)까지 얻는 것은 잘못된 것입니까? – f3n1kc
괜찮아요.하지만 바이트 스왑을 쓰지 않고 SInt16을 사용하지 않으면 대담함과 같은 값을 보지 못할 것입니다. – hooleyhoop