【问题标题】:How do you add a header to wav file?如何在 wav 文件中添加标题?
【发布时间】:2019-07-31 14:33:33
【问题描述】:

我正在将存储为 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.js 代码吗?

标签: node.js express blob wav multer


【解决方案1】:

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

一个例子是node-wav,它有一个很好的 API 可以从原始 PCM 数据(你目前拥有的)写入 WAVE 文件。示例代码由 node-wav 文档提供。

【讨论】:

  • 这解决了这个问题,谢谢!我现在收到一个新错误not a whole number of frames 你知道这个错误是什么或如何解决它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多