【问题标题】:Save base64 audio file to folder in nodejs将base64音频文件保存到nodejs中的文件夹
【发布时间】:2021-12-28 13:34:26
【问题描述】:

我有一个 base64 字符串的音频文件。我想用 nodejs 将它保存为本地文件夹中的文件。我已经与 fs 库集成并完成了此操作,并在本地文件夹中获取了 mp3 文件,但无法播放。你能支持我解决这个问题吗?这是我在 nodejs 中的代码。

let base64File = 'data:audio/mp3;base64,UklGRiRAHwBXQVZFZm10IBAAAAABAAIAgLsAAAD...........';
const DIR = BASE_PATH + 'src/storage/voice/';
const filename = 'sample.mp3';
const fileurl = DIR + filetname;
const fileContents = Buffer.from(base64File, 'base64');
fs.writeFile(fileurl, fileContents, (err) => {
   if (err) return console.error(err);
   console.log('file saved to ', filetname);
});

【问题讨论】:

  • 您必须切断字符串的data:audio/mp3;base64, 部分。整个字符串不是base64字符串而是data uri,包含一个base64字符串。
  • 我也试过这个..但无法播放下载的文件
  • 也不是mp3而是wav文件,从解码后的header来看:RIFF$@�WAVEfmt ��

标签: node.js angular base64 mp3 fs


【解决方案1】:

如前所述,您的 Base64 音频是原始 RIFF/WAV 文件,可以直接写为 .wav 文件

const fs = require('fs')

const wavUrl = 'data:audio/wav;base64,UklGRryMMgBXQVZFZm10IBAAAAABAAIARKwAABCxAgAEA...'
const buffer = Buffer.from(
  wavUrl.split('base64,')[1],  // only use encoded data after "base64,"
  'base64'
)
fs.writeFileSync('./audio.wav', buffer)
console.log(`wrote ${buffer.byteLength.toLocaleString()} bytes to file.`)

如果您确实有 Opus 或 MP3 文件,则必须先将其解码为原始 PCM 音频,然后在写入 .wav 文件之前创建一个包含 WAV 标头和 PCM 数据的缓冲区。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多