iOS 용 주파수 감지 응용 프로그램에서 작업 중이며 마이크에서 오디오 샘플로 사용자 정의 AudioBufferList를 채우는 데 문제가 있습니다.원격 I/O, AudioUnitRender -50 리턴 코드로 녹음
InputCallback 메서드에서 AudioUnitRender를 호출하면 반환 코드가 -50이됩니다. 내 매개 변수 중 하나가 잘못되었음을 의미합니다 믿습니다. 나는 그것이 AudioBufferList라고 추측하고 있지만, 무엇이 잘못되었는지 알아낼 수 없었다. 내 ASBD에서 지정한 데이터 형식과 일치하도록 설정 한 것 같습니다. 다음은
리모트 I/O 설정과 기능은 내가 잘못 될 수 믿고 호출ASBD :
size_t bytesPerSample = sizeof(AudioUnitSampleType);
AudioStreamBasicDescription localStreamFormat = {0};
localStreamFormat.mFormatID = kAudioFormatLinearPCM;
localStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
localStreamFormat.mBytesPerPacket = bytesPerSample;
localStreamFormat.mBytesPerFrame = bytesPerSample;
localStreamFormat.mFramesPerPacket = 1;
localStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
localStreamFormat.mChannelsPerFrame = 2;
localStreamFormat.mSampleRate = sampleRate;
InputCallback 선언 :
err = AudioUnitSetProperty(ioUnit, kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Input,
kOutputBus, &callbackStruct, sizeof(callbackStruct));
AudioBufferList 선언 :
// Allocate AudioBuffers
bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
bufferList->mNumberBuffers = 1;
bufferList->mBuffers[0].mNumberChannels = 2;
bufferList->mBuffers[0].mDataByteSize = 1024;
bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
,691,363,210
InputCallback 기능 :
AudioUnit rioUnit = THIS->ioUnit;
OSStatus renderErr;
UInt32 bus1 = 1;
renderErr = AudioUnitRender(rioUnit, ioActionFlags, inTimeStamp, bus1, inNumberFrames, THIS->bufferList);
몇 가지주의 할 :
- /O 데이터가 8.24 비트 고정 점 I는 샘플 레이트 = 리모트 I의 표준 형식 이후 22,050 Hz의
- 인 샘플은 각각 32 비트 (또는 4 바이트)라고 가정합니다. unsigned int가 4 바이트이기 때문에 저는 이것을 사용하여 오디오 버퍼를 할당합니다.
- 오디오 데이터 흐름을 입력 대신 PassThru로 구현하면 오디오를 올바르게 렌더링 할 수있는 동일한 코드를 얻을 수 있습니다.
- 원격 I/O에서 이미 Michael Tyson's blog post을 보았습니다. 내가하고있는 것과는 다른 어떤 것도 보지 못했다.
다시 한 번 감사드립니다.
라고 Demetri
필자가 언급 한 주파수 탐지 어플리케이션을 마쳤습니다. 관심있는 사람들을 위해 소스 코드와 함께 글을 올렸습니다. 편집 : 링크 ... http : //sleepyleaf.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88
언급 된 코드가 발견되지 않았습니다. 링크 sleepyleaf.com/2011/ 01/25/pitch-in-ios-4-x - irtemed88 –
죄송합니다. 도메인을 업데이트했습니다. 새 링크 : http://demetrimiller.com/2011/01/25/pitch-detection-in-ios-4-x/ – irtemed88