Управление аудиоданными в C ++ для целей DSP - PullRequest
1 голос
/ 09 декабря 2010

Надеюсь, этот вопрос не слишком расплывчатый.Я пытаюсь взять информацию из аудио-буфера в этом проекте XCode и использовать его для создания некоторого DSP.

framebuffer указывает на массив значений, которые я хотел бы передать в функцию, выполнить цикл и, наконец,подключить в исходный буфер.Метод будет действовать как звуковой фильтр или эффект.

Может быть, чтобы сохранить мой вопрос как можно более ясным, могли бы мы получить пример подпрограммы, которая добавит 0,25 к каждому образцу в буфере?

Вот код на данный момент:

static OSStatus playbackCallback(void *inRefCon, 
                                 AudioUnitRenderActionFlags *ioActionFlags, 
                             const AudioTimeStamp *inTimeStamp, 
                             UInt32 inBusNumber, 
                             UInt32 inNumberFrames, 
                             AudioBufferList *ioData) {   

EAGLView *remoteIOplayer = (EAGLView *)inRefCon;
for (int i = 0 ; i < ioData->mNumberBuffers; i++){
    //get the buffer to be filled

    AudioBuffer buffer = ioData->mBuffers[i];
    short *frameBuffer = (short*)buffer.mData;


        for (int j = 0; j < inNumberFrames; j++){
            // get NextPacket returns a 32 bit value, one frame.
                frameBuffer[j] = [[remoteIOplayer inMemoryAudioFile] getNextPacket];    
        }

        EAGLView* thisView = [[EAGLView alloc] init];

        [thisView DoStuffWithTheRecordedAudio:ioData];
        [thisView release];
        }

return noErr;
}

1 Ответ

2 голосов
/ 10 декабря 2010

Попытка сделать пользовательский интерфейс или Open GL внутри аудиозвонка - плохая идея на устройствах iOS. Вам необходимо отделить обратный вызов и выполнение пользовательского интерфейса с помощью очередей или fifos и т. П.

Попытка передачи сообщений Objective C во внутреннем цикле звука в реальном времени также может быть очень плохой идеей с точки зрения производительности устройства. Придерживаясь простого C / C ++ работает намного лучше в критических по производительности внутренних циклах.

Кроме того, добавление константы к аудиоданным, скорее всего, приведет к неслышимому смещению постоянного тока.

...