我有一个iPAD申请。 此应用程序记录麦克风的声音。 该项目的音频格式必须是PCM,MP3和WAV文件。 MP3文件我从原始原始文件开始,然后使用LAME转换。 不幸的是,我没有找到任何允许我将PCM文件转换为WAV文件的示例。 我只是注意到,如果我把文件扩展名放到WAV格式,从原始应用程序开始保存没有问题,所以我认为没有PCM WAV文件的类型转换。 正确的吗?
PS:对不起我的英文...我使用谷歌翻译
答案 0 :(得分:13)
WAV是某种盒子。 PCM在盒子里。有许多容器格式,如MP4。 MP4可以包含音频,视频或两者。它还可以包含多个视频或音频流。或者zip文件。 Zip文件可以包含文本文件。但是zip文件也可以包含图像,pdf,...但是你不能说"如何将zip文件转换为zip"中的文本文件。
如果你想将PCM数据转换为WAVE文件,你应该没有太多问题,因为WAV文件是非常简单的文件。看看这个:
(另见here) 您首先需要该标题,然后只需附加所有pcm数据(参见数据字段)。
答案 1 :(得分:3)
将PCM转换为WAV并不太难。 PCM和WAV两种格式都包含原始PCM数据,唯一的区别是它们的标题(wav包含一个pcm没有的标题)。所以,如果你只是添加wav标题,那么它会做一些技巧。只需获取PCM数据并在PCM数据之上添加wav标头。要使用PCM数据添加wav标头,请选中此link。
答案 2 :(得分:1)
我正在一个只接受wav文件的系统上工作,但是我从亚马逊Polly那里收到的是pcm,所以最终做到了这一点,并解决了我的问题。希望它能帮助某人。这是一个nodejs的示例。
// https://github.com/TooTallNate/node-wav
const FileWriter = require('wav').FileWriter
let audioStream = bufferToStream(res.AudioStream);
var outputFileStream = new FileWriter(`${outputFileFolder}/wav/${outputFileName}.wav`, {
sampleRate: 8000,
channels: 1
});
audioStream.pipe(outputFileStream);
function bufferToStream(binary) {
const readableInstanceStream = new Stream.Readable({
read() {
this.push(binary);
this.push(null);
}
});
return readableInstanceStream;
}