繁体   English   中英

在NODE.js(服务器端)中将BLOB文件(音乐文件)转换为.WAV

[英]Convert a BLOB file (a music file) to .WAV in NODE.js (server-side)

我正在努力解决一个看似简单的概念。

我有一个节点服务器,它可以正确接收POST请求。 我正在向其发布Blob(将Blob转换为.wav文件)。

我需要怎么做才能将该Blob作为.wav文件保存到磁盘? 我正在使用音乐播放器播放用户上传的音乐文件,然后播放该歌曲。

您没有提供太多信息,但是您正在使用Express吗? 以及您要存储在哪个数据库上。

您可能要

    var express = require('express');
    var bodyParser = require('body-parser');
    var sqlite3 = require("sqlite3").verbose();
    var cors = require('cors');

    var db = new sqlite3.Database("db/database.db");
    var app = express();

    app.use(cors());
    app.use(bodyParser.json({ extended: false }));

    app.use(express.static('public'));
function toArrayBuffer(buffer) {
    var ab = new ArrayBuffer(buffer.length);
    var view = new Uint8Array(ab);
    for (var i = 0; i < buffer.length; ++i) {
        view[i] = buffer[i];
    }
    return ab;
}


  app.post("/blobs" function(req, res){
    console.log(req.body);
//You should hopefully have your blob show up...
    toArray(blob);
    db.run("INSERT INTO pics (name, blob) VALUES (?, ?)",___nameOfBlob(hopefully from req.body as well if you have a form___, __bufferBase64__, function(err){
    if(err) console.log(err);
    });
});

如果仍然无法正常工作,请给我们提供更多详细信息...如果您想转换为.wav,请查看以下内容:

function encodeWAV(samples) {
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);

writeString(view, 0, 'RIFF');
view.setUint32(4, 32 + samples.length * 2, true);
writeString(view, 8, 'WAVE');
writeString(view, 12, 'fmt ');
view.setUint32(16, 16, true);
view.setUint16(20, 1, true);
view.setUint16(22, 2, true);
view.setUint32(24, sampleRate, true);
view.setUint32(28, sampleRate * 4, true);
view.setUint16(32, 4, true);
view.setUint16(34, 16, true);
writeString(view, 36, 'data');
view.setUint32(40, samples.length * 2, true);

floatTo16BitPCM(view, 44, samples);

return view;
}
function exportWAV(type) {
var bufferL = mergeBuffers(recBuffersL, recLength);
var bufferR = mergeBuffers(recBuffersR, recLength);
var interleaved = interleave(bufferL, bufferR);
var dataview = encodeWAV(interleaved);
var audioBlob = new Blob([dataview], {
    type: type
});

this.postMessage(audioBlob);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM