在 iPhone 上将声音录制为 WAV

Posted

技术标签:

【中文标题】在 iPhone 上将声音录制为 WAV【英文标题】:Recording sound as WAV on iphone 【发布时间】:2010-10-08 21:33:21 【问题描述】:

我正在制作一个 iPhone 录音应用,它需要将声音文件作为 .wav 提交到外部服务器。

从 SpeakHere 示例开始,我可以将声音录制为文件,但只能录制为 .caf

有人知道如何将它录制为 wav 吗?或者如何在 iPhone 上将 .caf 转换为 .wav? (转换必须在手机上进行)

编辑:

我想知道在 AudioFileCreateWithURL 中使用 kAudioFileWAVEType 而不是 kAudioFileCAFType 是否可以做任何事情

【问题讨论】:

【参考方案1】:

看看libsndfile。它是一个很好用(包括 Audacity)的 C 库,用于处理许多文件格式。支持多种CAF和WAV格式的读写。

CAF File structure 和 WAV format 非常相似。如果最坏的情况发生在最坏的情况下,转换应该不会太难。

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

但是,请注意(正如 Eric 指出的那样)存在许可问题,请参阅:Can the Libsndfile library be used on the iPhone ios?

【讨论】:

谢谢。我使用 WAV 格式链接来确认录制工作正常。我在向服务器发送数据时遇到问题。 我投了反对票,因为 libsndfile 不能在 iPhone 上使用:***.com/questions/4939268/… 感谢您的评论。您仍然可以通过静态链接到您的代码中来使用它(或者至少您提到的答案是这样说的),但这绝对值得在这里的答案中提及。我加一下 其实你也不能静态链接,除非你提供目标文件或者源代码给最终用户。【参考方案2】:

是的,关键是 kAudioFileWAVEType

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

在 SpeakHere 示例中从 CAF 更改为 WAVE 会导致录音为 wav。我也在播放类中编辑了相同的东西,并将文件名更改为 Recording.wav

【讨论】:

小心。带有 kAudioFileWAVEType 的 AVAudioFileTypeKey 仅适用于 iOS 11.0 或更高版本

以上是关于在 iPhone 上将声音录制为 WAV的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 应用程序中录制和播放声音?

声音操作反向/在 iPhone 上向后播放录制的声音

iPhone:在没有麦克风的情况下录制输出声音

使用 NSData 在 iPhone 上将音频文件正确组合为一个

如何在iPhone中以mp3格式录制声音[重复]

iOS - 使用 AVFoundation 录制声音后 iPhone 声音级别低