Node.jsはBlobを作成できませんか?


85

node.jsを使用していて、オーディオをnode.jsサーバーにストリーミングしました。オーディオブロブを構築する過程で、次のことに気づきました。

var audioBlob = new Blob([dataview], { type: 'audio/wav' });

新しいBlobでReferenceErrorが発生すること。Blobはサポートされていないようです。node.jsfsモジュールで保存したいblobを作成するにはどうすればよいですか。

みんなありがとう!


4
Blobとは何ですか?それはどこから来たのですか?
ピート

1
ええ、でもblobはネイティブのNode.jsタイプではありません。Number、String、Boolean、Object、Arrayなどです。NPM用のオブジェクトプロトタイプまたはモジュールを作成してみませんか?NPMで必要なものなどを確認しましたか?
sent1nel 2013

4
私には、反対票を投じた人々は、この質問に対する解決策が明らかにないことに気づかなかったようです。それが私が尋ねている理由です。
zer02 2013

1
@Jonathanこれを見ていきますが、MIMEタイプを定義することは可能ですか?
zer02 2013

1
@ zer02はい、いいえ。mimeプロパティはBufferまだ動的であるため、いつでもプロパティを追加できます。ただし、MIMEタイプはバイナリデータを通信するためのものです。ディスクに保存するのはそれほど多くありません。
Jonathan Lonowski 2013

回答:


33

この問題の解決策は、配列バッファーとノードバッファーの間で変換できる関数を作成することです。:)

バイナリNodeJSバッファーをJavaScriptArrayBufferに変換します

最近のノードバージョンでは、次のようになっています。

let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;

あなたはそれをうまく動かすことができましたか?音声をファイルに録音することはできますが、適切なタイミングで聞くことができません。
ガブリエル

手伝って頂けますか?要旨でこのようなことをしましたか?gist.github.com/anonymous/11302966
Gabriel

16
こんにちは、私はあなたと同じものが必要ですが、私はあなたの解決策を理解していません。私はこの変数を持っていますaudioBlob = new Blob([dataview]、{type: 'audio / mp3'}); ただし、例では「arrayBuffer」変数を使用しています
oihi08 2018

7
let arraybufferあなたの例ではnew Blob
mesqueeb

1
ArrayBufferLike以下から特定のプロパティが欠落しているようBlobです:ts Argument of type 'ArrayBufferLike' is not assignable to parameter of type 'File | Blob'. Type 'ArrayBuffer' is not assignable to type 'File | Blob'. Type 'ArrayBuffer' is missing the following properties from type 'Blob': size, type, arrayBuffer, stream, text
MatejaPetrovic20年

11

使用するだけcross-blobです:

const Blob = require("cross-blob");

new Blob([]);
//=> Blob {size: 0, type: ""}

// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;

0

考慮すべきもう1つの解決策は、Base64文字列を使用することです。してサーバーからクライアントにデータを転送することです。

ArrayBufferの形式でオーディオデータを受信するNode.jsプロジェクトに取り組んでおり、そのデータをブラウザーで送信して再生したいと考えています。私の苦労のほとんどは、ArrayBufferをクライアントに送信しようとしたり、ArrayBufferを変換してBufferを送信しようとしたりしたことによるものです。

私にとって簡単な解決策になったのは、

  1. サーバー上でArrayBufferをBase64でエンコードされた文字列に変換します
  2. サーバーからクライアントにBase64文字列を返す/送信する
  3. クライアント側でオーディオ要素/オブジェクトを作成し、サウンドを再生します

base64-arraybufferを使用しましたArrayBuffer> Base64で文字列変換を(ただし、パッケージなしでこれを行うには簡単である)を実行します。

ここからヒントを使用しましたからのして、クライアント側でオーディオ要素を作成しました。

*制限をテストする方法はあまり行っていないので、これが大きなオーディオファイルをどのように処理するかわかりません。


-2

提案として、これを読むことをお勧めします:http//howtonode.org/really-simple-file-uploads

私はあなたが何をしようとしているのかわからないと思います。ブロブ用のモジュールがない場合もありますが、ディスクに何かを書き込みたい場合は、fsモジュールがあります。このコードは直接機能しませんが、..

var fs = require('fs')
  , express = require('express')

app.post('/upload', function (req, res) {
  // asynch call to write file to disk
  fs.write("/tmp/file.mp3", req.params.body, function (err) {
    if (err) console.log(err)
  });
  res.end();
});

mp3または実際に何かを/ uploadに投稿するだけで、ディスクに書き込まれます。必要な検証を行うことができます。


こんにちは、GetUserMedia Audioのオーディオバッファをnode.jsサーバーにストリーミングし、配列をWAVにエンコードしたいと思います。
zer02 2013

私はrecorder.jsを使用しました。私もそれを拡張しました。問題は、クライアント側ではなくサーバー側でBlobを作成することです。オーディオをnode.jsに直接ストリーミングしていて、サーバー上にwav / mp3ファイルを作成したいので、node.js内にblobを作成する方法があるかどうかを知る必要があります。:-)
zer02 2013

ブロブの内容を取得してバッファーに入れ、バッファーを横切って撃つことができますか?ノードはバッファの処理方法を知っており、バイナリデータをバッファに入れることができます。
sent1nel 2013

オーディオが最初にクライアント側で録音され、node.jsで処理されて機能するときに、クライアント側のblobバイナリをnode.js(ストリーミング)に転送しました。今回は、node.jsにプロセス全体を制御させたいと思います。
zer02 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.