音声トリマー

ブラウザ内で音声ファイルから一部を切り出します — 波形上で開始・終了範囲をドラッグし、選択部分をプレビューしてWAVとしてダウンロード。アップロードは一切行われません。

211回閲覧

ブラウザ内での音声トリミングの仕組み

このツールはファイルをどこにも送信しません — Web Audio APIdecodeAudioData()を使用して、圧縮された音声(MP3、AAC、OGGなど、ブラウザのコーデックがサポートする形式)を生のAudioBuffer(チャンネルごとに-1から1までの浮動小数点サンプル値の配列)に展開します。このデコード処理は、メディアプレーヤーが実際に音を再生する前に内部で行っているものと同じです — ここでの違いは、デコードされたサンプルがスピーカーに直接送られるのではなく、JavaScriptからアクセス可能な状態のまま保持されることであり、これが編集を可能にしています。知っておくべき点として、decodeAudioData()は元ファイルのサンプルレートではなく、お使いの端末のオーディオハードウェアに応じて通常44.1kHzまたは48kHzであるAudioContext自体のサンプルレートにデコードします。両者が異なる場合は自動的にリサンプリングされます。これはこのツール特有の動作ではなく、すべてのブラウザのオーディオパイプラインに組み込まれた標準的で透過的な挙動であり、ファイルが8kHzの音声であっても96kHzのスタジオ音源であっても同様に適用されます。

音声がデコードされた後のトリミングは、配列のスライス以外の何物でもありません。選択した開始・終了時刻(秒)にサンプルレートを掛けてサンプルインデックスを求め、その2つのインデックスの間にあるサンプルだけを新しい短いバッファにコピーします。音声内容の再エンコードや品質劣化、再圧縮によるアーティファクトは一切発生しません — 選択範囲内の波形は、デコードされた形式のままバイト単位でコピーされます。

波形プレビューは、デコードされたサンプル配列を一度走査し、水平方向のピクセル数と同じ数のバケットに分割して、各バケット内で見つかった最小・最大のサンプル値を縦棒として描画することで作成されます — これはあらゆる音声編集ソフトが使用しているのと同じピークエンベロープ手法です。個々のサンプル(多くの場合1秒あたり44,100個)をすべて描画することは無駄が多く、通常の画面解像度では最小・最大のエンベロープと視覚的に区別がつかないためです。

出力がMP3ではなくWAVである理由

トリミングされた結果はWAVとして書き出されます — サンプルレート、ビット深度、チャンネル数を記述する標準的な44バイトのRIFFヘッダーを付けて、生のサンプルデータをそのまま書き戻すだけの、非圧縮のPCMコンテナです。これは意図的で正直なトレードオフです。MP3のような圧縮形式にエンコードするには完全な心理音響エンコーダー(そもそもファイルを作成するために使われたのと同種の複雑なアルゴリズム)が必要であり、ブラウザはこれをネイティブには公開しておらず、大きな追加ライブラリを読み込む必要が生じます。その代わりにWAVは世代劣化ゼロを保証します — 10回連続でトリミングしても、劣化するロッシーMP3の再保存とは異なり、音声は決して劣化しません。後でより小さいファイルが必要になった場合は、得られたWAVを標準的な音声ツールで再圧縮できます。

  • 書き出されるWAVは、元ファイルのサンプルレートやビット深度に関係なく、AudioContextのサンプルレート(通常44.1kHzまたは48kHz)と16ビット深度を使用します — これはトリミング自体の制限ではなく、decodeAudioData()の動作方法に由来します。
  • 非常に長いファイル(おおよそ30〜60分を超えるもの)は、デコードされたバッファ全体がトリミング前に浮動小数点サンプルとしてRAMに保持されるため、ブラウザのメモリを大きく消費する可能性があります。
  • 波形は最初の音声チャンネルからのみ描画されます。ステレオコンテンツはすべてのチャンネルで均等にトリミングされますが、プレビューのみが1本の線に簡略化されます。

よくある質問

トリミングしたファイルがMP3ではなくWAVでダウンロードされるのはなぜですか?

MP3のエンコードには、ブラウザがネイティブには公開していない完全な心理音響圧縮アルゴリズムが必要です。WAVはすでにデコードされたサンプルを可逆的にそのまま書き戻すだけなので、品質劣化がゼロで、追加のライブラリも不要です — 後でより小さいファイルが必要な場合は、WAVを別途圧縮してください。

トリミングによって音質が劣化することはありますか?

カット自体は劣化しません — デコードされたサンプルの連続した範囲を新しいバッファにコピーするだけで、再エンコードや圧縮は行われません。唯一の注意点は、decodeAudioData()がブラウザのオーディオハードウェアのサンプルレート(通常44.1kHzまたは48kHz)にデコードすることです。元ファイルが異なるレートを使用していた場合は自動的にリサンプリングされますが、これはトリミング特有ではない標準的なブラウザの挙動であり、通常の再生では実質的に感知できません。

音声ファイルはサーバーにアップロードされますか?

いいえ。デコード、波形描画、再生プレビュー、最終的なトリミングはすべてWeb Audio APIを介してブラウザ内でローカルに行われます — ファイルがお使いの端末から出ることはありません。

どのような音声形式をアップロードできますか?

お使いのブラウザの内蔵デコーダーがサポートする形式であれば何でも使用できます — MP3、WAV、OGG、AAC/M4Aは、ほぼすべての最新ブラウザで動作します。これは、ブラウザが音声を再生するために使うのと同じdecodeAudioData()関数がこのツールを動かしているためです。

ダウンロード前に選択範囲をプレビューできますか?

はい — 「選択範囲を再生」ボタンは、開始マーカーと終了マーカーの間の範囲を、最終的なトリミングが使用するのと同じバッファオフセットで再生します。そのため、聞こえる内容はダウンロードされるファイルと正確に一致します。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール