bui*_*ded 13 objective-c core-audio avaudiorecorder audioqueue ios
我正在努力将音频传输到iPhone中,我可以将其传递给(C++)分析算法.当然,有很多选择:在trailinthes上的AudioQueue教程并开始工作.
然而,音频回调给出了一个AudioQueueRef,我发现Apple的文档在这方面很薄.内置方法可以写入文件,但实际上您不会在数据包内部查找数据.
我需要数据.我不想在文件中写任何内容,这就是所有教程 - 甚至Apple的便利I/O对象 - 似乎都是针对的.Apple AVAudioRecorder(激怒)会给你级别并写入数据,但实际上并没有让你访问它.除非我遗漏了什么......
这该怎么做?在下面的代码中有inBuffer->mAudioData一个非常接近,但我找不到有关这个'数据'的格式或如何访问它的信息.
AudioQueue回调:
void AudioInputCallback(void *inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs)
{
static int count = 0;
RecordState* recordState = (RecordState*)inUserData;
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
++count;
printf("Got buffer %d\n", count);
}
Run Code Online (Sandbox Code Playgroud)
以及将音频写入文件的代码:
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData); // THIS! This is what I want to look inside of.
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}
Run Code Online (Sandbox Code Playgroud)
bui*_*ded 10
// so you don't have to hunt them all down when you decide to switch to float:
#define AUDIO_DATA_TYPE_FORMAT SInt16
// the actual sample-grabbing code:
int sampleCount = inBuffer->mAudioDataBytesCapacity / sizeof(AUDIO_DATA_TYPE_FORMAT);
AUDIO_DATA_TYPE_FORMAT *samples = (AUDIO_DATA_TYPE_FORMAT*)inBuffer->mAudioData;
Run Code Online (Sandbox Code Playgroud)
然后,你有你的(这种情况下SInt16)阵列samples,你可以从访问samples[0]到samples[sampleCount-1].
| 归档时间: |
|
| 查看次数: |
3454 次 |
| 最近记录: |