Objective-c / IOS:向后播放音频文件的最简单方法是什么

时间:2011-09-10 19:13:45

标签: iphone objective-c audio reverse

我已经在这个问题上苦苦挣扎了很长一段时间,并且没有代码示例在网上完成。谁能帮我?

我的应用使用AVFoundation录制音频。 @ 16位深度,2个通道,WAV

我可以访问音频的字节,我只是不知道如何反转它。

3 个答案:

答案 0 :(得分:7)

在波形数据中,样本是交错的。这意味着数据的组织方式如下。

Sample 1 Left | Sample 1 Right | Sample 2 Left | Sample 2 right ... Sample n Left | Sample n right

由于每个样本为16位(2字节),因此前2个通道样本(即左右两个)的大小为4个字节。

这样您就知道波形数据块中的最后一个样本如下:

wavDataSize - 4

然后,您可以通过从记录结束开始并向后阅读将其复制到不同的缓冲区中,一次加载每个样本。当您到达波形数据的开头时,您已经反转波形数据并且播放将被反转。

编辑:如果您想在iOS上轻松阅读wave文件,请查看Audio File Services Reference

编辑2:

readPoint  = waveDataSize;
writePoint = 0;
while( readPoint > 0 )
{
    readPoint -= 4;
    Uint32 bytesToRead = 4;
    Uint32 sample;
    AudioFileReadBytes( inFile, false, maxData, &bytesToRead &sample );
    AudioFileWriteBytes( outFile, false, writePoint, &bytesToRead, &sample );

    writePoint += 4;
}

答案 1 :(得分:0)

假设单块WAV文件,尝试memmapping该文件,并在回调期间以相反的顺序从样本开始将样本复制到Audio Queue或RemoteIO缓冲区中,同时使用其中一个API播放音频。在到达WAV / RIFF标题之前停止复制(通常是前44个字节)。

答案 2 :(得分:0)

要反转音频,为什么不在MPMediaPlayback中使用currentPlaybackRate(https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)