在iPhone上录制声音为WAV格式

14

我正在开发一款iPhone录音应用程序,需要将声音文件提交为.wav格式到外部服务器。

从SpeakHere示例开始,我能够将声音记录为文件,但只能以.caf格式。

是否有人知道如何以.wav格式进行记录?或者如何在iPhone上将.caf格式转换为.wav格式?(转换必须在手机上进行)

编辑:

我想知道在AudioFileCreateWithURL中使用kAudioFileWAVEType而不是kAudioFileCAFType是否可行。

2个回答

20

是的,关键是 kAudioFileWAVEType

AudioFileCreateWithURL (
            audioFileURL,
            kAudioFileWAVEType,
            &audioFormat,
            kAudioFileFlags_EraseFile,
            &audioFileID
        );

在SpeakHere示例中从CAF更改为WAVE会导致录音变成wav格式。我还在播放类中进行了相同的更改,并将文件名更改为Recording.wav。


请注意,AVAudioFileTypeKey与kAudioFileWAVEType仅适用于iOS 11.0或更新版本。 - CFIFok

2
看一下libsndfile。它是一个广泛应用的(包括Audacity在内)C库,可处理许多文件格式。它支持读写各种CAF和WAV格式。

CAF文件结构WAV格式相当相似。如果情况最坏,转换不应该太难。

这将涉及获取音频数据块,并将其原样复制到WAV文件中,并使用音频描述块中的信息添加等效fmt 子块以进行WAV文件。这是相当简单的字节复制。

然而,请注意(正如Eric指出的那样),存在许可问题,请参见:Libsndfile库可在iPhone iOS上使用吗?


1
谢谢。我使用了WAV格式的链接来确认录音是否正常工作。我在向服务器发送数据时遇到了问题。 - matt
1
我投票反对此问题,因为libsndfile库无法在iPhone上使用:https://dev59.com/zlTTa4cB1Zd3GeqPpiX2 - Eric Brotto
感谢您的评论。您仍然可以通过在代码中静态链接它(或者您提到的答案至少是这样说的)来使用它,但这绝对值得在此回答中提及。我会添加它。 - Nick Fortescue
1
实际上,你也无法静态链接它,除非你向最终用户提供目标文件或源代码。 - damian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接