MP3 を Base64 に変換する方法
.mp3ファイルを枠にドロップするか、ファイル選択で選びます。- プレビューで再生して、クリップを確認します。
- HTML や JavaScript なら 出力形式 を Data URI のままに、API なら プレーン Base64 か JSON に切り替えます。
- 出力をコピー を押すか、長いファイルなら .txt で保存 を使います。
ビットレートごとの長さ
MP3 のサイズはビットレート × 再生時間で、Base64 にすると 3 分の 1 長くなります。以下はタグを除いた音声データだけの数値です。
| ビットレート | 1 秒 | 10 秒 | 1 分 |
|---|---|---|---|
| 64 kbps | 10,668 文字 | 106,668 文字 | 640,000 文字 |
| 128 kbps | 21,336 文字 | 213,336 文字 | 1,280,000 文字 |
| 192 kbps | 32,000 文字 | 320,000 文字 | 1,920,000 文字 |
| 320 kbps | 53,336 文字 | 533,336 文字 | 3,200,000 文字 |
通知音や音声ガイダンスなら、通常は 64 kbps のモノラルで十分で、文字列も短く済みます。必要以上に長いなら、エンコードする前にオーディオエディターで低いビットレートで書き出し直してください。
ID3 タグがファイルの大半を占めることも
音楽ライブラリの MP3 ファイルには先頭に ID3v2 タグがあり、そこにカバーアートが埋め込まれていることがよくあります。2 秒の効果音に、音声そのものより大きなカバー画像が付いていることもあり、そのすべてが Base64 に入ります。
タグ付きのファイルは、出力が SUQz で始まります。SUQzBA は ID3 バージョン 2.4、SUQzAw はバージョン 2.3 を表します。UI のサウンドや API 用のファイルなら、オーディオエディターやタグエディターでタグを削除してから、きれいなファイルをエンコードしてください。違いは出力の下のメーターでわかります。
Base64 の MP3 を使う
HTML では:
<audio controls src="data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2..."></audio>
JavaScript では、Data URI は URL を使える場所ならどこでも使えます。
const ping = new Audio("data:audio/mpeg;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2...");
document.querySelector("#send").addEventListener("click", () => ping.play());
play() はクリックなどのユーザー操作の後に実行する必要があり、そうでないとブラウザがブロックします。
JSON API には、API のドキュメントに Data URI と書かれていない限り プレーン Base64 を使ってください。特に音声認識のサービスは、たいてい Base64 だけを受け取り、音声形式は別のフィールドで指定させます。
よくある問題
- プレーヤーから音が出ない。 Data URI が
data:audio/mpeg;base64,で始まっているか、URLセーフ(- _) と 76 文字で折り返し がオフになっているか確認してください。URLセーフの文字はdata:URL では無効で、改行は JavaScript の文字列リテラルを終わらせてしまいます。 - 再生時間がおかしい、またはシークで飛ぶ。 適切なヘッダーのない可変ビットレートの MP3 は、プレーヤーを混乱させることがあります。原因はファイル自体にあるので、オーディオエディターで書き出し直してください。
- ファイルに戻したい。 Base64 を MP3 に変換 で文字列をデコードし、再生やダウンロードができます。ほかの形式は 音声を Base64 に変換 をご覧ください。
よくある質問
Base64 の MP3 の正しい MIME タイプは何ですか?
audio/mpeg です。コードによっては audio/mp3 も見かけますが、登録されたタイプは audio/mpeg で、タイプを検証する API はこちらを想定しています。
MP3 の Base64 が SUQz で始まるのはなぜですか?
SUQz は ID3 で、タイトル、アーティスト、場合によってはカバーアートを含む ID3v2 タグの先頭です。タグのない MP3 ファイルはいきなり音声フレームで始まり、エンコードすると //uQ や //OQ のように // の後に英字が続きます。
1 分の MP3 は Base64 で何文字になりますか?
128 kbps なら 1 分の音声は 960,000 バイトで、エンコードすると 1,280,000 文字になります。64 kbps ならその半分です。タグやカバーアートはさらに加わります。