Ограничение воспроизведения CoreAudio на iPhone - PullRequest
0 голосов
/ 08 ноября 2010

Я пишу секвенсор битбокс для iphone, используя CoreAudio.

У меня есть 4 звука, которые играют на паттерне. У меня есть AUGraph с IORemote и MultiChannelMixer вместе. 4 входа микшера имеют функцию обратного вызова, считывающую звуковые буферы, прикрепленные к нему. Он работает хорошо, если паттерн секвенсора прост и не воспроизводит слишком много звуков одновременно. Если я включаю несколько звуков одновременно, появляются глюки и звучит, как будто процессор перегружен (я использую iPhone 1-го поколения для тестирования).

Я использую звуковые файлы CAF (16 бит, 44,1 кГц) и канонический аудиоформат:

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        = 44100.0;

Есть ли что-то, чего мне не хватает или что я должен знать, что может улучшить мою программу? Или я бью ограничение процессора для iPhone 1-го поколения?

Большое спасибо.

Паскаль

1 Ответ

0 голосов
/ 20 ноября 2010

Что ж, iPhone 1-го поколения немного медленный, но он определенно должен справиться с этим. Я подозреваю, что причина вашего сбоя в том, что AudioUnitSampleType - это 4 байта, хотя я не уверен, что это то же самое для iPhone, как и на рабочем столе. Попробуйте вместо этого использовать 16-битный звук и посмотрите, не поможет ли это.

...