我正在努力解决一个看似简单的概念。
我有一个 Node 服务器,它可以正确接收 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);
}
关于javascript - 在 NODE.js(服务器端)中将 BLOB 文件(音乐文件)转换为 .WAV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952214/