iPhone のコールバック機能を使用して、マイク入力信号を取得しようとしています。非常に多くの問題の後、私はこれを発見しました:バッファに純粋な正弦波を(Macシミュレータに)入力すると、信号を見ることができますが、その後、ゼロまでどんどん低くなります。
これはアップルのバグに関連していると考えていました.Macのバッファのサンプル数は 1024 ではなく 471 です. どうにかしてこのバグを解決できますか???
これは私のコールバックです:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2; //* sizeof(SInt16) ?
buffer.mData = NULL;
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
//here i print q,which is good for 4 seconds-when i can see the pure sin, than it goes down to zero-while sin wave is still in the air
編集:
これはデバイスでは発生せず、Mac でのみ発生します。Mac がバッファ内に 417 個のサンプルを表示するというバグに関連していると確信しています。