2010-11-23 1 views
1

Я работаю над приложением для iOS, связанным с DSP. Часть работы заключается в копировании аудиоданных из outBuffer -> mAudioData в заданный пользователем массив для обработки данных. Метод чтения таков:AudioQueue: Не удается прочитать необработанные данные в AudioFileReadPackets

OSStatus result = AudioFileReadPackets(myInfo->mAudioFile,  // The audio file from which packets of audio data are to be read. 
             false,     // Set to true to cache the data. Otherwise, set to false. 
             &numBytes,    // On output, a pointer to the number of bytes actually returned. 
             myInfo->mPacketDescs, // A pointer to an array of packet descriptions that have been allocated. 
             myInfo->mCurrentPacket, // The packet index of the first packet you want to be returned. 
             &nPackets,    // On input, a pointer to the number of packets to read. On output, the number of packets actually read.           
             outBuffer->mAudioData); // A pointer to user-allocated memory. 

Этот процесс является успешным. Но когда я пытаюсь читать данные из outBuffer-> mAudioData, всегда есть ошибка говоря недопустимое преобразование из «ничтожной * сопзЬ» до 'SInt16 *:

outBuffer->mAudioDataByteSize = numBytes;  
SInt16 *testBuffer = outBuffer->mAudioData; //Read data from buffer... Error! 

for (int i=0; i<numBytes; i++) 
{ 
    UInt16 currentData = testBuffer[i]; 
    printf("Current data in testbuffer is %d", currentData); 
} 

Я прошел через несколько взаимосвязанных вопросов, как THIS и THIS, кажется, что они работают ... Я также попытался заменить outBuffer-> mAudioData на testBuffer в AudioFileReadPackets(), но testBuffer оказывается пустым массивом.

Так это правильный подход? Есть ли другой способ прочитать необработанные данные в массиве int/float?

Или, в общем, как получить доступ к указателю константы void и выполнить операцию чтения/записи? (Да, мой C++ не так сильна ...)

Любая помощь будет оценена :-)

Приветствия, Manca

ответ

2

Я просто поставить бросок впереди и казалось, на работу:

SInt16* frames = (SInt16*)inBuffer->mAudioData;