2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

LinuxでのCD-R/RWについてのスレ

1 :ペンギン:02/06/01 22:42 ID:8nhbR4Y6.net
Linux のCD-R/RWがわからんひと!!こい!ってか自分がわからん。

621 :login:Penguin:2008/05/03(土) 23:38:27 ID:Te06dilw.net
>mplayer なら直接binファイルを開けるっぽい。
>bchunk 使ってISOイメージに変換したほうが汎用性高い。

ここでも何度も書いてるように、音楽トラックはデータトラックとは違うので
isoではなく、cdrに変換される。
データトラックならisoにすればLinux標準でマウント出来るので汎用性があるが
音楽CDだったら話は違ってくる。
なのに、bchunkを使えというから呆れる。

622 :login:Penguin:2008/08/09(土) 22:02:58 ID:/q6Hypz7.net
自分用メモ
CDからwav+cueを作るスクリプト(Public Domain)
(FreeNAS(FreeBSD)で使ってるけどLinuxでも多分いける)

#!/bin/sh

umask 0
cd /mnt/disk/cdda

getCDinfo.rb

tempname=cdda-`date +%Y-%m%d-%H%M`

cdrdao read-cd --read-raw --device 0,0,0 --driver generic-mmc --speed 48 --datafile ${tempname}.bin ${tempname}.toc

filename=`getCDinfo.rb ${tempname}.toc`
echo ${filename}

echo 'convert...'
sox -t cdda -x ${tempname}.bin ${filename}.wav
mv ${tempname}.toc ${filename}.toc

rm ${tempname}.bin



623 :login:Penguin:2008/08/09(土) 22:08:04 ID:/q6Hypz7.net
上記で使ってるCD-DBを参照して.tocを.cueに変換するスクリプト
(getCDinfo.rb 、同じくPublicDomain)

#!/usr/bin/env ruby
$KCODE='sjis' # Ruby-freedがsjis以外だと誤動作
$/="\r\n" # LFだとMagicDiskが誤動作
require 'iconv'
require "freedb"

def iconv(src,conv)
str=''
begin
str=conv.iconv(src)
rescue Iconv::InvalidCharacter => err
p err
p err.success
str=err.success
ensure
str << conv.iconv(nil)
end
str
end


624 :getCDinfo.rb 続き2:2008/08/09(土) 22:09:53 ID:/q6Hypz7.net
# cueファイルの文字コード
def iconvcue(src);iconv(src,Iconv.new('SHIFT_JIS','SHIFT_JIS'));end
# ファイルシステムの文字コード
def iconvfs(src);iconv(src,Iconv.new('UTF-8','SHIFT_JIS'));end

def getCDinfo2(server)
freedb=Freedb.new
freedb.fetch_cgi(server[0],80,nil,nil,server[1])
return nil if freedb.results.size<=0
freedb.get_result(0)
result={}
result[:server]=server[0]
result[:title]=freedb.title
result[:artist]=freedb.artist
result[:genre]=freedb.genre
result[:year]=freedb.year
result[:discid]=freedb.discid.upcase
# タイトルから特殊文字を抜いてファイル名を生成
filename=''
freedb.title.split(//).each{|c|
if c.size>1
filename << ((c!=' ')?c:'_') # Windows cmd.exeのバッチファイル対策
else
filename << ((c=~/[-_A-Za-z0-9]/)?c:'_')
end
}
result[:filename]=filename
result[:tracks]=[]
freedb.tracks.size.times{|i| result[:tracks] << freedb.tracks[i]['title'] }
return result
end


625 :getCDinfo.rb 続き3:2008/08/09(土) 22:11:34 ID:/q6Hypz7.net
def getCDinfo
result=nil
[
['freedbtest.dyndns.org','/~cddb/cddb.cgi'],
['www.freedb2.org','/~cddb/cddb.cgi'],
].each{|server|
result=getCDinfo2(server)
break if result!=nil
}
return result
end

def createCUE(tocfilename)
oldfilename=''
tracks=[]
open(tocfilename,"r") {|fs|
fs.read.split("\n").each{|l|
l.chomp.strip!
if l=~/^FILE/
data=l.split(/ +/)[1..3]
oldfilename=data[0][1..-2]
data[1]='00:00:00' if data[1]=='0'
tracks << [data[1],data[2]]
end
}
}
return if tracks.size<=0
cdinfo=getCDinfo
return if !cdinfo
filename2=iconvfs(cdinfo[:filename])


626 :getCDinfo.rb 続き4:2008/08/09(土) 22:12:21 ID:/q6Hypz7.net
result=<<EOD
REM GENRE "#{iconvcue(cdinfo[:genre])}"
REM DATE "#{cdinfo[:year]}"
REM DISCID "#{cdinfo[:discid]}"
TITLE "#{iconvcue(cdinfo[:title])}"
PERFORMER "#{iconvcue(cdinfo[:artist])}"
FILE "#{iconvcue(cdinfo[:filename])}.wav" WAVE
EOD
tracks.size.times{|i|
result+=<<EOD
TRACK #{format("%02d",i+1)} AUDIO
TITLE "#{iconvcue(cdinfo[:tracks][i])}"
PERFORMER "#{iconvcue(cdinfo[:artist])}"
INDEX 01 #{tracks[i][0]}
EOD
}
result.gsub!("\r",'')
result.gsub!("\n","\r\n")
open(filename2+'.cue',"w") {|fs|
fs.print result
}
return filename2
end

627 :getCDinfo.rb 続き5:2008/08/09(土) 22:14:31 ID:/q6Hypz7.net
if ARGV.size>0
# そのうちCD抜いた状態で作れるようにしたいのでこんな仕様に
ARGV.each{|tocfilename| puts createCUE(tocfilename)}
else
cdinfo=getCDinfo
exit if !cdinfo
puts <<EOD
SERVER\t\t#{iconvfs(cdinfo[:server])}
TITLE\t\t#{iconvfs(cdinfo[:title])}
PERFORMER\t#{iconvfs(cdinfo[:artist])}
GENRE\t\t#{iconvfs(cdinfo[:genre])}
DATE\t\t#{cdinfo[:year]}
DISCID\t\t#{cdinfo[:discid]}
FILE\t\t#{iconvfs(cdinfo[:filename])}
EOD
cdinfo[:tracks].size.times{|i| puts "#{format("%02d",i+1)} : #{iconvfs(cdinfo[:tracks][i])}" }
end


628 :getCDinfo.rb 続き6:2008/08/09(土) 22:21:22 ID:/q6Hypz7.net
使うにはRubyとruby-freedbが必要

処理の流れは
1. cdrdaoで.bin(バイトオーダ違い)と.tocを生成
2. getCDinfo.rbでfreeDBを検索してタイトル等を取得、さらに.tocを.cueに変換
 この時、ドライブに入っているCDを参照するのがカッコ悪い
 (1.でCDのTOCだけ別ファイルにしておくか?.tocだと情報がちょっと足りない)
3. soxで.binを.wavに変換
 ここでバイトオーダ(エンディアン)変換もやってるのがダサい
 誰かcdrdaoにパッチ当てて直に.wav吐けるようにしておくれ
4. cueファイルの名前に合わせてリネーム

それにしても改行制限が面倒で、スクリプト貼るのには向いてないな。

629 :login:Penguin:2008/08/10(日) 02:45:35 ID:uXCCYJTJ.net
gnomeだったら普通に
1.AudioCDのアイコンを右クリックして"CDのコピー"を選択
2.コピー先にファイル・イメージを選択して書き込み→image.iso & image.iso.tocができる。
3.焼くときは $cdrdao write --device /dev/sr0 --datafile image.iso image.iso.toc でOK。
4.wav,mp3,aac,flac変換は、普通にsound juicerでリッピング。
 携帯音楽プレイヤーでもなんでもすきなとこもってけ。

kdeならk3bでcdrでもwavでも大概OK じゃないの?

なんか、なんで揉めているのかわからない。
みんな大抵のトリで最初から入ってるじゃん。


630 :login:Penguin:2008/08/10(日) 07:08:18 ID:J94nYVfc.net
>>622-628
Linuxでcueの件はここで紹介されている
http://d.hatena.ne.jp/gamaguchi/20070303/p2
http://fun.poosan.net/sawa/index.php?UID=1199343775

>>629
最初からついてるソフトを使うなら、Windowsで最初からついてるドライブ付属のB'sやNeroを使うのと変わらない。
何故あえて、付属のライティングソフトを使わずにEACを使うのだろう?という疑問が解けなければ
>なんか、なんで揉めているのかわからない。
という疑問は解けないだろう。

話を上のリンクに戻すと
>とにかくこれでCUEシートが作れました。WindowsのEACと微妙に INDEX の値が違うけど気にしたら負けです。
>ドライブのオフセットとか追求しても気持ちの問題程度らしいし。

ということなので、EACを使う人の気持ちは満たしてくれないだろう。
だがこれがわざわざ付属のライティングソフトを使わない理由だし、それがすべてである。
そんなの気にしないんだったら付属のライティングソフトだけ使えば良い。
でもどうしても、オフセットを追求しないと気持ち悪いし、どうしてもLinuxですべてやるんだ、Wineは邪道という人は、プレク使うしかないだろう。

総レス数 756
222 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★