Функция обратного вызова remoteIO дает нестабильный список буферов - PullRequest
0 голосов
/ 04 января 2012

каждый раз, когда вызывается функция обратного вызова аудиоустройства, я получаю другое количество выборок, что странно, потому что NSLog(@"%ld",inNumberFrames); дает мне всегда 512.

, когда я делаю это:

NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData));

я получаю такие числа, как: 50 20 19 160 200 1 ...

, что странно.при каждом обратном вызове я должен получить полный буфер 512 сэмплов, нет?

я знаю, что не получаю все необходимые сэмплы, потому что, если я введу sin 2 кГц, я получу пересечение нуля около 600, и если я ничего не положу, ig и тому же.

для извлечения данных, которые я делаю:

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


    AudioBuffer buffer;

    buffer.mNumberChannels = 1;
    buffer.mDataByteSize = inNumberFrames * 2;
    //NSLog(@"%ld",inNumberFrames);
    buffer.mData = malloc( inNumberFrames * 2 );

    // Put buffer in a AudioBufferList
    AudioBufferList bufferList;
    bufferList.mNumberBuffers = 1;
    bufferList.mBuffers[0] = buffer;



    OSStatus status;
    status = AudioUnitRender(audioUnit, 
                             ioActionFlags, 
                             inTimeStamp, 
                             inBusNumber, 
                             inNumberFrames, 
                             &bufferList);  
    //checkStatus(status);
    NSLog(@"%li",strlen((const char *)(&bufferList)->mBuffers[0].mData));
    int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
    for(int i=0; i < strlen((const char *)(&bufferList)->mBuffers[0].mData); i++)
    {
         ....

любая помощь с этим сэкономит мне дни!спасибо.

1 Ответ

0 голосов
/ 04 января 2012

Значение strlen () буфера аудиосэмпла равно , а не , относящемуся к числу семплов.Вместо этого посмотрите на количество кадров, указанное в качестве параметра функции обратного вызова.

...