0

我正在尝试将原始缓冲区数据捕获到音频文件中。像这样:

dstFormat.mSampleRate = 224000; 
dstFormat.mFormatID = kAudioFormatMPEG4AAC;
dstFormat.mChannelsPerFrame = 1;
dstFormat.mBitsPerChannel = 16;
dstFormat.mBytesPerPacket = dstFormat.mBytesPerFrame = 2 * dstFormat.mChannelsPerFrame;
dstFormat.mFramesPerPacket = 1;
dstFormat.mFormatFlags = kLinearPCMFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger;      
OSStatus result = ExtAudioFileCreateWithURL((CFURLRef) inURL,
                                            kAudioFileM4AType,
                                            &dstFormat,
                                            0,
                                            kAudioFileFlags_EraseFile,
                                            &audioFileRef)

我被一个具有以下参数的函数所吸引: AudioUnit inUnit, AudioUnitRenderActionFlags * ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inOutputBusNumber, UInt32 inNumberFrames, AudioBufferList * ioData

在其中我试图将数据写入文件,但出现错误的参数 -50 错误。结果 = ExtAudioFileWrite(audioFileRef, inNumberFrames, ioData);

如果我用自己的替换 ioData 参数:

 AudioBufferList *bufferList = (AudioBufferList*) malloc(sizeof(AudioBufferList));
    bufferList->mNumberBuffers = 1;// ioData->mNumberBuffers;
    for(UInt32 i=0;i<bufferList->mNumberBuffers;i++)
    {
        bufferList->mBuffers[i].mNumberChannels = 1; 
        bufferList->mBuffers[i].mDataByteSize = ioData->mBuffers[i].mDataByteSize; //ioData->mBuffers[i].mDataByteSize; // (1024*2) * dstFormat.mBytesPerFrame;
        bufferList->mBuffers[i].mData = ioData->mBuffers[i].mData;
    }

..我第一秒得到大约 260MB 的文件。这里有什么问题?

4

2 回答 2

1

我很惊讶 iPhone 甚至会使用这些参数创建一个音频文件,尽管我怀疑那是因为到目前为止你只在模拟器中而不是在硬件上测试过它。无论如何,您的流格式是这里的问题。

如果您正在捕获原始数据,那么为什么将格式 ID 设置为 m4a,然后将格式标志设置为使用线性 PCM?我也不确定您是如何达到 224kHz 的采样率的,但这会给您带来麻烦,并且至少部分解释了为什么输出文件大小如此之大。

我建议搜索一下以查看流描述结构的一些示例,因为它有点复杂。这个问题也可能会帮助您走上正轨:

CoreAudio - kAudioFileUnsupportedDataFormatError

于 2012-04-13T09:36:29.413 回答
1

几天前我刚刚弄清楚如何写入 AAC 格式。此处的详细信息 + 代码: 从 RemoteIO 录制到 AAC:正在写入数据,但文件无法播放

我只在 iPad Simulator + iPad 2 上的 iOS 5 上对此进行了测试。性能非常好,我非常尊重 Core Audio 的功能,但是天啊……Apple 可以记录更多。

于 2012-04-13T12:44:02.350 回答