如何将标题添加到wav文件?

时间:2019-03-09 21:36:52

标签: node.js express blob wav multer

我正在将存储为Blob的音频数据发送到我的后端(节点/表达式)。当我将文件另存为.wav并尝试在python的SpeechRecogition包中使用时,会引发错误,提示“文件不是以RIFF ID开头”。那么,如何在保存前将标题添加到我的Blob文件中,以便它是格式正确的.wav文件?如有必要,我可以提供代码。

node.js文件

var multer = require('multer');
var fs = require('fs'); //use the file system so we can save files
var uniqid = require('uniqid');
var spawn = require('child_process').spawn;
const storage = multer.memoryStorage()
var upload = multer({ storage: storage });

router.post('/api/test', upload.single('upl'), function (req, res) {

   console.log(req.file);
   console.log(req.file.buffer);

   var id = uniqid();
   fs.writeFileSync(id+".wav", Buffer.from(new Uint8Array(req.file.buffer))); //write file to server as .wav file

   const scriptPath = 'handleAudio.py'
   const process = spawn('python3', [__dirname+"/../"+scriptPath, "/home/bitnami/projects/sample/"+id+".wav", req.file.originalname, 'True']); //throws error about header in .wav

});

我也有相同的示例,使用php端点,该端点只是将blob保存到扩展名为.wav的文件中,而python文件接受了该文件。 php中的move_uploaded_file中可能有什么不同,以及我在上面用node做的什么?

1 个答案:

答案 0 :(得分:0)

每个.wav文件都需要由WAVE文件格式指定的标头,here可用。虽然您可以自己构建标头,但仅使用适当的lib为您完成工作要容易得多。

一个示例是node-wav,它有一个不错的API,可以从原始PCM数据(当前所拥有的)中写入WAVE文件。 node-wav文档提供了示例代码。