2015-10-30 3 views
0

У меня проблемы с TPCircularBuffer.Неверные значения копируются в TPCircularBuffer

Когда я распечатываю образцы непосредственно из буфера обратного вызова, я вижу правильные значения, но как только я их скопирую в TPCircularBuffer, они неверны.

Любые идеи?

Я использовал TPCircularBuffer в тестовом приложении, и все работало отлично.

Большое вам спасибо за вашу помощь!

Этих соответствующие части коды:

// Declare and initialize TPCircularBuffer 
TPCircularBuffer circularBuffer; 
TPCircularBufferInit(&circularBuffer, 4096); 

// Callback stores signed integers in inBuffer->mAudioData. 
SInt16 * buffer = (SInt16*) inBuffer->mAudioData; 

int32_t availableBytes; 

// Each SInt16 is 2 bytes. 
// So, this should place 512 SInt16 values from the buffer 
// into the circularBuffer, right? 
TPCircularBufferProduceBytes(&circularBuffer, &buffer, 1024); 

SInt16 *ptr2 = TPCircularBufferTail(&circularBuffer, &availableBytes); 
printf("Total byte size of buffer: %i\n", (int)availableBytes); 
printf("circularBuffer[0] = %i\n", ptr2[0]); 
printf("buffer[0] = %i\n", buffer[0]); 

Это распечатка:

Total byte size of buffer: 1024 
circularBuffer[0] = -16384 
buffer[0] = 0 

ответ

0

Я не совсем уверен, что вы спрашиваете, так вот краткий пример.

Initialization:

TPCircularBuffer tpBuffer; 
int secondsOfBuffer = 8; 
float sampleRate = 44100.0; 
int bufferByteSize = secondsOfBuffer * sampleRate * sizeof(SInt16); 
TPCircularBufferInit(&tpBuffer, bufferByteSize); 

Запись в голову:

int32_t availableBytes; 
SInt16 *head = TPCircularBufferHead(&tpBuffer, &availableBytes); 
int sampleCount = 1024; 
for (int i = 0; i < 1024; i++) { 
    head[i] = i; 
} 
TPCircularBufferProduce(&tpBuffer, sampleCount * sizeof(SInt16)); 

Чтение из хвоста:

SInt16 *tail = TPCircularBufferTail(&tpBuffer, &availableBytes); 
int32_t availableBytes; 
int availableSamples = availableBytes/sizeof(SInt16); 
for (int i = 0; i < availableSamples; i++) { 
    printf("%i\n",tail[i]); 
} 
TPCircularBufferConsume(&tpBuffer, sizeof(SInt16) * sampleCount); 

 Смежные вопросы

  • Нет связанных вопросов^_^