Minggu, 08 Juli 2007

Sound System di Linux

Saat ini, sound system di Linux boleh dikata sedang masuk masa transisi. Standar masa depan adalah ALSA (Advanced Linux Sound Architecture). Namun masih banyak aplikasi yang belum mengadopsinya, sehingga standard lama seperti OSS, ESOUND, dan ARTS belum bisa ditinggal. Maka kita harus pintar-pintar mendamaikan mereka.

OPEN SOUND SYSTEM

Awalnya, sound di Linux disediakan oleh kernel dalam bentuk device driver mentah. Untuk memudahkan pemrogramannya, keluar standard yang namanya OSS. Standar ini menyediakan fasilitas untuk mengakses SATU sound device secara eksklusif. Artinya, kalau ada satu program yang sedang akses, maka program lain tidak akan bisa pakai.
[XMMS]---------------->[OSS]---------[device]
[MPlayer]---X (tidak bisa)

Kalau mau coba, silahkan jalankan XMMS, lalu dari menu preference, pilih output plugin OSS dan mainkan satu musik. Lalu secara bersamaan, coba jalankan MPlayer atau Xine untuk memainkan video. Macet deh.

ENLIGTENED SOUND DAEMON

Untuk mengatasi masalah diatas, keluarlah ESOUND yang arsitekturnya demikian:
[XMMS]-------------+--->[ESOUND]-------->[device]
[MPlayer]----------+
Di sini, semua program harus mengakses esound, tidak boleh langsung ke device. Dengan demikian, sinyal suara dari semua program akan di campur (mix) oleh Esound, sebelum diteruskan ke sound device. COba saja set XMMS dan MPlayer anda untuk pakai output esound, lalu mainkan musik dan video bersamaan. Bisa jalan kan ?

Ruginya pakai sound daemon seperti ini jelas ada. Coba perhatikan CPU load anda, pasti kerjanya akan lebih sibuk karena harus mencampus sinyal suara. Hal lain, kalau telinga anda cukup peka, kualitas suaranya akan turun.

ARTS

Arts adalah sound daemon-nya KDE (mungkin karena esound akhirnya diadopti gnome). Arsitektur dan carakejanya mirip seperti esound. Hanya saja, algoritma mixinnya beda. Karena itu kualitas suara arts lebih bagus sedikit dibanding esound, namun beban CPU-nya lebih besar.

ALSA

Ini dia jagoan masa depan. ALSA menyediakan fitur lengkap untuk akses sound device, termasuk efek 3D, surround, dll. Jadi asik kalau anda punya sound card canggih. Kalau sound card anda cuma seadanya, ya nggak papa. Fitur extranya ngangur.

ALSA ini begitu powerfull, sehingga teorinya, kita tidak perlu lagi OSS, Esound maupun Arts. Sayangnya, kenyataan dilapangan tidak begitu. Banyak masalah untuk transisi ke ALSA. Mari kita lihat.

ALSA DAN KERNEL

Di kernel seri 2.6, ALSA sudah built-in, dan tidak ada lagi OSS. Sementara itu di kernel 2.4, ALSA masih jadi driver tambahan (nama paketnya alsa-driver). Kalau anda mau pakai ALSA di kernel 2.4, driver OSS lama harus di-disable.
[program]-------->[ALSA]------->[device]
[OSS]--X (jangan dipakai)
Ada dua pendekatan. Cara pertama, rekompile kernel anda tanpa OSS. Cara lain, masukkan semua driver OSS kedalam daftar blacklist di sistem hotplug. Kalau anda tidak lalukan hal tersebut, sound anda bisa ngaco tak terduga.

ALSA DAN DMIX

DMIX adalah sound mixer sediaan ALSA yang fungsinya mirip seperti esound atau arts, yaitu untuk mencampur sinyal suara supaya bisa keluar berbarengan di satu device. Kelebihannya, DMIX lebih low level sehingga kalau sound card anda canggih dan menyediakan fasilitas mixing, DMIX bisa memakainya. Dengan demikian beban CPU dan kualitas suara akan sangat bagus. Kalau sound card anda bisa-biasa saja, ya apa boleh buat, mixingnya akan pakai CPU.
[XMMS]------>[ALSA]---+--->[DMIX]-->[device (+mixer)]
[MPlayer]--->[ALSA]---+

ALSA DAN OSS EMULATOR

Misalkan ALSA sudah terpasang bagus di Linux anda. Sekarang anda mau jalankan program lama yang ternyata cuma bisa standard OSS dan belum kenal ALSA, misalnya saja FlashPlayer (sebagai plugin di Firefox). Agar program ini bisa jalan, anda harus pakai ALSA OSS emulator.
[program tua]-------->[OSS emulator]----->[ALSA]--->[device]
Sayangnya OSS emulator ini benar-benar meniru OSS. Kalau ada program yang sedang pakai OSS emulator, maka program lain tidak akan bisa akses ke device, walaupun ALSA punya DMIX. Jadi kalau anda mau browsing situs flash, XMMS anda harus stop.

ALSA DAN ESOUND

Esound terbaru kini bisa bekerja sama dengan ALSA. Yang asik, esound mengakses lapis atas (high layer) ALSA sehingga DMIX masih bisa berfungsi.

Ini sangat berarti sebab banyak program tua ternyata bisa akses esound. Misalnya saja FlashPlayer dan IceWM (light window manager). Kalau anda belum tahu, IceWM punya efek suara yang keluar lewat OSS atau Esound. Dengan mengkonfigurasi esound pakai ALSA, kita bisa punya arsitektur demikian:

[IceWM]--------+-->[esound]--+-->[ALSA]--->[DMIX]--->[device]
[FlashPlayer]--+ |
[XMMS]-----------------------+
[MPlayer]--------------------+
Perhatikan disini, XMMS maupun MPlayer langsung akses ke ALSA. Sementara itu IceWM dan FlashPlayer akses ke esound, kemudian diteruskan ke ALSA. Semua sinyal akan tercampur dan anda bisa dengar ributnya :)

ALSA, ESOUND, DAN ARTS

Oke, ini dia yang bikin judeg seminggu. Kalau anda pakai KDE, sound daemon yang otomatis dipakai adalah ARTS. Gombalnya, ARTS ini mirip seperti OSS. Dia mengklaim sound device secara eksklusif, program lain harus akses lewat ARTS. Ini tidak masalah sih kalau kita cuma main-main bangsa noatun, atau kbodle (KDE mulimedia) yang memang peduli ARTS. Tapi buat program XMMS atau MPlayer, maksa lewat ARTS sama saja seperti ikut birokrasi yang bertele-tele. Sementara itu FlashPlayer, tidak kenal ARTS sama sekali.

Buat mengakalinya, cara standard adalah memendekkan masa klaim ARTS, misalnya 10 detik. Jadi kalau ARTS tidak terpakai selama 10 detik, sound device akan dibebaskan. Saat itu program lain akan bisa mengakses sound device secara langsung. Kalau mau coba, cari KDE control center, sound system, terus set "Auto-suspend if idle after ...".

Sayangnya cara auto-suspend pendek itu tidak reliable. Kadang jalan, kadang tidak. Setelah dicari-cari lagi, ternyata ARTS bisa diatur sound-devicenya (back-end). Asiknya, ternyata dia bisa pakai ALSA maupun Esound sebagai back-end. Kesempatan nih, mari coba ide gelo ini. Set ARTS untuk pakai esound, sementara itu esound pakai ALSA. Ditambah games berbasis SDL (Simple DirectMedia Layer), konfigurasinya jadi seperti ini:

[KDE]------+-->[ARTS]-+->[Esound]-+->[ALSA]-->[DMIX]-->[device]
[Kafeine]--+ | |
[FlashPlayer]---------+ |
[XMMS]----------------------------+
[MPlayer]-------------------------+
[Xine]----------------------------+
[Games]------->[SDL Mixer]--------+
Nah lho ... mabok nggak tuh !
Ini dia shot konser bareng KDE + MPlayer + Xine + Kaffeine + XMMS + Konqueror (Flash) + Firefox (Flash) + Games di Vector Linux SOHO 5.0.

Jadi, begitulah. Saya puas karena sekarang semua program audio bisa jalan barengan. Namun dalam hati, saya berdoa semoga sound system di Linux ini bisa cepat transisi ke 100% ALSA, biar nggak semrawut dan makan banyak waktu CPU seperti ini.

Tidak ada komentar: