mattintosh note

Hello Raspberry Pi!

Audio CD を RAW データで取り込む

この前買った CD をいい加減取り込まなくてはと思いつつ、あきばおーでポータブル DVD ドライブを買ってきた。最近だと ¥2,500 もあれば買えてしまうのね。1台買っておけばよかった。(でも読み込み 24x って遅い…)

取込みはいつも cdparanoia を使って、NeroAacEnc でエンコードしているのだけど、今日は RAW でも取り込んで遊んでみた。ちなみに Audio CD は dd コマンドでは取込みが出来ない。

Audio CD を RAW データで取り込む

まずは cdrdao の使い方を見てみよう。

cdrdao

cdrdao は cdrdao だけでは動作せず、cdrdao <command> 形式で実行する必要がある。

Cdrdao version 1.2.3 - (C) Andreas Mueller <andreas@daneb.de> Usage: cdrdao <command> [options] [toc-file] command: show-toc - prints out toc and exits toc-info - prints out short toc-file summary toc-size - prints total number of blocks for toc read-toc - create toc file from audio CD read-cd - create toc and rip audio data from CD read-cddb - contact CDDB server and add data as CD-TEXT to toc-file show-data - prints out audio data and exits read-test - reads all audio files and exits disk-info - shows information about inserted medium discid - prints out CDDB information msinfo - shows multi session info, output is suited for scripts drive-info - shows drive information unlock - unlock drive after failed writing blank - blank a CD-RW scanbus - scan for devices simulate - shortcut for 'write --simulate' write - writes CD copy - copies CD Try 'cdrdao <command> -h' to get a list of available options

今回は読み取りを行うので read-cd コマンドを使う。これもヘルプを見てみる。

cdrdao read-cd
Cdrdao version 1.2.3 - (C) Andreas Mueller <andreas@daneb.de> Usage: cdrdao read-cd [options] toc-file options: --device [proto:]{<x,y,z>|device} - sets SCSI device of CD-ROM reader --driver <id> - force usage of specified driver for source device --datafile <filename> - name of data file placed in toc-file --session # - select session --fast-toc - do not extract pre-gaps and index marks --read-raw - read raw data sectors (including L-EC data) --no-mode2-mixed - don't switch to mode2_mixed --rspeed <read-speed> - selects reading speed --read-subchan <mode> - defines sub-channel reading mode <mode> = rw | rw_raw --tao-source - indicate that source CD was written in TAO mode --tao-source-adjust # - # of link blocks for TAO source CDs (def. 2) --paranoia-mode # - DAE paranoia mode (0..3) --with-cddb - retrieve CDDB CD-TEXT data while copying --cddb-servers <list> - sets space separated list of CDDB servers --cddb-timeout # - timeout in seconds for CDDB server communication --cddb-directory <path> - path to local CDDB directory where fetched CDDB records will be stored --force - force execution of operation -v # - sets verbose level

今回はデータファイルを作成するので --datafile オプションを使う。今回は --swap を使って s16le -> s16be にバイトオーダーを入れ替えてみる。(※こんな話をしておきながら実は --swap を使わずに dd conv=swab した方が何かと都合がよい)

CD はこれ。(その情報は重要か?)

Walkure Attack!(初回限定盤)(DVD付)

Walkure Attack!(初回限定盤)(DVD付)

※面倒なので以降、シェルのブレース展開を使う。

cdrdao read-cd --rspeed 24 --read-raw --swap --datafile 'Walküre Attack!'.{bin,toc}

TOC ファイルは以下のようなものになる。CATALOG は値を調べてみたら JAN が入ってるっぽい。ISRC(International Standard Recording Code)とは日本語で「国際標準レコーディングコード」のこと。

CD_DA CATALOG "4580325321982" // Track 1 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 0 04:54:47 // Track 2 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 04:54:47 04:12:55 // Track 3 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 09:07:27 03:54:70 // Track 4 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 13:02:22 04:04:28 // Track 5 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 17:06:50 04:25:60 // Track 6 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 21:32:35 04:30:72 // Track 7 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 26:03:32 05:34:68 // Track 8 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 31:38:25 05:14:57 // Track 9 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 36:53:07 05:11:25 // Track 10 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 42:04:32 04:26:38 // Track 11 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO FILE "Walküre Attack!.bin" 46:30:70 04:39:52 // Track 12 TRACK AUDIO NO COPY NO PRE_EMPHASIS TWO_CHANNEL_AUDIO ISRC "JPVI01610890" FILE "Walküre Attack!.bin" 51:10:47 05:09:18

RAW データの再生

出来上がった RAW データは mplayer で再生できる。

mplayer --demuxer rawaudio 'Walküre Attack!'.bin

ffmpeg(ffplay)の場合はフォーマット、レート、チャンネルを指定しないと正しく再生できない。(cdrdao read-cd --swap していない場合は -f s16le

ffplay -f s16be -ar 44100 -ac 2 -i 'Walküre Attack!'.bin

VLC の場合はチャンネル数のデフォルトが 2 なので --rawaud-channels=2 は省略してもよい。(cdrdao read-cd --swap していない場合は --rawaud=fourcc=s16l

vlc 'Walküre Attack!'.bin --demux=rawaud --rawaud-fourcc=s16b --rawaud-samplerate=44100

dd conv=swab している場合は s16le になる。

dd if='Walküre Attack!'.bin of='Walküre Attack!'.bin.swaped conv=swab
mplayer --demuxer rawaudio 'Walküre Attack!'.bin.swaped
ffplay -f s16le -ac 2 'Walküre Attack!'.bin.swaped
vlc 'Walküre Attack!'.bin --demux=rawaud --rawaud-samplerate=44100

dd で変換した場合、TOC 内に記述されているファイル名と一致しなくなるので古い方を捨ててリネームしておく。

rm 'Walküre Attack!'.bin
mv 'Walküre Attack!'.bin.swaped 'Walküre Attack!'.bin

RAW データの分割

TOC ファイルから CUE シートを作成する。

toc2cue 'Walküre Attack!'.{toc,cue}

bchunk を使って分割、WAVE ファイルを作成する。(-w をつけない場合は BIN 状態のまま分割される)

bchunk -w 'Walküre Attack!'.{bin,cue,}

自動化

RAW 読み込み、スワップ、CUE シート作成、WAV ファイル作成まで一括で。デバイスの指定とか環境によっては細かい指定が必要かも。

#!/bin/sh
set -e
set -x

: ${1:?}

cdrdao read-cd --read-raw --datafile "$1".bin "$1".toc
mv "$1".bin "$1".bin.orig
dd conv=swab if="$1".bin.orig of="$1".bin
rm "$1".bin.orig
toc2cue "$1".toc "$1".cue
bchunk -w "$1".bin "$1".cue "$1 - "

参考

forums.freebsd.org

linux.die.net