June 13,2006
以 script 產生 5000 首 mp3
5000 首 mp3 ?!
去哪裡生啊,靈機一動,不如使用 script 來產生,快又有效。
最早的一個版本是拿一個樣板的 mp3 來複製,可是又怕內容有版權問題,所以後來改用 Text to Speech 的軟體來將文字轉成聲音...
我的環境:Fecora Core 5
會用到的套件:Festival (text2wave)、lame (轉 wave 為 mp3)、id3tag (為轉好的 mp3 上 id3 tag)。
程式碼如下:
LIMITESONGS 用來控制要產生的數量。
TEXT 則是要說的文字,目前 festival 還不支援中文,所以只能放一些英文字串。
托福,也因此我學到 bash script 裡面可以運算變數內容,作加減乘除,以前我以為只能運算文字內容而已,真的是不經一事不長一智。
去哪裡生啊,靈機一動,不如使用 script 來產生,快又有效。
最早的一個版本是拿一個樣板的 mp3 來複製,可是又怕內容有版權問題,所以後來改用 Text to Speech 的軟體來將文字轉成聲音...
我的環境:Fecora Core 5
會用到的套件:Festival (text2wave)、lame (轉 wave 為 mp3)、id3tag (為轉好的 mp3 上 id3 tag)。
程式碼如下:
#!/bin/sh
#
# run2.sh
# This script is used to generate short songs.
# You can decide how many songs should be generated by modify LIMITSONGS variable.
#
# Dependency:
# festival (Text to speech by text2wave)
# lame (convert wave to mp3)
# id3tag (tag the generated mp3)
#
# Tested environment:
# Fedora Core 5
#
ITER=1
LIMITSONGS=5002
((TOTAL=LIMITEDSONGS - 1))
while (($ITER < $LIMITSONGS))
do
NEWFILENAME=`printf "./%04d.mp3" $ITER`
WAVEFILE=`printf "%d.wav" $ITER`
((ALBUMNUM=ITER / 20))
((ARTISTNUM=ITER / 20))
ALBUM=`printf "Album%04d" $ALBUMNUM`
ARTIST=`printf "Artist%04d" $ARTISTNUM`
TITLE=`printf "Song%04d" $ITER`
TEXT=`printf "Hello world! This is song %d which is generated by text2wave. Here are %d songs, enjoy them. See you later, baby." $ITER $TOTAL`
echo Processing $NEWFILENAME
echo $TEXT > text.txt
text2wave -F 19200 -o $WAVEFILE text.txt
lame $WAVEFILE $NEWFILENAME
id3tag --artist=$ARTIST --album=$ALBUM --song=$TITLE --genre=classic --track=$ITER --desc="generated by script." --total=$TOTAL $NEWFILENAME
((ITER = ITER + 1 ))
rm -f $WAVEFILE
done
rm -f text.txt
echo "done."
LIMITESONGS 用來控制要產生的數量。
TEXT 則是要說的文字,目前 festival 還不支援中文,所以只能放一些英文字串。
托福,也因此我學到 bash script 裡面可以運算變數內容,作加減乘除,以前我以為只能運算文字內容而已,真的是不經一事不長一智。
引用URL
http://cgi.blog.roodo.com/trackback/1749819
引用列表:
all about kulartinuminto and top news
kulartinuminto 56 post【kulartinuminto blog】
at October 18,2007 21:55