我想以编程方式生成一个声波,并用AVAudioPlayer播放它。我有代码来编码我的波形为线性PCM,44100 the,单声道,每个样本8位。
我不清楚我需要什么样的信封来包装这个缓冲区,以便AVAudioPlayer将其识别为PCM。
发布于 2010-04-01 04:39:03
PCM只是模拟音频信号的数字表示。不幸的是,它没有封装任何关于音频通道、位深度或采样率的元数据-所有这些都是正确读取PCM数据所必需的。我假设只要能够在AVAudioPlayer对象中手动设置这些变量,AVAudioPlayer就会接受包装在NSData对象中的PCM数据。不幸的是,这些变量是只读的,所以即使文档说AVAudioPlayer可以处理Core Audio可以处理的任何东西,它也没有办法处理原始的LPCM数据。
正如zoul所说的,我认为最简单的方法就是抛出WAV头,因为头会通知AVPlayer上面需要的变量。它有44个字节,很容易模拟,并且定义得很好-我使用上面给出的相同的definition来实现wav报头编码和解码。而且,它只是放在未修改的LPCM数据的前面。
发布于 2010-03-28 16:52:40
也许添加一个WAV header会有所帮助?
发布于 2019-05-17 05:06:32
我发布了一个Swift 5示例(作为GitHub要点),该示例将音频浮动样本的缓冲区转换为内存中的WAV文件,以便与AVAudioPlayer initWithData一起使用,此处:https://gist.github.com/hotpaw2/4eb1ca16c138178113816e78b14dde8b
https://stackoverflow.com/questions/2532232
复制相似问题