我正在用 JavaScript 编写一个振荡器,它在正弦波频率之间创建一个扫描(即啁啾)。为了测试,我想将样本(浮点数)写入 wav 文件。我将如何在 Node.js 中执行此操作?我已经看到了很多关于浏览器端的信息,但没有任何特定于 Node 或任何依赖于浏览器 API 的信息。
问问题
1361 次
2 回答
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");
});
考虑到您已经知道数据的应用,您知道所有“常量”参数(输出大小、比特率、要写入的实际数据、比特深度)。
于 2021-01-12T07:41:41.953 回答
-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!");
});
如果我正确理解您的问题,那么这应该有效。
于 2021-01-17T18:49:45.987 回答