壊れたボイスレコーダーの録音を修復する

Sony、Olympus、Zoom、Tascamのレコーダーがバッテリー切れになったり、保存の途中でカードを抜かれたりすると、残されたWAVやMP3は0:00と表示され、開くことができません——音声そのものはすでに書き込まれているのにもかかわらず、です。壊れたのは、レコーダーが最後に確定する小さなヘッダーであり、それを再構築するのに録音をサーバーへ渡す必要はありません。

ファイルがデバイスから出ることはありません — 修復はブラウザ内で実行されます。アップロードは 0 バイトです。

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

今すぐ修復

  1. ファイルをドロップ
  2. 修復はローカルで実行
  3. 結果をダウンロード

ハンディボイスレコーダー——Sony ICD、Olympus/OM System WSとDS、Zoom H1/H4n/H5/H6、Tascam DR-05/DR-40、Philips DVT——は、次の2つのフォーマットのいずれかで保存します。非圧縮のWAV(リニアPCM、通常は16ビットまたは24ビットで、44.1、48、96 kHz)か、圧縮されたMP3です。どちらも、話している間は音声をカードに書き込みますが、記録内容を管理する小さなヘッダーだけは、Stopを押したときにのみ書き終えます。その前に電源が切れると——バッテリー切れ、microSDの抜き取り、強制リセットなど——レコーダー自身がしばしば「File corrupted」(ファイルが壊れています)や「Recording lost」(録音が失われました)と表示し、パソコンでファイルを開いても平坦な0:00になります。音そのものはほぼ必ずカードに残っています。書き込まれなかったのは、そこへたどり着くための地図の方です。上のエリアに.wav.mp3をドロップすると、ツールはその地図をブラウザ内で再構築し、プレーヤーが実際に開けるファイルを書き戻します——しかも何一つ端末の外へ出ることはありません。

ボイスレコーダーのファイルは実際には何でできているのか

WAVファイルはRIFFコンテナです。オフセット0にASCIIバイト列RIFF、オフセット4に32ビットのリトルエンディアンのサイズ、オフセット8にフォームタイプWAVEで始まります。その後にチャンクが続き、それぞれが4バイトのタグと32ビットのサイズで構成されます。重要なのは2つ、fmt (末尾のスペースに注意——4文字のタグです)とdataです。fmt チャンクは、レコーダーがサンプルの解釈方法を記録する場所です。16ビットのオーディオフォーマットコード(1=リニアPCM)、チャンネル数、Hz単位のサンプルレート、バイトレート、ブロックアライン、そしてビット/サンプルが入ります。これらを読めば、バイト列をどうデコードすればよいかが正確に分かります。逆に失えば、生のPCMはただの匿名の数値の羅列にすぎません。dataチャンクは音声そのものです。4バイトのタグ、32ビットの長さ、そしてインターリーブされたサンプルが続きます。

落とし穴は、最上位のRIFFサイズとdataチャンクの長さの両方が最後に書き込まれるという点です。録音中、機器はそのテイクがどれだけ長くなるかをまだ知らないため、サンプルをカードへ流し込み、停止したときにこの2つのサイズフィールドを後から書き換えます。MP3で保存するレコーダーは、その代わりに自己完結したMPEGオーディオフレームの連なりを書き込みます。各フレームは11ビットのフレーム同期——バイト0xFFに続いて、上位3ビットが1になっているバイト(0xFFE…)——で始まり、その手前にはしばしばID3v2タグが置かれます。いずれにせよ、実データはフレームごと、あるいはサンプルごとにカードへ書き込まれていきます。それらを束ねるフレーム構造だけが、いちばん最後に確定するのです。

保存の中断がなぜ壊れたファイルを残すのか

サイズフィールドはStopのときに書き込まれるため、録音を壊す中断は、ファイルが閉じられるべきその瞬間にすべて集中します。

録音中にバッテリーが切れた。 その瞬間までのサンプルはカードに残っていますが、オフセット4のRIFFサイズとdataの長さはプレースホルダーのまま——多くの場合0か、ファイルが事前確保されたときの古い値——になっています。プレーヤーは長さフィールドを信用し、音声を0バイト(あるいは途方もなく誤った数のバイト)だけ読み込み、0:00や「破損」と表示します。

書き込み中にカードが抜かれた、あるいはレコーダーがリセットされた。 これはファイルを途中で切り詰めます。dataチャンクはレコーダーが意図した完全な長さを依然として宣言しているのに、ディスク上のファイルはそれより短いため、宣言されたサイズが実際に存在するバイト数より大きくなります。メディアプレーヤーは、そのファイルを拒否するか、実データの末尾まで再生してからエラーを出すかのどちらかです。

MP3のテイクが一度も確定されなかった。 フレームの連なりは無傷なのに、途中で切れた、あるいは壊れたID3タグや、先頭のゴミデータのせいで、デコーダーが最初の0xFF 0xEx同期を見失います——つまり録音はそこにあるのに、プレーヤーはどこから始まるのかを見つけられません。可変ビットレートのファイルでは、総フレーム数を保持するXing/Infoヘッダーが欠けていることがあり、そうなると再生できたとしてもシークバーと再生時間が誤って表示されます。

これらのいずれの場合も、音声サンプルそのものはすでにストレージへ書き込まれていました。生き残らなかったのは、ほんの一握りのサイズフィールドとフレーム構造のバイトだけです——それこそがまさに修復できるケースなのです。二度と戻らないのは、中断より後の音声です。そのサンプルは、そもそも一度も書き込まれていません。

ブラウザはどのようにヘッダーを再構築するのか(再エンコードなし)

WAVの場合、修復はあなたのタブ内で純粋なTypeScriptとして動くヘッダーの再構築です。まずfmt タグを走査し、そこからフォーマットを直接読み取ります。オーディオフォーマットコード、チャンネル数、サンプルレート、ビット/サンプルです。これらの中核となるパラメータがすべて妥当(どれもゼロでない)なら、ヘッダーが必要とする2つの導出フィールドを計算し直します——blockAlign = チャンネル数 × (ビット/サンプル ÷ 8)byteRate = サンプルレート × blockAlign——こうすることで、ディスク上の壊れているかもしれない値を信用せずに済みます。次にdataタグを見つけ、それが宣言する長さと、実際に存在するバイト数とを比べます。宣言されたサイズが残っているバイト数より大きいときは、そのファイルをtruncated(切り詰め)と判定し、生き残ったすべてのバイトを保持します。dataヘッダーがまったくない場合は、fmt より後ろのすべてをPCMとして扱います。最後に、サンプルデータをフレームの整数個ぶんに切りそろえ(pcm.length % blockAlignにあたる末尾のバイトを捨て)、復元したサンプルの前に、きれいで正規の44バイトのWAVヘッダー——RIFF、正しいサイズ、WAVE、16バイトのfmt チャンク、そして本当の長さを持つdata——を書き込みます。PCMはそのまま丸ごとコピーされるため、デコードも再エンコードも一切ありません。音声は、あなたが録音したものとビット単位でまったく同じです。

ツールは、何をしたかを短いレポートで伝えます。damageClassheader(サイズだけが誤っていた——きれいな成功)、truncated-dataまたはno-data-header(末尾が欠けていた部分的な結果)といった値と、復元されたサンプルレート、チャンネル数、ビット/サンプル、PCMのバイト数が示されるので、結果を確かめられます。MP3の録音は、代わりに兄弟分のMP3ルートが処理します。先頭の壊れたID3タグやゴミデータを取り除き、最初の本物のフレームで再同期します——ある候補を受け入れるのは、そこから計算したフレーム長がちょうど別の有効な同期の上に着地したときだけで、これにより音声の内部で起きる誤検出をはねつけます——そして生き残ったフレームを無劣化で書き出します。この処理はどれもネットワークに触れません。ブラウザのネットワーク(Network)タブを開けば、録音が0バイトも送信されていないことを確認できます。

録音が本当に救えないのはどんなときか

ヘッダーの再構築が届くのは、カードにたどり着いた音声だけです。fmt チャンクそのものが失われている場合、ツールは推測するのではなく正直に失敗します——フォーマットコード、チャンネル数、サンプルレート、ビット深度がなければ、そのバイト列が48 kHzの16ビットステレオなのか、96 kHzの24ビットモノラルなのかを知る術はなく、それらの数値をでっち上げればノイズを生むだけです。44バイト未満のファイル(有効なヘッダー1つ分よりも小さい)や、切りそろえるとサンプルフレームが整数個ぶんも残らないファイルは、同じ理由で復元不能と報告されます。中にデコードできるものが何もないからです。

また、不良のカードが物理的に上書きした、あるいはゼロとして返したものは復元できません——中断によって音声の領域が空白のまま残されたなら、そのサンプルはディスク上に存在せず、どんなヘッダーもそれを直せません。まずストレージのレベルで生のバイトを復元してから、ファイルを修復してください。暗号化された録音やDRMで包まれた録音(一部の企業向けの口述筆記機器や会議用機器は、ファイルを鍵で包みます)は、そのままのPCMやMPEGオーディオではないため、鍵がなければ再構築すべきヘッダーそのものがありません。そして、MP3のある領域を捨てざるを得なかった場所には、短い無音やプチッというノイズが残ることがあります——修復は良好なフレームを保持しますが、失われたミリ秒ぶんを合成することはありません。確実に取り戻せるのは、書き込まれたすべてのサンプルとすべてのフレームであり、しかもプレーヤーが開けるコンテナに収められた状態で返ります。

修復できるものとできないもの

修復できる

  • レコーダーがStopの前に電源を失ったあと、RIFF/dataのサイズがプレースホルダーやゼロになっているWAVファイル(0:00と表示されるがPCMは無傷)
  • dataチャンクが実際に存在するより多くのバイトを宣言している、切り詰められたWAVファイル——生き残ったものすべてを復元
  • 「data」チャンクのヘッダーがない録音——fmtチャンクより後のバイトをPCMとして扱い、ヘッダーを再構築
  • 復元したfmtパラメータ(チャンネル数、サンプルレート、ビット)から再構築した、きれいで正規の44バイトのWAVヘッダー(byteRateとblockAlignは計算し直し)
  • 一度も確定されなかったMP3のテイク——壊れたID3タグや先頭のゴミデータを取り除き、フレームを再同期してファイルが再生できるように

修復できない

  • 「fmt 」チャンクが失われたファイル——フォーマット、チャンネル数、サンプルレート、ビット深度がなければPCMは解釈できず、推測せずに失敗します
  • 44バイト未満のファイル、あるいはサンプルフレームが整数個ぶんも残らないファイル——書き出せるデコード可能なものが何もありません
  • 障害の最中にカードが上書きした、あるいはゼロとして返した音声——そのサンプルはそもそもディスク上に存在しませんでした(まず生のバイトを復元してください)
  • 鍵のない、暗号化された、あるいはDRMで包まれた口述筆記/会議の録音——再構築すべき素のヘッダーがありません
  • 捨てざるを得なかったMP3フレームの中にある、その部分の音声そのもの——壊れた領域を取り除いた場所には短い無音が残ることがあります

修復が失敗した場合、その理由(データの欠落か構造の破損か)をお伝えします。失敗した修復に料金が請求されることはありません。

よくある質問

レコーダーに「File corrupted」(ファイルが壊れています)と表示され、ファイルが0:00として再生されます——録音は失われたのでしょうか?

たいていは失われていません。それは確定されなかった保存の典型的な兆候です。レコーダーは音声をカードに書き込んだものの、WAVのサイズフィールドを後から書き換える前に電源を失ったため、プレーヤーは長さをゼロと読み取ります。サンプルはまだそこにあります——RIFFとdataのヘッダーを本当の長さで再構築すれば、録音は再び再生できるようになります。

修復すると音声が再圧縮されて音質が落ちますか?

いいえ。WAVの場合、PCMサンプルは新しい44バイトのヘッダーの後ろにバイト単位でそのままコピーされます——デコードして再エンコードする工程はないので、音声はあなたが録音したものとビット単位で同一です。MP3の場合、生き残ったフレームがそのままコピーされます。失われる音声は、保持できないほど壊れたフレームの中にあるものだけです。

ファイルが録音したものよりずっと短いのですが——それでも修復できますか?

保存が切り詰められた場合、dataチャンクはレコーダーが意図した完全な長さを依然として宣言していますが、ディスク上には音声の一部しかありません。ツールは、宣言されたサイズが存在するバイト数を上回っていることを検出し、生き残ったものすべてを保持して、本当の長さを持つヘッダーを書き込みます。書き込まれた部分は取り戻せます。中断より後の音声は、そもそも保存されていませんでした。

修復したファイルが違う再生時間を表示したり、シークバーがおかしかったりするのはなぜですか?

WAVの場合、再構築されたヘッダーは本当のPCMの長さを使うため、再生時間は正確です。可変ビットレートのMP3の場合、総フレーム数を保持するXing/Infoヘッダーが失われていると、プレーヤーは代わりにビットレートから長さを推定します——音声は最初から最後まで再生されますが、表示される再生時間とシークバーはずれることがあります。

修復のために私の録音はアップロードされますか?

いいえ。.wav.mp3はあなたのディスクから読み込まれ、ブラウザのタブ内で再構築されます。WAVとMP3の修復コードは素のTypeScriptで、サーバーとのやり取りは一切ありません。ネットワーク(Network)タブを開けば、録音が1バイトも端末から出ていないことを確認できます——これはインタビューや医療記録、機密性の高い会議で重要になります。

関連: MP3が再生できない(フレーム同期 / ID3) · "Invalid data found when processing input" · "Format not supported"(形式はサポートされていません)(0xc00d5212) · アップロードゼロの約束を検証