FC2ブログ

ギャップはかくリップされかくプレイされる

19/10/17初稿

 本稿、「音楽CDの構造」記事の内容をそれに特化するため、そこから独立させました。ですので、構造記事を前提として記しています。


■音楽CDにおける「ギャップ」を正しく理解する

 まず押さえておきたいのは、「音楽CDの規格はリッピングなど想定していない。“CDプレーヤで再生”することを想定したもの」であることを念頭に置くことではないかと思います。

・ギャップ理解のコツ:「INDEX」の意味を切り分ける
 INDEXを“索引”的に捉えると、例えばトラックの先頭位置を示す“点”のように思ってしまいますが、CDの規格としては上述したような意味になっていますので、“期間”と捉えた方が解りやすいのではないかと思っています。
 CUEシートに記載されるINDEXは“点”のイメージですが、あくまでも「CD焼き」「イメージファイル再生時のトラック分割」などの際にトラック位置(INDEX位置)を知るためのものと考えた方がよいでしょう。
 ということで、本稿の「INDEX」はCUEシート的なものではなくCD規格的なものとして記述します。

・ギャップ理解のコツ:「ギャップ」を断絶的に捉えない
 詳しく取り上げる前に、「ギャップ」という名称についてちょっとだけ。
 「ギャップ」と呼ばれてはいますが、INDEX00期間(普通にサンプルがある)を指し、「裂け目,隙間,断絶」といった状態ではありません。それが証拠(?)にCD規格では「ポーズ(休止)」と呼ばれています。名称のイメージに惑わされないようにした方がよいでしょう。

・ギャップ理解のコツ:本当は「ポーズ」
 ポーズではなくギャップと呼ばれているのは、オーサリング時に曲間の「隙間」を示す用語として使われているものをリッピング用語に転用したためではないかと推測しています。また、CD-ROMやCD-RのJISにはデジタルデータトラックの区切り領域の名称として「プリギャップ」「ポストギャップ」が出てきます。これらを混用している可能性もありますね。

 ですので、リッピング的には本来なら「ポーズ」と呼んだ方がよいと思いますが、既に馴染んでしまっていますし、「ポーズ」というと止まってるみたいですから、本稿も「ギャップ」という名称を採用します。が、CUEシートの「PREGAP」「POSTGAP」コマンド的なものではなくCD規格的なものとして記述します。CD-ROMなどに言う「プリギャップ」「ポストギャップ」はCD-DAとは無関係なので無視します。

・プリギャップ(ギャップ)
 上のリンク先記事に記したしたINDEX00(本来なら「ポーズ」)のことです。
 トラック01には2秒以上付けることが必須ですが、トラック02以降は任意です。また、トラック01のINDEX00は通常はアクセスされません。
 というような特殊事情があるので、本稿ではトラック01のINDEX00期間はプリギャップとは呼ばないことにします。

・ポストギャップ
 プリギャップと異なりCD作成プロセスにおける概念で、先の記事に示した構造の通りCD-DAにはポストギャップに相当する領域はありません。CD-DAにおいてトラック間にギャップを入れるにしても、プリとポストに分ける意味はありませんよね。そもそもCD-DAの読み方としてはプリギャップすらトラックの開始ではありませんし。
 編集時点で存在してもCDになった時点で音声部分と合体しトラック最後の部分になるものです。つまり、リッピングしたWAVデータとしてはトラック末尾のゼロサンプルに相当します。プリギャップと異なり“リッピング時に付加されたものではなく普通に音声データとして読み出される”と理解してよいでしょう。なお、通常はゼロサンプルだと思いますがトラック末尾が“ゼロ近傍”なCDもあります。と言ってもそれが元ポストギャップなのか否か、判断しようはありません。

 よって、原則として、リッピング時に考える必要はありません。なのでリッパーなどにも「ポストギャップ」の概念はないハズです。例えば、≪EAC≫のGap Analyzingでは「Detecting Pre-Track Gaps」というダイアログが出て、検出結果が反映されるメイン画面にはGap欄は1列しかありません。Gapの処理設定でも「Gap」としか記述はなく、「Pre-Gap / Post-Gap」といった区別はありません。

・HTOA(Hidden Track One Audio)
 トラック01のINDEX00が以下の特徴を持つことを利用して仕込んだ隠しトラックが「HTOA」です。

・CDプレーヤであれリッピングであれ、CDの開始はトラック01のINDEX01なのでアクセスされない。
・長さの下限は2秒だが上限はない。

 CDプレーヤでは、“トラック01の前へ巻き戻し”できる機種なら再生できるようです。SONY製CDプレーヤ:CDP-770(88年発売のCD専用機)では確かに巻き戻して再生できました(ディスプレイ表示はTRACK1、INDEX0、走行時間はマイナス)。

#CDP-770では一般的な00m02s00fのINDEX00も-2secまで巻き戻しできました。00m02s37fのタイトルは一瞬-3secになるのを確認。

 リッピングでは、「プリギャップを自トラック先頭にくっつけるモードでリッピングしてから分離する」などの手が考えられますが、例えば≪CUERipper≫にはズバリHTOAをどうするかの設定があるので簡単です。
 リッピングする設定にすれば、“見立てINDEX00期間(先頭2秒をカットされたINDEX00)”が、「00.(HTOA).wav」というファイル名(拡張子はもちろんファイル形式によって異なる)でリップされます。ただし規格上のトラックナンバ00はリードイントラックです。
 リッピングする設定にしても、“見立てINDEX00期間”が2秒以上なければ無視されます。

#余談:LBAはトラック01のINDEX00においてはAMSFから150フレームマイナスした位置がスタートと決まっているようですので、「トラック01のINDEX00を読む場合でもLBAマイナス領域は読まない」結果が“見立てINDEX00”なのかも知れません。


■ギャップとリッピング

・リッパーはトラック間をどう読んでいるか
 さて、ではリッパーはトラック間をどう読んでいるのでしょうか。プリギャップも含め、サンプルの欠損やダブリなどはないのでしょうか。
 昔、次のような考察したことがあります。

『CarryOnMusic10+5582とS05Jという2種類の環境にて、あるCDの1曲目と2曲目を連続リッピングして≪WaveCompare≫で1曲目の末尾と2曲目の先頭のゼロサンプル数確認し、それを足してみます。
 すると、末尾と先頭のサンプル数は異なりますが両環境で合計値は一致しました。
 このことから、トラック間のゼロサンプル数は一定だけどトラックの切れ目判定がリッピング条件によって異なる、と推察されます。
 合計値が同じということは、曲と曲が流れで繋がるようなアルバムのファイル再生でもCD再生と同じように繋がると思います。』

 今回さらに踏み込んで、全15曲のあるCDにて以下を比較してみました。プリギャップ2から15まで全部あるCDです。ドライブはBDR-S05J。

a.≪iTunes 10≫でトラックごとにリップした15曲を波形編集ソフト≪SoundEngine≫でマージしたWAVファイル
b.≪EAC Ver1.0 beta3≫でimgとしてCDまるごと取り込んだWAVファイル

 …以下の通りWAVコンペア一致。

mergeimg compare


 ゼロサンプル数は先頭も末尾も一致です。総サンプル数も一致です。≪EAC≫のimg抽出はCDまるごと連続読みしていると思われますので、つまり≪iTunes 10≫でのトラック単位リッピングにおいて「サンプル欠落や存在しないサンプルの付加などはない」ということですね。
 ≪CUERipper 2.1.6≫でも大丈夫でした(対象タイトルは先とは別の全4曲CDですが)。
 もちろんすべてのリッパーでそうであるかは不明ですが、大丈夫な可能性高いのでは。

・≪WindowsMediaPlayer≫の不思議
 本項19/10/27追記:≪WindowsMediaPlayer 12.0.18362.418≫は、ギャップ読みは大丈夫ですが最終トラック末尾を1フレーム(588サンプル)取りこぼすようです。

 全4曲のCDにおいて、≪iTunes 12.10.0.7≫≪EAC Ver1.3 from 2 September 2016≫≪CUERipper 2.1.6≫はそれぞれ全曲上述の通り一致しますが、≪WMP≫だけ上記の結果になりました。
 TOCやサブコード情報による曲長から算出されるサンプル数は≪WMP≫だけ異なります。
 BDR-S09JとGGC-H20Nで同じ結果になりましたのでドライブ依存ではないでしょう。
 もう1タイトル最終トラックをリップしてみたところやはり1フレーム少なくなりましたのでタイトル依存でもないと思います。

 聴いて判るものではありませんし、もしかしたら“取りこぼし”ではなくリードアウトの直前1フレームを敢えて読んでいない(安全のため?)のかも知れませんが、「パーフェクト・リッピング」には適さないですね。

#なお、当比較は≪EAC≫≪CUERipper≫のオフセット補正はオフして行っています。「≪iTunes≫はオフセット補正していないから」です。オフセット補正については本項から離れる話題なので別稿にて。

・「トラック単位でもサンプル増減なくリッピングしているか」確認方法エトセトラ
 本項19/10/26追記:上記の確認は、マキシシングル、ミニアルバム、8cmCDなどの収録曲が少ないタイトルの方がメンドクサくなくていいですね。
 ファイルのサンプル数確認方法をいくつか記しておきます。

・≪foobar2000≫≪Wavosaur≫などに読み込ませればプロパティで確認できます。
・≪iTunes≫では「曲の情報/オプション/停止」がトラックの長さになっています。秒以下は1/1000単位ですので75を掛ければフレーム数になります。総秒数に75を掛けてフレーム数を算出し、秒以下のフレーム数を足し、588を掛ければサンプル数になります。
・余計なことしていないWAVファイルなら、ファイル容量から44Byte引いて4で割ればサンプル数になります。

・トラック単位でリッピングしたらプリギャップはどこへいく?
 プリギャップは前トラック末尾にくっつけるのが一般的です。設定できないリッパーではそうなっているようですし、設定可能な≪EAC≫もそれがデフォルトです。「対象トラックのINDEX01から次トラックのINDEX01直前まで吸う」というコンセプト(次のトラックのINDEX00を含めてしまう)ですね(よって、トラック01のINDEX00期間はリップされません)。
 ≪EAC≫は処理を設定できます。

  「Leave Out Gaps」・・・リップ時にギャップ削除
  「Append Gaps To Previos Track (default)」・・・“前トラック末尾”にくっつけ
  「Append Gaps To Next Track」・・・“次トラックの先頭”にくっつけ

 ミソは、「プリギャップは前トラック末尾にくっつけるのが普通(デフォルト)」ってところですね。CDプレーヤのトラック頭出しはINDEX01に飛びますので、その動作と合わせているのでしょう。

 ちなみに、「Append Gaps To Previos Track (default)」以外はギャップ検出しないと選択できず、検出にはそれなりに時間を要します。これは、TOCにはトラック先頭としてINDEX01先頭位置の情報はありますがINDEX00のそれはないため、CD全面をスキャンして(サブコードを読んで)検出する必要があるためです。


■ギャップとファイル再生

 リッピングではtrack先頭末尾にサンプルの欠損やダブリはないことが解りました。では、再生時の完全性はどうでしょう。
 連続ファイル再生時、ファイル間でデータ欠落“途切れ”や本来ない“間”は発生していないのでしょうか。

・いわゆるギャップレス再生とプリギャップ・ポストギャップは無関係
 詳しくは知らないのですが、いわゆる「ギャップレス再生」とは、例えば同じCDからリップした1曲目のWAVファイルの音声データの最後と2曲目のデータの最初が連続して再生されることと理解しています。
 ここで言う「ギャップ」とは、「CD再生では存在しない“間”」が出来てしまうことを指していると思います。プリギャップやポストギャップといった「意図的に設けたギャップ」のことではないでしょう。同じく“ギャップ”という名称ですが意味が異なることに注意です。
 前述した通り、

 ・プリギャップデータはリッピングによって「前トラック末尾」に付加されるのが一般的
 ・ポストギャップはそもそもトラック内の音声データ化している
 ・リッピングによって曲間サンプルの増減はない

です。
 よって、ファイルオーディオにおいては、データの連続再生さえ出来れば「ギャップレス再生=CD再生と同じ曲間時間で再生」出来るということです。プレーヤが新たにギャップを削除したり挿入したりする必要はありません。

・PCにおけるギャップレス再生の実際
 ≪uLilith≫であれ≪foobar2000≫であれ、これまで用いたプレーヤで、ライブ曲のようなトラック間が連続するWAVファイルのギャップレス再生が出来なかったことは“少なくとも聴感上は”ないため、PC-Audioにおいて「ギャップレス再生」は特段の課題ではないと認識しています。
 ですが、一応その定量的確認ということで、ファイル再生について簡易実験してみました。

 あるふたつのファイルにつき、

a.≪PlayPcmWin≫で連続再生してS/PDIFキャプチャし、ひとつのファイルを生成

b.≪SoundEngine Free≫でマージしてひとつのファイルを生成

してWAVコンペアした結果、一致しました。つまり「≪PlayPcmWin≫による再生において曲間に本来存在しないギャップはない」と言えます。

#キャプチャの冒頭末尾は当然ファイルのそれと一致しませんが、ゼロサンプル詰めになりますので≪WaveCompare≫なら無視して比較してくれますので。

・「トラック単位でもサンプル増減なく再生しているか」確認方法エトセトラ
 本項19/10/26追記:「自分のお気に入りのプレーヤソフトがファイル間ギャップや欠損なく再生できているのか確認したいけれど、S/PDIFキャプチャできるデバイスなんて持ってない」という場合も当然あるでしょう。
 そこで、「WindowsデフォルトサウンドAPIのDirectSound」と「PC標準装備」でデジタルループバックする方法をひとつ紹介しておきます。
 ≪Audacity 2.1.0≫を用いる方法です。対応しているサウンドデバイスなら、デバイス内部で(外でケーブル繋がなくても)「ループバック」録音できます。以下Realtek製デバイスの設定例です。

  ・「編集/設定/デバイス/ホスト」で「Windows WASAPI」を選択
  ・「編集/設定/デバイス/録音」で
   「Realtek Digital Output (Realtek HIgh Difinition Audio) (loopback)」を選択

 そして、プレーヤをDigital Output(S/PDIF)からの再生に設定すれば録音できます。

#≪Audacity≫に限らずloopbackが選択できるソフトなら可能でしょう。また、PCの再生音を録音するツール(例:≪WaveClipper≫)を用いる手もあります。

 DirectSoundだとDigitalOutでもWindowsサウンドミキサーを通りますからそれに関する注意は必要ですし、万全を期してもビットパーフェクトは無理です(WAVコンペアはできない)。
 が、時間軸上の誤差は生じないハズですし微小ノイズが混入しても波形が崩れるレベルにはならないでしょうから、得られたファイルを波形編集ソフトで比較すれば表題の確認はできるでしょう。

#WASAPIやASIOを使えるプレーヤばかりではありませんから、DSで再生する例にしています(WASAPI再生・WASAPI録音は上手くいかなかったという事情もあり)。

 簡易的には、クラシックやライブなどトラックに切れ目がないハズのタイトル(自分で切れ目がないCDを焼いてもいいでしょう)を再生して“耳で確認”でもいいと思います。
 この方法は“完璧”ではありませんが、聞き取れない=実質的には問題ないということですので。
 万一後日サンプル増減が発覚したとしても、ファイルを改変してしまったワケではありませんからプレーヤソフトを選びなおせばいいだけですし(リッピングとは重要度が違います)。

・いわゆる「ギャップレス再生」のいろいろ
 ただし、上記はWAVファイルをローカル再生する場合のハナシです。ERIとしては扱っていないので確定情報ではありませんが、ネット情報によると、「ポータブルプレーヤにおける圧縮ファイルの連続再生」「ネットワークオーディオ」などではファイル間ギャップの発生はありえるようです。
 その場合は、ギャップレス再生とは「本来存在しないギャップが発生しないようにする機能」を指すワケですね。マッチポンプ的な名称?(笑)

 また、ファイルにある“プリギャップ”を削除して再生することを指す場合もあるようなないような。

 複数の意味で使われているようですね。


■余談

・リッパーはINDEX02以降をどう読んでいるか
 普通は、INDEX01頭から次トラックのINDEX01直前までをひとつのトラックとしてリッピングします。
 INDEX00領域を自トラック先頭にくっつける設定の場合は、INDEX00(ない場合はINDEX01)頭から次トラックのINDEX00(ない場合はINDEX01)直前までをひとつのトラックとしてリッピングします。
 ギャップを削除する場合はINDEX00領域を削除します。
 ですので「INDEX02~INDEX99はあってもなくても関係ない」のが基本です。

#ここではCUEsheetを使って分割するなどの件は無視しています。

・CDプレーヤカウンタのプリギャップ表示
 一説に「プリギャップはマイナス表示される」とありますが、例えば前述の15曲入りCDのプリギャップはSONY製BDプレーヤ:BDP-S470では単純に前の曲の演奏時間として表示されました。14曲目と15曲目の間なんて以下の通り6秒もあるので見逃しではないでしょう。14曲目の演奏が06:00カウント超えるのも見ましたし。
 Panasonic製UHD-BDプレーヤ:DMP-UB90-Kでも同じでした。
 SONY製CDプレーヤ:CDP-770ではマイナスカウントが確認できました(ディスプレイ表示はTRACK15、INDEX0)。

  TRACK 14 AUDIO
   TITLE "Track14"
   PERFORMER "Unknown Artist"
   FLAGS DCP
   INDEX 00 56:12:53
   INDEX 01 56:15:24
  TRACK 15 AUDIO
   TITLE "Track15"
   PERFORMER "Unknown Artist"
   FLAGS DCP
   INDEX 00 62:10:14
   INDEX 01 62:16:48


 “CDプレーヤ”じゃないからかも知れませんけど(苦笑)。PCソフトプレーヤでも同様の表示されるようです。

・リッピングソフトの時間表示
 上記タイトルの、≪EAC≫のCD挿入時のStart、Length、Gap表示、Gap除去(*)したLength、≪iTunes 12.6.2.20≫表示 は以下の通りです。

  Track13:0:51:37.74 0:04:37.25 0:00:01.44 0:04:34.54 04m37s
  Track14:0:56:15.24 0:06:01.24 0:00:02.46 0:05:54.65 06m01s
  Track15:1:02:16.48 0:05:30.01 0:00:06.34 0:05:30.01 05m30s

*:Gap Detect(Secureで)した状態でLeave Out Gapを実施

・≪EAC≫の表示は「時:分:秒.フレーム」。元になるCDのTOCやINDEX情報の秒以下はフレーム単位。
・CDブックレットには時間記載なし。
・BDR-S05Jと≪iTunes≫で行ったリッピングファイルの≪WaveCompare 1.32≫での時間表示はLengthと一致。
・≪EAC≫ではTrackのLength(長さ)をStartに単純に足すと次のTrackのStartになっている。
・≪EAC≫のLengthは他の結果と同じ。
・Gap除去した結果は、次TrackのGapが減っている。

 つまり、一般的にはGapはやはり前トラック末尾にくっつき、INDEX01がTrackの切れ目として動いているということです。「TrackとGap(正確にはポーズ)以外の要素はない」ということが解ります。

 なお、例えば≪WaveCompare≫では秒以下の表示方法を選択可能です。ソフトによって、秒以下の表示はフレーム数か時間かに注意が必要です。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

最新記事
ERIへようこそ

Author:らかせ
「最新記事」または
「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です

・一応、拍手にコメント(非公開)付けられるようにしてあります

・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください

・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください

・引用の考え方については「007:諸事」をご参照ください

・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

カテゴリ
検索フォーム
FC2カウンター