如何使用Node.js将音频样本数组写入wav文件?

时间:2016-04-08 21:25:16

标签: javascript node.js audio wav javascript-oscillator

我用JavaScript编写一个振荡器,在正弦波频率之间产生扫描(即啁啾)。为了测试,我想将样本(浮点数)写入wav文件。我如何在Node.js中执行此操作?我已经在浏览器端看到了大量信息,但没有看到任何特定于Node的内容或任何依赖于浏览器API的信息。

2 个答案:

答案 0 :(得分:3)

这可以使用最小的包 node-wav 和类似于下面的代码段来完成:

首先安装依赖:

npm i node-wav

然后,使用类似的东西

let fs = require('fs');
let wav = require('node-wav');

// Parameters for the below data
const size =  5000
const amplitude = 128
const sampleRate = 20

// Generate some random data for testing
const data = (new Array(3)).fill((new Array(size)).fill(Math.random() * amplitude))

let buffer = wav.encode(data, { sampleRate: sampleRate, float: true, bitDepth: 32 });

fs.writeFile("test.wav", buffer, (err) => {
  if (err) return console.log(err);

  console.log("test.wav written");
});

考虑到您已经知道数据的应用,您知道所有“常量”参数(输出大小、比特率、要写入的实际数据、位深度)。

答案 1 :(得分:-3)

您可以使用内置的 Node.js fs.writeFile() api 写入文件。

顺便说一句,我认为您所要做的就是循环播放您的音频样本,将它们添加到迭代中的一个字符串中,然后将该字符串放入一个文件中,如下所示:

const fs = require("fs");

// Code to generate audio

let audio = "";

samples.forEach((sample) => {
  audio += sample;
});

fs.writeFile("path/to/file.wav or .mp3", audio, (err) => {
  if (err) return console.error(err);

  console.log("File successfully saved!");
});

如果我正确理解您的问题,那么这应该有效。