我已经在这个问题上苦苦挣扎了很长一段时间,并且没有代码示例在网上完成。谁能帮我?
我的应用使用AVFoundation录制音频。 @ 16位深度,2个通道,WAV
我可以访问音频的字节,我只是不知道如何反转它。
答案 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)