Radiomalaya bukanlah stesen radio baru, tetapi merupakan script bash
untuk memainkan radio stream tempatan menggunakan mplayer.
Anggapkan post ini sebagai tutorial bagaimana membina script bash dengan gui
serta menggunakan mplayer slave.
Anda perlukan :
1. bash (sedia ada)
2. mkfifo (untuk membina file fifo yang diperlukan oleh mplayer)
3. zenity (untuk membina dialog/gui gtk bagi bash)
5. mplayer (untuk mamainkan stream radio)
Script ini secara kesuluruhan menggunakan kaedah function supaya code boleh
di ulang guna. Sila rujuk tutorial bash kami sebelum ini.
Script ini terbahagi kepada:
1. memeriksa dependencies script (aplikasi yang diperlukan)
2. guna zenity untuk membina dialog memilih stesen radio
3. guna zenity untuk membina dialog kawalan volume
4. guna zenity untuk menghentikan mplayer atau mematikan mplayer
5. guna mplayer untuk memainkan radio stream
Memeriksa dependencies:
Untuk memeriksa dependencies script iaitu samada file mkfifo, zenity dan mplayer
telah ada dalam system; kita gunakan operator "-e".
Operator -e dalam bash bermaksud file ujud (file exist).
Untuk tujuan memeriksa file ujud atau tidak, kita perlu tahu dimana file tersebut berada.
Arahan which "nama" berguna dalam menentukan path dimana file berada.
Contoh untuk memeriksa file mplayer ujud atau tidak:
if [ -e /usr/bin/mplayer ]; then
arahan1
else
arahan2
fi
Code tersebut memberi maksud:
Jika /usr/bin/mplayer ujud, maka kita run arahan1.
Jika /usr/bin/mplayer tidak ujud, maka kita langkau ke arahan2.
Guna zenity untuk membina gui atau dialog gtk bagi bash:
Sila rujuk manual zenity atau menaip zenity --help-all untuk mendapatkan option yang
ada bagi zenity. Zenity hanya memberikan kita keupayaan untuk membina dialog yang simple sahaja.
Untuk dialog yang canggih zenity tidak begitu sesuai.
1. Dialog pilihan stesen radio.
Untuk pilihan stesen, kita gunakan radio list dengan 2 kolum dimana kolum sebelah kiri
untuk "Pilih" dan kolum kanan untuk "Stesen".
Arahan zenity adalah seperti berikut:
stesen=$(zenity --title ".:: Radio Malaya ::." --list \
--text "Sila pilih stesen radio yang ingin didengar" \
--radiolist --column "Pilih" --column "Stesen" \
TRUE ERA-FM FALSE HITZ-FM FALSE MIX-FM \
FALSE RED-FM \
FALSE SINAR-FM FALSE XFRESH-FM FALSE MY-FM \
FALSE RADIO24-FM FALSE SABAH-FM \
FALSE LABUAN-FM FALSE KEDAH-FM FALSE \
GEGAR-FM FALSE NASYID-FM FALSE IKIM-FM \
FALSE EXPRESS-TAMIL FALSE MNET-FM \
FALSE LITE-FM FALSE RAAGA-FM FALSE SARAWAK-FM)Perhatikan kita guna variable "stesen" untuk arahan zenity supaya boleh digunakan untuk script
lain.
Perhatikan juga terdapat TRUE dan FALSE pada sebelah nama stesen.
TRUE akan menandakan radiolist secara default manakala FALSE tidak memilih radio list secara default.
Bila kita klik "OK", stesen radio yang dipilih akan dibawa oleh nilai $stesen.

2. Dialog kawalan volume
Untuk dialog ini, kita akan gunakan option "scale" pada zenity.
vol=$(zenity --timeout 20 --scale \
--title ".:: Radio Malaya :: $stesen ::." \
--text "Gerakkan slider untuk tetapkan volume" \
--min-value=10 \
--max-value=100 --value=10 --step 2;echo $vol)Variable yang digunakan ialah vol.
Perhatikan, kita gunakan --timeout 20. Ini akan menutup dialog volume selepas 20 saat
bagi mengelakkan terdapat multiple dialog volume jika pengguna tidak menutup dialog.
Nilai min bagi scale kita tetapkan pada 10 dan maximum kepada 100 kerana 100 adalah nilai
maksima yang boleh diterima oleh volume mplayer.

3. Dialog info, menghentikan mplayer dan mematikan mplayer.
Kita gunakan option "question" pada zenity untuk tujuan ini kerana butang "OK" dan "Cancel"
nya mempunyai nilai 0 dan 1, memudahkan ia dimanipulasikan.
Kita gunakan variable info untuk dialog ini.
info=$(zenity --title ".:: Radio Malaya :: $stesen ::." --question \
--text "Anda sedang mendengar $stesen\n
Klik OK untuk hentikan radio\ndan kembali ke Menu.
\n\nKlik Cancel untuk hentikan radio\ndan keluar."; echo $?)
Tidak ada yang istimewa pada dialog ini kecuali memberi tahu bagaimana untuk
menghentikan stream atau keluar dari aplikasi.
Yang penting adalah butang "Cancel" dan "OK". Apa yang perlu dikakukan pada kedua-dua
butang tersebut. Butang "OK" akan menghasilkan nilai "0", manakala butang "Cancel"akan
hasilkan nilai "1". Nilai-nilai ini akan kita guna pada function "control".

Mplayer Slave Mode:
Apa dia slave mode?
Slave mode pada mplayer membolehkan kita mengawal mplayer menggunakan arahan-arahan tertentu.
Mplayer akan kita run pada background dan idle untuk menunggu arahan.
Untuk run mplayer dalam mode slave, kita gunakan arahan berikut:
mplayer -slave -idle -really-quiet -input file=~/.mplayer/fifo
Perhatikan bahawa ia memerlukan file fifo.
Ini merupakan file istimewa yang digunakan oleh mplayer slave untuk menerima arahan.
Segala arahan yang kita ingin mplayer lakukan perlu kita "pipe"kan ke file fifo tersebut.
Untuk pipe arahan ke file fifo, kita boleh gunakan arahan echo.
Contoh untuk hentikan mplayer dari memainkan media:
echo "stop" > ~/.mplayer/fifo
File fifo tersebut boleh dibina menggunakan arahan:
Sila rujuk
http://www.mplayerhq.hu/DOCS/tech/slave.txt untuk arahan arahan yang boleh
diguna oleh slave.
Script akhir untuk radiomalaya adalah seperti berikut:
# ! /bin/sh
# bash script for listening local radio stream using mplayer
# created by mambang 2010 <
mambang@mambang.org.my>
# license GPL3
#
# Variables dimana file fifo perlu berada
# mplayer perlu dimulakan dalam mode slave
FIFO=~/.mplayer/fifo
PLAYER="mplayer -slave -idle -really-quiet -input file=$FIFO"
# kill sebarang mplayer yg sedang run
killall -9 mplayer 2>/dev/null
# function untuk memeriksa keujudan apps mkfifo serta file fifo
# bina file fifo jika belum ada. Exit jika apps fifo tiada.
# jika semua ok, teruskan ke function checkzenity
checkfifo () {
if [ -e $FIFO ]; then
checkzenity
else
if [ -e /usr/bin/mkfifo ]; then
mkfifo "$FIFO"
checkzenity
else
echo "Anda perlukan mkfifo. Sila install mkfifo"
exit 1
fi
fi
}
# Memeriksa keujudan zenity. Jika tiada, exit.
# Jika ujud, teruskan ke function checkplayer
checkzenity () {
if [ -e /usr/bin/zenity ]; then
checkplayer
else
echo "Maaf, anda perlu install zenity terlebih dahulu."
exit 1
fi
}
# Memeriksa keujudan mplayer. Jika tiada, exit.
# Jika ujud, teruskan ke function start_player.
checkplayer () {
if [ -e /usr/bin/mplayer ]; then
start_player
else
zenity --error --text="Maaf, anda perlukan mplayer.\nSila install mplayer."
exit1
fi
}
# Mulakan mplayer dalam mode slave pada background dan terus ke function gui
start_player () {
$PLAYER &
gui
}
# menggunakan zenity untuk gui
# guna option radiolist dengan 2 column untuk membuat pilihan
# teruskan ke function selection bila klik ok dengan membawa value $stesen
gui () {
stesen=$(zenity --title ".:: Radio Malaya ::." --list --text "Sila pilih stesen radio yang ingin didengar" \
--radiolist --column "Pilih" --column "Stesen" \
TRUE ERA-FM FALSE HITZ-FM FALSE MIX-FM FALSE RED-FM \
FALSE SINAR-FM FALSE XFRESH-FM FALSE MY-FM FALSE RADIO24-FM FALSE SABAH-FM \
FALSE LABUAN-FM FALSE KEDAH-FM FALSE GEGAR-FM FALSE NASYID-FM FALSE IKIM-FM \
FALSE EXPRESS-TAMIL FALSE MNET-FM FALSE LITE-FM FALSE RAAGA-FM FALSE SARAWAK-FM)
selection
}
# gui untuk maklumat stesen serta pilihan untuk exit atau hentikan mplayer
info () {
info=$(zenity --title ".:: Radio Malaya :: $stesen ::." --question --text "Anda sedang mendengar $stesen\n
Klik OK untuk hentikan radio\ndan kembali ke Menu.\n\nKlik Cancel untuk hentikan radio\ndan keluar."; echo $?)
}
# function untuk menghentikan mplayer atau matikan mplayer menggunakan arahan slave ke file fifo
control () {
info
if [ "$info" = "0" ]
then
echo "stop" > $FIFO
gui
else
echo "quit" > $FIFO
rm -f $FIFO
exit 1
fi
}
# function untuk mengubah volume mplayer menggunakan fifo
# timeout 20 saat ditetapkan untuk menutup volume control secara automatik
volume () {
vol=$(zenity --timeout 20 --scale --title ".:: Radio Malaya :: $stesen ::." --text "Gerakkan slider untuk tetapkan volume" --min-value=10 --max-value=100 --value=10 --step 2;echo $vol)
echo "volume $vol 1" > $FIFO
}
# function utama dimana value $stesen digunakan untuk mainkan stream menggunakan mplayer slave
# function volume serta info digunakan disini
selection () {
if [ "$stesen" = "ERA-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_ERA 1" > $FIFO
volume |
control
elif [ "$stesen" = "HITZ-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_HITZ 1" > $FIFO
volume |
control
elif [ "$stesen" = "MIX-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_MIX 1" > $FIFO
volume |
control
elif [ "$stesen" = "RED-FM" ]
then
echo "loadfile
http://75.125.106.156:9000/ 1" > $FIFO
volume |
control
elif [ "$stesen" = "SINAR-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_SINAR 1" > $FIFO
volume |
control
elif [ "$stesen" = "XFRESH-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_XFM 1" > $FIFO
volume |
control
elif [ "$stesen" = "MY-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_MYFM 1" > $FIFO
volume |
control
elif [ "$stesen" = "JAZZ-FM" ]
then
echo "loadfile
http://wm-tlrc.london.as34763.net/jazz1 1" > $FIFO
volume |
control
elif [ "$stesen" = "RADIO24-FM" ]
then
echo "loadfile
mms://stream.radio24.com.my/Radio24 1" > $FIFO
volume |
control
elif [ "$stesen" = "SABAH-FM" ]
then
echo "loadfile
http://124.82.220.54:3128 1" > $FIFO
volume |
control
elif [ "$stesen" = "LABUAN-FM" ]
then
echo "loadfile
http://grace.fast-serv.com:9854 1" > $FIFO
volume |
control
elif [ "$stesen" = "KEDAH-FM" ]
then
echo "loadfile
http://60.51.214.210:8000/ 1" > $FIFO
volume |
control
elif [ "$stesen" = "GEGAR-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_THRG 1" > $FIFO
volume |
control
elif [ "$stesen" = "NASYID-FM" ]
then
echo "loadfile
http://on.nasyid.fm:8000 1" > $FIFO
volume |
control
elif [ "$stesen" = "IKIM-FM" ]
then
echo "loadfile
http://210.48.148.126/ikim 1" > $FIFO
volume |
control
elif [ "$stesen" = "EXPRESS-TAMIL" ]
then
echo "loadfile
http://www.extamil.com/radio 1" > $FIFO
volume |
control
elif [ "$stesen" = "MNET-FM" ]
then
echo "loadfile
http://live.mnetfm.net:8080 1" > $FIFO
volume |
control
elif [ "$stesen" = "LITE-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_LITE 1" > $FIFO
volume |
control
elif [ "$stesen" = "RAAGA-FM" ]
then
echo "loadfile
mms://rs5.radiostreamer.com/AMP_THRR 1" > $FIFO
volume |
control
elif [ "$stesen" = "SARAWAK-FM" ]
then
echo "loadfile
http://124.82.221.149:8000 1" > $FIFO
volume |
control
else
echo "quit" > $FIFO
rm -f $FIFO
exit 1
fi
}
# mulakan script dengan function checkfifo
checkfifo
exit 0
Selamat mencuba.