2012-01-29 11 views
5

Próbuję użyć filtra dolnoprzepustowego AU. Wciąż otrzymuję błąd kAudioUnitErr_FormatNotSupported (-10868) podczas ustawiania formatu strumienia na jednostkę filtrującą, ale jeśli po prostu używam urządzenia zdalnego IO, nie ma błędu.Jaki format strumienia powinny jednostki efektów iOS5 używać

Format strumień używam jest (Aktualizacja):

myASBD.mSampleRate = hardwareSampleRate; 
myASBD.mFormatID = kAudioFormatLinearPCM;  
myASBD.mFormatFlags = kAudioFormatFlagIsSignedInteger; 
myASBD.mBitsPerChannel = 8 * sizeof(float); 
myASBD.mFramesPerPacket = 1;           
myASBD.mChannelsPerFrame = 1;   
myASBD.mBytesPerPacket = sizeof(float) * myASBD.mFramesPerPacket;                    
myASBD.mBytesPerFrame = sizeof(float) * myASBD.mChannelsPerFrame; 

A ja ustawienie strumienia filtra takiego:

// Sets input stream type to ASBD 
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &myASBD, sizeof(myASBD)); 
NSLog(@"Filter in: %i", setupErr); 

//NSAssert(setupErr == noErr, @"No ASBD on Finput"); 


//Sets output stream type to ASBD 
setupErr = AudioUnitSetProperty(filterUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &myASBD, sizeof(myASBD)); 
NSLog(@"Filter out: %i", setupErr); 
NSAssert(setupErr == noErr, @"No ASBD on Foutput"); 

Odpowiedz

3

Format kanoniczny dla jednostek filtrów audio iOS 8.24 stały punkt (liniowy PCM), który wynosi 32 bity na kanał, a nie 16.

+0

Próbowałem za pomocą 32 kanałów bitowe i wciąż pojawiają się błędy format strumienia. Powiedziano mi gdzie indziej, że wbudowane efekty AU w iOS5 również nie używają formatu kanonicznego. Próbowałem pobrać format strumienia z jednostki filtrującej za pomocą AudioUnitGetProperty, ale za każdym razem gdy próbuję, pojawia się błąd. Czy lepszym pomysłem byłoby skorzystanie z wywołania renderowania i użycie aktualnego ASBD? –

+0

Czy ustawiłeś typ stały lub pływakowy? To jedna różnica między formatem kanonicznym na Macu i iOS. – hotpaw2

+0

Zmieniliśmy to, więc nie używam float, ale nadal dostaję błąd. Nie jestem pewien, czy ustawiam filtr ASBD poprawnie, bo właśnie tam dostaję błąd. –

2

jaki format działa z jednostką pogłosu? Dostaję dziwne błędy, próbuję nagrać bufor ... jakieś wiadomości na ten temat?

0

Spróbuj tego dla formatu kanonicznego.

size_t bytesPerSample = sizeof (AudioUnitSampleType); //Default is 4 bytes 
myASBD.mSampleRate  = hardwareSampleRate; 
myASBD.mFormatID   = kAudioFormatLinearPCM; 
myASBD.mFormatFlags  = kAudioFormatFlagsAudioUnitCanonical; //Canonical AU format 
myASBD.mBytesPerPacket = bytesPerSample; 
myASBD.mFramesPerPacket = 1; 
myASBD.mBytesPerFrame  = bytesPerSample; 
myASBD.mChannelsPerFrame = 2; //Stereo 
myASBD.mBitsPerChannel = 8 * bytesPerSample; //32bit integer 

Trzeba będzie sprawdzić, czy wszystkie Audio Units ASBDs są skonfigurowane jednakowo.

Jeśli wykonujesz intensywne przetwarzanie dźwięku, pływaki (obsługiwane w iOS5) również nie są złym pomysłem.

size_t bytesPerSample  = sizeof (float); //float is 4 bytes 
myASBD.mSampleRate  = hardwareSampleRate; 
myASBD.mFormatID   = kAudioFormatLinearPCM; 
myASBD.mFormatFlags  = kAudioFormatFlagIsFloat; 
myASBD.mBytesPerPacket = bytesPerSample; 
myASBD.mFramesPerPacket = 1; 
myASBD.mBytesPerFrame  = bytesPerSample; 
myASBD.mChannelsPerFrame = 2; 
myASBD.mBitsPerChannel = 8 * bytesPerSample; //32bit float 
Powiązane problemy