Running MP3 on your Linux Box


-- by Goldencat <ruili@worldnet.att.net>
看到這個題目,也許很多人會感到奇怪.MP3呀,這是很簡單的東西嘛.我的電腦 跑的很好呀.這有什麼好寫的.其實linux下面,不管是mp3的製作,還是撥放都已 經有了非常完美的程式.這些我們都不需要自己動手來作,那麼我們需要的是什 麼呢?我們需要一個整體的MP3環境,一個可以工作在很爛的電腦上的MP3環境. CPU: 486-100 RAM: 32M HD: 60G (mount 在 /mp3) HD2: 520MB (64M Swap, 456MB mount 在 /) OS: RedHat7.2 Sound: Sound Blaster Live Value! NIC: Unknow ne2000 兼容卡 (很爛的那種,$4.5一張) 遇到的幾個問題和解決的方法: 第一個問題是,我的486的BIOS太老,不會認60G的硬盤 . 隨然可以安裝一個easyBios來給這個硬盤用.可是我又不想用easyBios.(給自己 找麻煩)所以就用一顆520MB的硬盤來作為boot partition. 我曾經把redhat6.2裝到380MB的硬盤中.所以就準備把整個linux裝到這個520MB的硬盤裡面. 第二個問題是: 這裡OS我選擇了RedHat 7.2,原因很簡單,我要用ext3的filesystem.最簡單的方法 就是安個redhat7.2了(不用自己再去patch kernel了)可是很討厭的就是,Redhat 7.2不給32M的機器去跑.install的時侯就被踢了出來.但我知道其實32M的RAM加上 64M的swap跑起來絕對沒有問題.因為我手邊機器很多,RAM也非常多.就給他多插上 兩條32M的RAM,這樣在96MB下安裝,就絕對沒有問題了.安完再給他把RAM拔回來. 安裝設定Linux: RedHat的安裝很簡單,這裡就不多說了.因為我的486不會從CD去Boot.所以我是用floppy 來boot電腦,然後從CD安裝.把520MB的硬盤切出64MB的swap,剩下的全部都放在 / 下面. 選擇自選安裝.什麼都不要選.(只要安上g++和glibc和vi 就可以了)安裝完畢以後,boot 進我們的電腦. 確定 /etc/inittab的runlevel是3.因為我們這台電腦是專門來跑mp3的,所 以一切的service全都關掉.全部喔.現在用rpm來安裝mpg123這個套間(順便把缺的那些sound esd的東西也都裝上)確定裝了cdda2wav和sed.這些我們都要用到的.這時候我的電腦已經用掉 420MB左右了. 還有件痛苦的事情要作就是重新編譯我們的kernel.我個人是建議找台快一點的機器來compile, compile好了以後,再拿到這台機器上來用.設定kernel的時候,凡是不需要,全部都不要選!不要 編譯module出來.因為486速度真的不怎麼樣.著要要做的就是把sound blaster live value設 定好.編好以後,更新lilo,然後重新開機. 設定MP3的製作程式: 關於MP3的製作.我還是最喜歡lame.為什麼呢?看看各大mp3製作程式的對比就知道為什麼選擇 lame了.到freshmeat找lame,然後download回來就好了.我是把全部的東西都放在/mkmp3這個目錄 下.現在在這個目錄下編輯一個小shell script來完成mp3的製作. $vi mkmp3.sh #!/bin/sh #this is a script to make mp3 files mkmp3.sh #get wav from CDs 這裡利用cdda2wav這個程式來抓取音軌 (*注意你的CDROM的位置*) cdda2wav -x -S 48 -B -D /dev/cdrom #remove .inf file created by cdda2wav 把cdda2wav做出來的.inf文件清掉 rm -f *.inf #chang file name from audio_*.wav to *.wav利用sed把audio_01.wav的名稱改成01.wav for file in *.wav; do mv `echo $file` `echo $file | sed 's/audio_//g'`; done #use lame to make mp3s 這裡就是用lame來作mp3了. for wav in *.wav; do `./lame -h -k -V 0 $wav`; done #change file name from *.wav.mp3 to *.mp3 改一下名子 for file in *.wav.mp3; do mv `echo $file` `echo $file | sed 's/wav.//g'`; done #remove the old .wav files 現在把所有的.wav文件都刪除 rm -f *.wav #mkdir on /mp3 在/mp3這個目錄上mkdir一個新的目錄 mkdir /mp3/$@ #move all mp3 to $@ 把所有的mp3都move到我們做的那個目錄下. mv *.mp3 /mp3/$@ 上面的script用起來非常簡單.首先要chmod +x mkmp3.sh.然後只要打入 假設你的CD-ROM中有一張Mandonna的CD(Music) ./mkmp3 Mandonna 就會把你/dev/cdrom中的那張Mandonna的CD全部變成MP3,並且保存在/mp3/Mandonna 這個目錄下.例如我要做Jennifer的CD,只要打 ./mkmp3 Jennifer 就可以了.同樣的,東西都放在/mp3/Jennifer/這個目錄下了. 下面就是mp3的撥放啦.因為我每天在office差不多要10個小時.真的滿無聊的. 但是我也不想每小時去換一張CD(這就是我聽mp3不聽CD的原因了)我也不喜歡 每次都聽同樣的順序的歌.但是我喜歡整張CD一起聽.也就是說好比讓電腦random 選CD來play一樣的.但是這首CD裡面的歌的順序不變.因為需要的不多,我也懶得到 freshmeat去一個個找,一個個試了.就自己動手一下好了: 下面這個小程式可以用random的方式play所有在/mp3下的mp3檔案: // Mp3 play programm mp3.cpp // by-Goldencat ruili@worldnet.att.net // GPL // :-) #include <dirent.h> #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> #include <string.h> int main() { struct dirent **namelist; srand( time (NULL) ); char *dir_name, *path, *file_name, *mp3; char *play; int i, n, song; unsigned int len; path="/mp3/"; file_name="/*.mp3"; play="mpg123 "; n = scandir(path, &namelist, 0, alphasort); if (n < 0) { cout<<"Error reading Directory"<<endl; exit (1); } else { for (i=0; i<1; i) { sleep(1); song=rand()%n; if (song != 0 && song != 1) { dir_name=namelist[song]->d_name; len=(strlen(play)+strlen(path)+strlen(dir_name)+strlen(file_name)+2); mp3=(char *) malloc(len); strcpy(mp3, play); strcat(mp3, path); strcat(mp3, dir_name); strcat(mp3, file_name); system(mp3); } } } } 編譯這個的時候,只要下: g++ -o mp3 mp3.cpp 就可以了.然後用./mp3來執行.因為自己用,所以寫的很陽春. 如果寫的有問題,還希望大家見諒.因為我不是程式高手. 小弟我已經用這個程式聽歌很久.都跑的不錯.:-) PS:最近換P-90的CPU來跑了.486太吃力(跑lame的時候)