Я хочу отображать волну в режиме реального времени с микрофона. Я был реализован с использованием installTapOnBus: bufferSize: format: block :, Эта функция вызывается три раза за одну секунду. Я хочу, чтобы эту функцию вызывали 20 раз в секунду. Где я могу установить?Я хочу позвонить 20 раз в секунду installTapOnBus: bufferSize: format: block:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError* error = nil;
if (audioSession.isInputAvailable) [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if(error){
return;
}
[audioSession setActive:YES error:&error];
if(error){
retur;
}
self.engine = [[[AVAudioEngine alloc] init] autorelease];
AVAudioMixerNode* mixer = [self.engine mainMixerNode];
AVAudioInputNode* input = [self.engine inputNode];
[self.engine connect:input to:mixer format:[input inputFormatForBus:0]];
// tap ... 1 call in 16537Frames
// It does not change even if you change the bufferSize
[input installTapOnBus:0 bufferSize:4096 format:[input inputFormatForBus:0] block:^(AVAudioPCMBuffer* buffer, AVAudioTime* when) {
for (UInt32 i = 0; i < buffer.audioBufferList->mNumberBuffers; i++) {
Float32 *data = buffer.audioBufferList->mBuffers[i].mData;
UInt32 frames = buffer.audioBufferList->mBuffers[i].mDataByteSize/sizeof(Float32);
// create waveform
...
}
}];
[self.engine startAndReturnError:&error];
if (error) {
return;
}
Благодарим за ответ. Я жду вашего замечательного кода! – Melodybox
К сожалению, мой эксперимент не удался (установка обратного вызова рендеринга на входном узле). Моя функция обратного вызова вызывается, и я получаю допустимые буферы, однако все значения выборки равны 0. Предположительно, для входного узла существует специальное поведение, препятствующее этому работать. Извините, что не смог решить нашу проблему и сделать работу AVAudioEngine для наших целей. Я собираюсь преследовать реализацию C++ со старым API ... –
Melodybox, если вы хотите взять дорогу C/C++ для своего решения, посмотрите https://github.com/abbood/Learning-Core-Audio-Book-Code-Sample. Книга, которая идет с ней, тоже стоит покупать. Не уверен, работаете ли вы на OS X или iOS, но если вы работаете в iOS, посмотрите проект Chapter10_iOSPlayThrough в указанном репозитории. –