TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
おまえの hddparm -tT 教えてください。
Korora linux
【Linux】DINGUX for Dingoo A320 2.0 【DualBoot】
Ubuntu 104
玄人志向 玄箱12
互換性無視すればLibreOfficeで十分だよな。
Linux Mint 29
WindowsやめてLinuxデスクトップ! 28
【Raspberry Pi】ラズベリー・パイ part43【ARM】
GTK+プログラミング
622 :
自分用メモ
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 :
上記で使ってる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 :
# 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 :
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 :
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 :
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 :
使うには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ファイルの名前に合わせてリネーム
それにしても改行制限が面倒で、スクリプト貼るのには向いてないな。

【Sun】Virtual Box part1
【Bash】Windows Subsystem for Linux【WSL】5
XPからの乗り換えをもくろんでいる人のスレ
【ファイル共有】ライムワイヤー【最新鋭】
【Sun】Virtual Box part1
オープンソースの全文検索ソフト
おまえらのLINUXマシンのスペック教えて
Linux板自治スレ★00
Office Suite 統合スレ その2
VMware Part11
--------------------
【韓国メディア】韓国人がまた殺害される、フィリピンで事件多発[05/18]
昌平高校 情報スレ5
狼ポケモンGOスレ 200匹目
【代ゼミ】中久喜匠太郎【Extreme】
立川あたりのラーメン46★
【次スレ立てろ】20〜29歳の若ハゲ・薄毛 PART124【立つまで埋めるな】
親が毒親の喪女6
【天使の】吉岡聖恵9【ボーカル】
ディーゼルエンジン 54
モバイルスペースで携帯サイトを作ってる人
文学の役割あげてけ
まんがタイムラブリーの迷走を止めるスレ
クッキー☆動画スレ150
【チヌゲー】チニング12
there's always room for you←これの意味わかる奴いる?和訳してほしい
【東京】北陸新幹線敦賀開業ダイヤ予想スレ1【敦賀】
奇跡の40代【愛の嵐】谷本重美〜小川範子8【はぐれ刑事】
久保利明・九段 応援スレッド 33
マスキングテープ別館28
アコエン被害者の会を応援するスレ
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼