我一直在努力研究这个问题很长一段时间了,并且没有在网络上完成的代码示例。谁能帮我?Objective-c/IOS:向后播放音频文件最简单的方法是什么
我的应用程序使用AVFoundation来录制音频。 @ 16位深度,2个通道,WAV
我可以访问音频的字节,我只是不知道如何反转它。
我一直在努力研究这个问题很长一段时间了,并且没有在网络上完成的代码示例。谁能帮我?Objective-c/IOS:向后播放音频文件最简单的方法是什么
我的应用程序使用AVFoundation来录制音频。 @ 16位深度,2个通道,WAV
我可以访问音频的字节,我只是不知道如何反转它。
在波数据样本中是交错的。这意味着数据是这样组织的。由于每个采样是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;
}
假定一个单块的WAV文件,尝试memmapping该文件,并以相反的顺序出复制的样品中,从文件的末端开始,到音频队列或RemoteIO缓冲器,在回调期间,使用其中一种API播放音频。在到达WAV/RIFF头部之前停止复制(通常是第44个字节)。
要反转音频,为什么不使用MPMediaPlayback的currentPlaybackRate(https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPMediaPlayback_protocol/Reference/Reference.html)
的难点在于它是否具有标题和块的wav文件格式。 – zaph
@CocoaFu:不是。 Apple为您提供了一大堆处理波形文件的函数。这种格式并不是你自己很难完成的。 – Goz
@Goz谢谢,如果问得不是太麻烦,你能提供一个代码样本来帮助我理解吗?这将如何实现代码明智? – DaveSmith122