Какой формат потока должен использовать блоки эффектов iOS5 - PullRequest
5 голосов
/ 30 января 2012

Я пытаюсь использовать фильтр низких частот AU. Я продолжаю получать ошибку kAudioUnitErr_FormatNotSupported (-10868) при установке формата потока на модуль фильтра, но если я просто использую модуль удаленного ввода-вывода, ошибки не возникает.

Используемый формат потока: (Обновлено):

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;  

И я устанавливаю поток фильтра следующим образом:

 // 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");

Ответы [ 3 ]

3 голосов
/ 30 января 2012

Канонический формат для аудиоустройств фильтра iOS - 8,24 с фиксированной запятой (линейная PCM), что составляет 32 бита на канал, а не 16.

2 голосов
/ 20 апреля 2012

в каком формате работает ревербератор ???Я получаю странные ошибки, пытаясь записать буфер .... какие-либо новости на эту тему?

0 голосов
/ 27 декабря 2012

Попробуйте это для канонического формата.

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

Вам необходимо убедиться, что все ваши ASBD AudioUnits настроены одинаково.

Если вы делаете тяжелыйобработка звука, float (поддерживается в iOS5) тоже неплохая идея.

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
...