Posiadałem dwie różne konfiguracje kAudioUnitProperty_StreamFormat na podstawie liczby kanałów.
size_t bytesPerSample = sizeof (AudioUnitSampleType);
stereoStreamFormat.mFormatID = kAudioFormatLinearPCM;
stereoStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
stereoStreamFormat.mBytesPerPacket = bytesPerSample;
stereoStreamFormat.mFramesPerPacket = 1;
stereoStreamFormat.mBytesPerFrame = bytesPerSample;
stereoStreamFormat.mChannelsPerFrame = 2;
stereoStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
stereoStreamFormat.mSampleRate = graphSampleRate;
i
size_t bytesPerSample = sizeof (AudioUnitSampleType);
monoStreamFormat.mFormatID = kAudioFormatLinearPCM;
monoStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
monoStreamFormat.mBytesPerPacket = bytesPerSample;
monoStreamFormat.mFramesPerPacket = 1;
monoStreamFormat.mBytesPerFrame = bytesPerSample;
monoStreamFormat.mChannelsPerFrame = 1; // 1 indicates mono
monoStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
monoStreamFormat.mSampleRate = graphSampleRate;
z tych formatów audio strumienia podczas korzystania z urządzenia I/O jako kAudioUnitSubType_VoiceProcessingIO
AudioComponentDescription iOUnitDescription;
iOUnitDescription.componentType = kAudioUnitType_Output;
iOUnitDescription.componentSubType = kAudioUnitSubType_VoiceProcessingIO;
iOUnitDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
iOUnitDescription.componentFlags = 0;
iOUnitDescription.componentFlagsMask = 0;
mogę wyraźnie zobaczyć na przerwanie wyjścia audio, jak rozmiar bufora był mniejszy niż rozmiar z tej AudioUnit.
Przełączanie na kAudioUnitSubType_RemoteIO
iOUnitDescription.componentSubType = kAudioUnitSubType_RemoteIO;
Ta przerwa znika.
Przetwarzam wejście audio z mikrofonu i wykonuję obliczenia w czasie rzeczywistym na buforach audio.
W metodach graphSampleRate jest częstotliwość próbkowania AVSession
graphSampleRate = [AVAudioSession sharedInstance] sampleRate];
a może tu się mylę.
Na koniec wartości parametrów konfiguracyjnych są następujące:
Format strumienia stereo:
Sample Rate: 44100
Format ID: lpcm
Format Flags: 3116
Bytes per Packet: 4
Frames per Packet: 1
Bytes per Frame: 4
Channels per Frame: 2
Bits per Channel: 32
Format strumień mono:
Sample Rate: 44100
Format ID: lpcm
Format Flags: 3116
Bytes per Packet: 4
Frames per Packet: 1
Bytes per Frame: 4
Channels per Frame: 1
Bits per Channel: 32
Dzięki, działa również z innymi wskaźnikami próbkowania (używam 16 000). Format FlagsCanonical oznacza w systemie MAC OS X Float32 zakres od -1.0 do 1.0. – sarsonj
@sarsonj: Czy jesteś pewien, że możesz sprawić, by działał z częstotliwością próbkowania inną niż domyślna 44100? Dostaję kAudioUnitErr_FormatNotSupported podczas próby ustawienia 16000 lub 48000. – Erfan
Używam jednego kanału, 16000 z kAudioFormatFlagsCanonical na Macu i działa dobrze. – sarsonj