複数ファイルの追加から個別保存まで
このツールは,音声ファイルを複数追加し,WAVまたはWebMのどちらかへ順番に変換するためのものです.点線枠をクリックしてファイルを選ぶか,枠内へドラッグ&ドロップすると一覧へ追加されます.入力欄はaudio/*を受け付けますが,拡張子だけで変換可否を決めるのではなく,実際にブラウザが音声としてデコードできるかを後続処理で確認します.
追加後は,各ファイルを非同期で解析し,元のファイルサイズ,再生時間,デコード後のサンプルレート,チャンネル数を行ごとに表示します.1チャンネルはモノラル,2チャンネルはステレオ,3チャンネル以上は「6ch」のように数値で示します.解析中は変換対象にならず,デコードが終わると待機状態へ戻ります.破損ファイルや未対応形式はエラー表示となり,別形式の入力を試す判断材料になります.
出力形式は「WAV (PCM 16-bit)」と「WebM (Compressed)」の二択です.各行の変換ボタンは一件だけを処理し,「選択したファイルを一括変換」は待機中,エラー,または現在選択した形式とは異なる形式で変換済みの行を対象にします.一括処理という名称でも同時並列ではなく,先頭から一件ずつawaitする直列処理です.
特にWebMは再生時間に近い待ち時間が必要なため,長いファイルを複数追加すると合計時間も長くなります.
成功した行には,変換済み形式,生成サイズ,元サイズからの増減率,プレビュー,保存ボタンが表示されます.保存は各行で個別に行い,複数結果をZIPへまとめる機能はありません.出力名は入力名から最後の拡張子を除き,実際に生成した形式の .wav または .webm を付けます.形式選択を後から切り替えても,古いBlobを新しい拡張子で保存せず,選択中形式へ再変換できます.
入力対応はブラウザのデコード能力で決まる
読み込みにはWeb Audio APIのAudioContext.decodeAudioData()を使います.ファイル全体をArrayBufferとして読み,ブラウザが対応する音声形式であれば線形PCMのAudioBufferへ復号します.画面に例示するMP3,WAV,M4A,OGG,FLACは入力候補であり,すべてのブラウザ・OSで同じように読めることを保証する一覧ではありません.
同じ拡張子でも内部コーデック,破損状態,ブラウザの実装によって結果が変わります.
解析欄に出るサンプルレートは,ファイルヘッダーに記録された元の値を直接抜き出したものではなく,decodeAudioData()後のAudioBuffer.sampleRateです.Web Audio APIでは,入力とAudioContextのサンプルレートが異なる場合に復号結果がリサンプリングされるため,表示値やWAV出力の値が入力ファイル本来のサンプルレートと一致しない可能性があります.
このページには,44.1kHz,48kHz,96kHzなど任意の値を選ぶ設定はありません.
チャンネル数もAudioBuffer.numberOfChannelsから取得します.モノラルからステレオへの変換,ステレオからモノラルへのダウンミックス,左右チャンネルの交換は行いません.入力の復号結果が持つチャンネルをそのまま後段へ渡します.また,ファイル数・容量・再生時間の上限をコードで固定していない一方,ファイル全体と復号後PCMを端末側で扱うため,長時間音声や多数の大容量ファイルではメモリ不足や処理失敗が起こり得ます.
デコードに失敗すると「音声のデコードに失敗しました.」と表示し,利用したAudioContextを閉じます.拡張子を書き換えるだけでは内部形式は変わらないため,失敗時は対応するブラウザを試すか,別の変換手段で一般的な入力形式へ変えてください.処理方式の根拠はW3C Web Audio APIで確認できます.
16-bit PCM WAVを組み立てる処理
WAVを選ぶと,デコード済みAudioBufferからJavaScriptでRIFF/WAVEファイルを構築します.出力は非圧縮の16-bit signed PCMに固定され,ビット深度,圧縮方式,品質を選ぶ欄はありません.必要な総バイト数は「44バイトのヘッダー+サンプルフレーム数×チャンネル数×2バイト」で求めます.
そのため,再生時間,サンプルレート,チャンネル数が増えるほど出力も大きくなります.
先頭44バイトにはRIFF,WAVE,fmt,dataの各識別子,PCMを示す形式番号1,チャンネル数,AudioBufferのサンプルレート,バイトレート,ブロック境界,16ビットという値を書き込みます.音声本体は,各チャンネルのFloat32サンプルをフレームごとに交互配置します.
値を-1から1へ収め,負値は32768,非負値は32767を基準に16ビット整数へ量子化し,リトルエンディアンで保存します.
この処理は音声を最初から最後まで実時間再生して録音する方式ではないため,WebMのように再生時間そのものを待つ必要はありません.ただし,「瞬時」を保証するものではなく,ファイルの長さ,チャンネル数,端末のCPUとメモリによって所要時間は変わります.圧縮されたMP3やM4Aを入力した場合,非圧縮PCMのWAVは元ファイルより大きくなることが一般的です.
入力がすでにWAVの場合も,ビット深度や復号後のサンプルレートが異なれば同じ容量にはなりません.
AudioBufferには楽曲名,アーティスト名,アルバム名,歌詞,カバー画像などを移植する情報経路がなく,WAV生成処理もこれらのタグを書き込みません.このため,変換結果は音声サンプルと基本的なWAVヘッダーを持つファイルであり,入力のメタデータを保持したライブラリ移行用途には向きません.
MediaRecorderでWebMを実時間生成する仕組み
WebMは,デコード済みAudioBufferをAudioBufferSourceNodeで再生し,MediaStreamAudioDestinationNodeへ接続したストリームをMediaRecorderで録音して作ります.処理前にMediaRecorderの存在とaudio/webmへの対応を確認し,非対応なら別形式へ自動的に偽装せず,「WAVを選択してください」とエラーを表示します.
録音開始後,dataavailableイベントで得たBlobの断片を配列へ蓄えます.音源ノードの再生終了を検知すると録音を停止し,断片を一つのBlobへまとめます.この構造上,処理時間はおおむね音声の再生時間と同程度です.タブのバックグラウンド制御,省電力設定,端末負荷,ブラウザの録音実装によっては処理へ影響が出る可能性があるため,長い音声では画面を開いた状態で完了を確認してください.
コードで指定するのはaudio/webmというコンテナだけで,Opusなど特定のコーデック名,固定・可変ビットレート,毎秒のビット数は指定していません.実際のコーデックと帯域配分はブラウザが選びます.isTypeSupported()がtrueでも,利用可能な資源などによって録音が失敗する可能性は残ります.
この挙動はW3C MediaStream Recordingの範囲に従います.
WebMは圧縮出力ですが,入力もすでに高効率に圧縮されている場合や,ブラウザが選んだ条件によっては,元ファイルより小さくなるとは限りません.WAVと同じく入力タグを引き継がず,サンプルレートやチャンネル構成を利用者が指定する機能もありません.
プレビュー,サイズ差,形式の切り替え
再生ボタンは,未変換なら入力ファイル,変換成功後なら現在保持している変換結果をプレビューします.再生のたびに対象Blobから一時URLを作り,停止,曲末,別ファイルの再生,行の削除,全消去,または再変換の開始時にURLへの参照を破棄します.一度入力音声を再生してから変換した場合も,変換後のボタンは新しい出力を参照します.
変換後サイズの横に出る百分率は,「(変換後サイズ−元サイズ)÷元サイズ×100」です.プラスなら容量増加,マイナスなら減少を示します.これは音質の点数や圧縮率の保証ではありません.たとえば短いMP3をWAVへ変換して増加量を確認し,次にWebMへ切り替えて同じ音声を再変換すると,非圧縮とブラウザ選択の圧縮出力を比較できます.結果の大小は実ファイルで確認してください.
一度WAVへ変換した後にWebMを選ぶと,一括変換ボタンと行の「WEBMへ変換」が再び有効になります.再変換開始時には古い変換Blobとサイズ表示を外し,新しい結果に置き換えます.保存拡張子は画面上の現在の選択ではなく,その行で実際に成功したconvertedFormatから決めるため,形式切り替えだけで中身と拡張子が食い違うことを防ぎます.
ファイルの保持範囲と非対応機能
この変換コンポーネントは,選択したFile,デコード結果,生成Blob,表示状態をページ表示中のReact状態や参照として扱います.音声ファイルを変換サーバーへアップロードするリクエストは実装しておらず,保存時はObject URLからブラウザのダウンロードを開始します.
「すべてクリア」や行削除では画面側の参照を外し,ページ再読み込みでも一覧は初期状態へ戻りますが,実際にメモリが回収される時点はブラウザの管理に依存します.
この説明は音声変換コンポーネントの処理範囲に限られます.ページにはアクセス解析や広告など別目的の通信があり,ブラウザ拡張機能や端末環境まで含めて「外部通信が一切ない」「漏えいしない」と保証するものではありません.機密性の高い素材では,共有端末を避け,保存先やブラウザ環境も含めて利用者自身で管理してください.
非対応なのは,MP3・M4A・OGG・FLACへの出力,任意サンプルレート・ビットレート・ビット深度の設定,音量正規化,タグ移植,ノイズ除去,トリミング,ピッチ・速度変更,チャンネル編集,並列変換,進捗率,ZIP一括保存です.区間を切り出すなら音声カッター,テンポや音程を変えるなら音声ピッチ・速度編集,左右やモノラルを調整するならステレオ・モノラル編集を使い分けてください.
このページは,ブラウザが復号できる複数音声を16-bit PCM WAVまたはブラウザ対応の音声WebMへ変える範囲に特化しています.