音声を切り出す

手箱オーディオについて

音声の切り出しを、ブラウザの中だけで行う道具です。ファイルはサーバへ送信されません。 このページでは、その仕組みと、それをご自分で確かめる方法を説明します。

仕組み

音声の読み込み・波形の表示・切り出し・書き出しは、すべてお使いのブラウザの中で行われます。 サーバがしているのは、この画面を作るためのファイル(HTML・JavaScript・CSS)を配ることだけです。

お使いの端末(ブラウザの中)
  1. ファイルを選ぶ
  2. 音を読み解くWeb Audio API
  3. 波形を描く・区間を選ぶ
  4. 切り出す・削除する・音量を変える
  5. ファイルの形に組み直すWAV / MP3
  6. 保存する

音声データがこの枠から出ることはありません。

画面を作るファイルだけ
(一度きり)
サーバ

HTML・JavaScript・CSS を配るだけ。
ファイルを受け取る窓口がありません。

音声を受け取る仕組みを「作らない」ようにしているのではなく、そもそも存在しません。 無いものは動きません。これが、この道具のいちばん大事なところです。

ご自分で確かめる方法

「送っていません」という文章を信じていただく必要はありません。 ブラウザに付いている開発者ツールで、通信をそのまま見ることができます。

手順

  1. 開発者ツールを開く Windows / Linux は F12Ctrl+Shift+I、 Mac は +Option+I
  2. 「ネットワーク」タブを選ぶ Network と書かれている場合もあります。
  3. 記録を消す 丸に斜線のボタン(Clear)を押して、一覧を空にします。
  4. その画面を見たまま、音声ファイルを読み込む 切り出して保存するところまで、ふだんどおりに操作してください。

見えるはずのもの

  • この画面自身のファイル
    HTML・JavaScript・CSS。最初の一度だけです
  • blob: で始まる行
    お使いの端末の中だけのもので、通信ではありません
  • 初めて書き出すときに増える 1 個
    書き出しを行う部品(wav.worker
  • MP3 を選んだときに増えるもう 1 個
    MP3 を作る部品(lamejs)。WAV だけなら読み込まれません

見えないはずのもの

  • 音声ファイルの送信(POST)
  • ファイル名やファイルの大きさを送る通信
  • 読み込みや書き出しのたびに増える通信

もうひとつの確かめ方

サーバ側にファイルを受け取る窓口が無いことも、外から確かめられます。 実際に何かを送りつけてみると、受け取りを拒まれます。

curl -i -X POST --data-binary @音声.wav https://tebako.ncgv.jp/audio/

405 Method Not Allowed が返ります。読み取り(GET)以外は受け付けません。 本文の大きさも 1 キロバイトまでに制限してあり、音声が入る余地がありません。

ブラウザにも禁じさせています

この画面は Content-Security-Policy という決まりをブラウザに渡しています。 フォームでの送信は禁止、外部の JavaScript の読み込みも禁止です。 仮にこちらの作りに間違いがあっても、ブラウザの側で止まります。

対応形式

読み込めるもの

読み込みはブラウザの機能をそのまま使っています。 そのため、対応はお使いのブラウザによって変わります。 読み込めない場合でも、ファイルが壊れているわけではありません。

形式対応
WAV
MP3
M4A / AAC多くの環境で読めます
OGG / Opusブラウザによります
FLACブラウザによります
WMA×対応していません

書き出せるもの

形式選べるもの音質
WAV16 bit / 24 bit / 32 bit float 読み込んだ音をそのまま残せます(32 bit float が無劣化)
MP3128 / 192 / 256 / 320 kbps 作り直すため、少し落ちます

元が MP3 のファイルを MP3 で書き出すと、音質はさらに落ちます。 そのままの音を残したい場合は WAV を選んでください。

使い方

区間の選び方

3通りあります。区間はいくつでも置けます。

クリック1回目で開始、2回目で終了が決まります。すでに区間があるときは、いちばん近い端がクリックした位置へ動きます。
ドラッグ波形の上をなぞると、区間が1つ増えます。端をつまんで調整できます。
数値で入力「1:23.500」でも「83.5」でも入力できます。色の濃い区間にかかります。

区間を2つ以上置くと、書き出しは個別のファイルになります。

できること

切り出し選んだ区間を書き出します。区間を選ばなければ全体が対象です。
削除選んだ区間を取り除き、前後をつなぎます。「元に戻す」で戻せます。
無音カット静かな部分を探して、まとめて取り除きます。先に「何か所・何秒消すか」を表示します。いきなり消したりはしません。
フェード始まりと終わりを、指定した秒数でなめらかに出し入れします。
音量・正規化全体の音量を変えるか、いちばん大きい音を目標の高さに揃えます。
元に戻す削除と無音カットを取り消せます。何度でも戻せます。

箱が閉じるということ

書き出しが終わると、画面右上の玉手箱の蓋が閉じます。 ここで作業が完結したという合図です。中身は外へ出ていません。

ふだん・書き出したあと
ファイルを持ってきたとき
編集しているあいだ

できないこと・気をつけていただきたいこと

不便な点も先にお伝えします。

長いファイルは重くなります
読み込んだ音は、そのままの大きさでブラウザのメモリに載ります。 目安は 60分程度まで(スマートフォンでは20分程度)。 これを超えると画面に注意書きが出ます。動作が重くなったり、途中で止まることがあります。
MP3 は少しだけ長くなります
MP3 という形式の作りのため、書き出したファイルは指定より数十ミリ秒長くなります。 長さをぴったり合わせたい場合は WAV を選んでください。
形式によっては、音の細かさが変わることがあります
WAV と MP3 は元の標本化周波数(44.1 kHz など)のまま扱います。 それ以外の形式では、ブラウザの都合で別の値に変換されることがあります。 その場合は画面に注意書きを出します。
フェードと音量は、試聴には反映されません
書き出したファイルにはかかりますが、画面での再生では確認できません。 いまは書き出してからお聴きください。
試聴の速さは、書き出すファイルには反映されません
聴きながら確認するためのものです。保存されるファイルは元の速さのままです。
複数のファイルを保存するとき、ブラウザが確認を求めます
「複数のファイルのダウンロードを許可しますか」と尋ねられたら、許可してください。
作業内容は保存されません
何も預からない代わりに、画面を閉じると編集内容は消えます。 保存が必要なものは、その都度書き出してください。

使っているソフトウェア

波形の表示に wavesurfer.js(BSD-3-Clause)、画面の組み立てに Preact(MIT)、 MP3 の書き出しに lamejs(LGPL-3.0)を、いずれも改変せずに使っています。 音の読み解きと再生は、ブラウザに備わっている Web Audio API です。

ライセンス表示を見る