3

wav 文字列を html5 blob に変換することは可能ですか?

(クロスブラウザ互換のソリューションを探しているわけではありません。Chromeで動作する必要があるだけです)。

wavString = "RIFF  WAVEfmt D¬Xdata ¦®µ¼ÃÊÐÖÜáæêïòõøúüýþþþþüûøöóïëçâÜ×ÑËĽ¶¯§ xph`YQJC<5/~)~#~~~~~~  ~~~~~~~~~~~~~~~~~~!~'~,~3~9~@~GNV^emu}¥¬´»ÂÈÏÕÛàåéîñõøúüýþþþþýûùöóðìèãÞØÒÌÅ¿¸°©¡zrjb~Z~S~K~D~=~6~0~*~$}}}}}
}.....a lot of ugly chars.....";

wavString を html5 オーディオ オブジェクトに変換でき、サウンドを再生すると wav サウンドを聞くことができます。

var wave = new Audio('data:audio/wav;base64,' + btoa(wavString));
wave.controls = true;
document.body.appendChild(wave);

しかし、私はそれから wav blob を作成することはできません。ここに私が試したものがあります: (私はタイプと blob 変数のすべての組み合わせを試しました):

var type = "audio/x-wav";
var type = "application/octet-stream";


var blob = new Blob([btoa(wavString)], {type: type});
var blob = new Blob(['data:audio/wav;base64,' + btoa(wavString)], {type: type});
var blob = new Blob([wavString], {type: type});

それらはどれも機能しません。ブロブを作成しますが、それらをサーバーに保存してwavファイルとして聞くことはできません。私がやりたいことは、wav ファイルとしてサーバーにエクスポートできる BLOB を作成することです。実際には、有効なwav blobをサーバーにエクスポートできますが、問題は実際にこのwavStringを有効なwav blobに変換することです。

4

1 に答える 1

9

ArrayBuffer を作成するとうまくいく場合があります。

var wavString = "RIFF  WAVEfmt.....a lot of ugly chars.....";
var len = wavString.length;
var buf = new ArrayBuffer(len);
var view = new Uint8Array(buf);
for (var i = 0; i < len; i++) {
  view[i] = wavString.charCodeAt(i) & 0xff;
}
var blob = new Blob([view], {type: "audio/x-wav"});
于 2012-11-08T09:00:45.583 に答える