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的時候)
|