一つの音声ファイルから必要な区間を保存する
音声ファイルトリミングツールは,手元の音声ファイルから必要な一つの区間を指定し,別のWAVファイルとして保存するためのページです.一度に扱うファイルは一つです.点線枠をクリックして選択するか,音声ファイルを枠内へドラッグアンドドロップして読み込みます.読み込み後に波形とファイル情報が表示されたら,開始位置と終了位置の二本のスライダーで範囲を決め,「範囲内を再生」で内容を確かめます.
続いて「トリミングしてエクスポート」を押し,処理後に表示される保存ボタンからWAVをダウンロードしてください.出力名は元ファイル名の拡張子を除き,「_trimmed.wav」を付けたものです.
プレビューは選択中の区間だけを再生し,繰り返し再生はしません.波形の形だけでは発話や曲の内容までは分からないため,実際に聞いて境界を調整してください.書き出し後にいずれかのスライダーを動かすと,前の範囲で作った保存用データと成功表示は取り消されます.新しい範囲を保存するには再びエクスポートが必要です.
異なる区間を複数保存したいときも,一つずつ範囲を選び直して書き出します.複数区間を一度に別々のファイルへ分割する機能ではありません.
読み込み形式とブラウザのデコード
選んだファイルはAudioContext.decodeAudioData()でデコードされ,AudioBufferとして扱われます.画面にはWAV,MP3,M4A,OGG,FLACなどの入力例を示していますが,これらがすべての環境で必ず読み込めるという意味ではありません.
対応形式やコーデックはブラウザやOSによって異なり,同じ拡張子でも内部の符号化方式によって結果が変わります.非対応または壊れたファイルは読み込み時にエラーになります.このページにはマイク録音機能はありません.
ステータス欄の「元サイズ」は選択したファイルの大きさですが,サンプリングレートとチャンネル数はデコード後のAudioBufferの情報です.decodeAudioData()でAudioContextのサンプリングレートへ変換される場合があるため,表示値や出力WAVの値が入力ファイルのヘッダーに書かれた値と一致するとは限りません.
圧縮音声でも編集のためにPCMサンプルをメモリへ展開します.この実装に「最大30MB」のような固定のファイルサイズ検査はありませんが,容量無制限という意味ではありません.長い録音やチャンネルの多い音声ではメモリ使用量が増え,端末・ブラウザによって読み込みや切り出しが重くなったり失敗したりします.
圧縮された元ファイルのサイズだけで必要なメモリ量は判断できません.
波形の見方と二本のスライダー
Canvasの波形は,デコードした音声の先頭チャンネルの振幅を要約した表示です.ステレオの左右を合成していません.横幅およそ1ピクセルに対応するサンプル群ごとに最小値と最大値を求め,両端を結ぶ縦線として描きます.したがって細かな波形変化や二番目以降のチャンネルでだけ鳴っている音を正確に読み取るための図ではありません.
選択範囲の外側を暗くし,開始・終了の境界線と再生中の位置を重ねて表示します.音のある場所や無音に近い箇所を探す目安として使い,内容はプレビューで確認してください.
波形をクリックまたはドラッグして範囲を選ぶことはできず,ズーム機能もありません.範囲指定は波形の下にある開始位置と終了位置の二本のスライダーだけで行います.入力の刻みは0.01秒で,開始を終了より前,終了を開始より後に設定します.表示時刻は分・秒と小数点以下二桁です.
これは操作の刻みであり,保存される音声の境界が表示時刻と完全に一致する保証ではありません.波形の縦線幅もサンプル単位の精密な表示ではありません.短い語頭や音の立ち上がりを残したい場合は,選択範囲を再生して聞き取り,必要に応じてスライダーを動かしてください.
時刻からサンプル境界への変換
プレビューはデコード済みの元のAudioBufferを使い,指定した開始時刻から開始・終了の差に相当する長さだけAudioBufferSourceNodeで再生します.書き出し時は時刻をそのまま保存するのではなく,デコード後のサンプル配列から新しいバッファを作ります.
開始時刻と終了時刻の秒数にAudioBufferのsampleRateを掛け,Math.floor()で小数部分を切り下げてサンプル番号にします.終了番号はバッファ長を超えないようにし,開始番号以上・終了番号未満をコピーします.計算後の区間長がゼロ以下ならエラーです.
波形表示には先頭チャンネルだけを使いますが,切り出し時はすべてのチャンネルを対象にします.ステレオなら左右の同じサンプル範囲をそれぞれ新しいバッファへコピーします.三チャンネル以上の入力でもチャンネル数を引き継ぎます.境界はデコード後のサンプリングレートに基づくサンプル位置になり,0.01秒刻みのスライダーをミリ秒単位の自由な数値入力と混同しないでください.
この処理では開始・終了の音量を滑らかにつなぎません.振幅がある位置で切ると,保存後に「プツッ」という音が聞こえる場合があります.
16-bit PCM WAVの仕様と制限
出力形式は16-bit符号付きPCMのWAVだけです.切り出したAudioBufferの浮動小数点サンプルを16-bit整数へ変換します.生成データはRIFF/WAVE形式の44バイトのヘッダーと,チャンネルごとのサンプルを交互に並べたPCM部分から成ります.
音声の長さやチャンネル数が増えるほど出力サイズも増えます.MP3などの圧縮音声を入力しても保存結果はMP3ではなくWAVで,元ファイルより大きくなる場合があります.デコード時の再サンプリングや出力時の16-bit整数化があり得るため,元ファイルのバイト列を無劣化でコピーする処理でもありません.
MP3,AAC,M4A,OGG,FLAC,WebMへの書き出しはできません.入力に含まれる曲名,アーティスト名,カバー画像などのタグを移す処理もありません.音量調整,正規化,ノイズ除去,フェードイン・フェードアウト,複数ファイルの結合,複数区間の一括分割には対応していません.
別形式が必要な場合は,このページで保存したWAVを,必要な出力形式を持つ変換ツールで改めて処理してください.非常に長い音声では端末メモリの制約に加え,この実装のRIFFサイズ欄が32-bit整数である点にも注意が必要です.
用途とデータの扱い
会議録音から一つの議題を抜き出す,講義の一部分を聞き返しやすい長さにする,冒頭と末尾の不要な区間を省くといった用途に向いています.音声を再生して範囲を確かめてから保存するのが確実です.切り出し境界にフェードを付けたい場合や,残した範囲の雑音そのものを減らしたい場合は,このツールだけでは実現できません.
ピッチ・速度の変更,ステレオとモノラルの編集も別の機能です.「一つのファイルから一つの区間をWAVにする」という目的に合うか,保存形式や追加加工の有無で判断してください.
音声の読み込み,波形描画,プレビュー,切り出し,WAV生成はブラウザ内で行われます.ただし,これはウェブサイト全体がオフラインで動く,通信を一切しない,機密性を保証するという意味ではありません.ページの読み込みやアクセス解析・広告など,音声処理とは別の通信が行われる可能性があります.
利用する端末やブラウザ拡張機能,ネットワーク環境も確認してください.処理中のAudioBufferや生成されたWAVデータはブラウザのメモリを使います.ファイルをクリアしたりページを離れたりしても,端末にある元ファイルや既に保存したWAVまで自動で消すものではありません.