Oleh Maxin B. John dan Rajith R, LG#109. Bahasa Indonesia oleh M.H. Mubarok aka. Arok/Warok Nggalek.
Artikel ini didedikasikan untuk setiap orang yang berharap suatu hal yang tidak biasa. Dalam hal ini, Linux mensuppot sebagian besar soundcard yang populer. Jika anda tidak mempunyai soundcard, anda tetap bisa mendengarkan musik (mungkin terdengar kurang enak) dari parallel port pada PC anda.
Pada artikel ini, kita akan mencoba membahas salah satu cara menghasilkan output suara tanpa menggunakan sebuah sound card.

Spesifikasi
Dalam percobaan ini, kami menggunakan Pentium 4 1,6GHz. Diinstal dengan distribusi Linux PCQLinux 2004, yang dibangun atas platform Fedora. Pada bagian hardware elektronik, kami menggunakan beberapa resistor, sebuah konektor paralel port dan kabel untuk menghubungkan antar komponen elektronik tersebut.
Apakah driver sound card itu?
driver sound merupakan karakter devais yang biasanya dinotasikan dengan “/dev/dsp”. Semua aplikasi suara seperti mpg123, Mplayer, dan sebagainya, biasanya menggunakan driver sound langsung untuk mengoutputkan suara digital tersebut pada perangkat. DAC (Digital to Analog Converter) yang digunakan pada percobaan ini adalah Port Paralel. Port ini perangkat serba guna yang mengkonversi bilangan biner 1 dan 0, ke dalam tegangan real yang berupa analog, yang akan dikoneksikan pada speaker pada komputer kita.
Memahami devais driver
ada dua tipe perangkat yang diidentifikasi oleh sistem Linux: karakter devais dan block devais. Karakter devais tidak memerlukan buffering untuk melakukan unjuk kerja, sedangkan block devais diakses melalui cache (penerj. penyimpanan sementara). Block devais hanya diakses secara random (acak), sedangkan pada karakter devais tidak perlu acak. Filesistem hanya dapat dimount jika filesystem tersebut berada pada blok devais.
Untuk karakter devais, pada filesistem biasanya direpresentasikan pada direktori “drivers/char/”, sedangkan untuk block devais disimpan di “/drivers/block/”. Antara keduanya memiliki interface yang sangat mirip, jika tidak ingin dikatakan sama; kecuali pada pembacaan dan penulisan (read write). Karena perbedaan pembacaan dan penulisan tersebut, inisialisasinya pun akhirnya berbeda. Block devais meregister sebuah rutin tertentu, yang diregisterasikan pada jalur yang berbeda daripada rutin “parsp_read” dan “parsp_write” dari driver karakter devais.
Sekarang, jika anda mempunyai file a.wav dengan yang merupakan format spesifik, misalnya 16-bit, stereo, raw pcm, agar file tersebut dapat dijalankan pada perangkat sound system kita bisa membuka node “/dev/dsp” menggunakan system call “open”, dan membuka file .wav anda, membaca block data dari file .wav, dan menuliskannya pada titik “/dev/dsp” menggunakan system call read() dan write() secara berurutan.
Kemampuan untuk mengunload modul merupakan salah satu fitur yang paling berguna dari modulasi, karena ini akan membantu mengurangi waktu pengembangan, anda dapat mengetes versi yang sukses dari driver anda yang baru tanpa harus shutdown atau reboot setiap kali mengadakan perubahan.
Bermain-main dengan Modul
Kompilasi modul kernel dilakukan oleh kompiler gcc menggunakan make file:
gcc -c &1 -O2 –Wall –DMODULE -D__KERNEL__ -I /usr/src/linux(your kernel version)
output dari kompilasi di atas adalah sebuah modul yang dapat dimasukkan ke dalam kernel untuk menghasilkan suara. Driver kita, dinamai dengan “parsp.o”, dapat dimasukkan ke dalam kernel yang sedang berjalan menggunakan perintah:
insmod -f parsp.o
sedangkan untuk membuangnya dari kernel menggunakan perintah:
./install.sh 203
Catatan: 203 merupakan nomer spesifikasi mayor pada driver kita, sehingga semua aplikasi yang menggunakan “/dev/dsp”, seperti mpg123, Mplayer. Xmms, dan sebagainya. Akan menggunakan driver kita untuk menghasilkan output suara.
Tetapi kita tahu bahwa kita tidak dapat melupakan masa lalu kita, sehingga untuk mengembalikan setting system pada setting yang sebelumnya dengan cara mendelete “/dev/dsp” yang dibuat dengan skrip install.sh dan membuat kembali file /dev/dsp yang asli yang mempunyai nomer rilis mayor 14 dan nomer liris minor 3.
mknod /dev/dsp c 14 3
Tidak lupa juga konekkan ulang tancapan speaker ke jack output dari souncard anda. Pengalaman penulis, perlu tiga hingga empat kali percobaan untuk menguji sound dari sistem dan kami pun terkagum-kagum karena tidak ada suara apapun yang keluar dari souncard yang asli dari sistem kami. (penerj.)Hebat bukan!
ioctls:
System call ioctl(), kependekan dari input output control, digunakan oleh /dev/dsp untuk berkomunikasi dengan device driver. Ada kesepakatan yang telah diakui bersama dalam sistem Linux, dan telah diikuti oleh ratusan device driver dari bagian kernel.
Implementasi ioctl() merupakan bagian yang paling membosankan dari project ini. Daftar semua ioctl dari soundcard dapat dilihat di souncard.h dengan menggunakan perintah:
man ioctl_list
dari percobaan ini, telah dicoba berbagai level variasi penggunaan ioctl yang digunakan untuk memainkan file musik, dengan musik player yang bervariasi. Dari berbagai macam musik player tersebut, Mplayer adalah yang paling banyak kesulitan. Meskipun kami dapat memainkan musik menggunakan Mplayer, support untuk itu tidak lengkap untuk saat ini.
Suara dari “Port Ajaib”
Standart Parallel Port dari komputer berjumlah 25 pin. Signal disediakan pada paralel port ialah 0 Volt, yang merupakan representasi dari logika 0, dan +5 Volt merepresentasikan logika 1. Port ini, merupakan port yang paling mudah dari komputer, yang dapat mengontrol berbagai macam peralatan.
Meskipun paralel port berisi 25 pin, kita akan memfokuskan perhatian pada pin data 8 (pin ke 2-9) dan pin ground (pin 18-25), karena hanya pin tersebutlah yang nantinya akan kita gunakan.
Cara yang biasa digunakan untuk menginstruksikan paralel port adalah menggunakan cara lama tetapi masih tokcer untuk digunakan, yaitu; menggunakan instruksi outb(). Pada driver yang kami gunakan, byte kirimkan ke paralel port menggunakan:
outb(b, 0x378);
Jadi, jangan kemana-mana, tetap duduk di depan komputer dan lakukan hal yang mengasikkan dengan paralel port dari komputer anda. Tetapi jangan menyalahkan kami jika anda membakar komputer anda, hati-hati dan berfikir santailah.
Mendalami Listing Program:
Seperti yang telah diterangkan diawal, bit 1 wakili tegangan 5V dan bit 0 diwakili 0V. Keajaiban diperlukan untuk membuat tegangan yang sesuai dengan tingkatan di atas, yang dilakukan rangkaian resistor yang dihubungkan dengan output paralel port. Tingkatan voltase yang bervariasi di atas digunakan untuk mengeluarkan output suara yang terdengar manusia ketika dihubungkan dengan input speaker. Ketika kita bereksperimen dengan rangkaian menggunakan kode yang diberikan dibawah ini dengan bantuan multimeter, kita akan mendapatkan hasil seperti berikut:
(versi teks: test.c.txt)
#include<asm/io.h>
main()
{
iopl(3);
int b;
printf("Enter the value of b:n");
scanf("%d",&b);
outb(b,0x378);
}
Jangan lupa untuk mengkompil kode di atas menggunakan parameter optimalisasi, contoh:
cc filename.c -O2
For b=0 Output voltage = 0v For b=255 Ourput voltage = 3.8v For b=240 Output voltage = 2.1v
Nilai-nilai di atas didapatkan dengan cara menghubungkan ground dari port paralel dan output dari rangkaian resistor (pin 1 dan pin 2 dihubungkan bersama-sama). Nilai-nilai di atas sangat dimungkinkan bervariasi dari satu komputer dengan komputer yang lain, jadi tidak perlu khawatir jika tidak mendapatkan nilai yang sama dengan yang tertera di atas. Kualitas output dapat ditingkatkan dengan cara menggunakan rangkaian yang lebih kompleks seperti amplifier dan filter. Pada kesempatan ini, kami tidak akan menjelaskan hal tersebut karena akan menambah biaya pada bagian hardware rangkaian.
Kode yang menampilkan fungsi inti dari fungsi tersebut ditampilkan pada pcsp_write().
count= (count < 44100 ? count : 44100);
if(copy_from_user((void *)data_buffer,buf,count))
return -EFAULT;
canplay =1;
for(v=0;v<count;v++) //loops till the end of the buffer
{
b=buf[v];
outb(b,0x378); // Writes those bytes to the parallel port
for(i=0;i<loop;i++); //loops to adjust the speed of playback
}
Pertama, musik player seperti mpg123 membuka perangkat /dev/dsp melalui pcsp_open() dan mengumpulkan informasi dari karakter file tersebut (contohnya, besar buffer, mono atau stereo, nomer channel, dan sebagainya) menggunakan parsp_ioctl(). Selanjutnya, menuliskan potongan-potongan yang telah terbagi-bagi berdasarkan ukurannya tersebut pada buffer dari devais driver. Byte per byte dari buffer kemudian ditransfer ke paralel port:
outb(b, 0x378);
Perulangan selanjut penting dilakukan karena perulangan tersebut mengontrol kecepatan playback.
for(i=0;i<loop;i++);
nilai dari perulangan ini harus berubah untuk menyesuaikan kecepatan prosesor pada setiap komputer. Proses ini terus dilakukan sampai akhir dari file musik tersebut. Pada bagian ini count menjadi nol dan software musik player menutup perangkat dengan memanggil parsp_close().
Pada bagian init_module(), kita menganalisa variabel yang digunakan dalam kode tersebut. modul tersebut diregistrasikan dengan:
major=register_chrdev(major,name,&parsp_fops);
memori untuk buffer digunakan pada driver dialokasikan oleh:
data_buffer= (long) kmalloc(44100, GFP_KERNEL);
sedangkan pada cleanup_module(), memori yang dialokasikan untuk driver dibebaskan dengan:
kfree((void *) data_buffer);
modul dibuang dari kernel dengan perintah:
unregister_chrdev(major,name);
Listing Program
parsp.c make install.sh uninstall.sh
Gambar Rangkaian
koneksi ke jack speaker bisa dilihat pada gambar di bawah ini. Resistor yang digunakan adalah 1k ohm, ¼ watt resistor. Jika nilai yang sama tidak ada, coba dengan nilai yang paling mendekati. Nilai pada rangkaian ini terlalu sensitif.
Hubungan dari Port Paralel

Hubungan ke Speaker

Santai saja ![]()
Setelah semua kesusahan dan waktu yang diperlukan untuk membangun perangkat, sekarang nikmatilah hasil kerja keras kita. Linux mengetes devais driver dengan menggunakan perintah ‘cat’:
cat ding.wav > /dev/dsp
apakah anda mendengar sesuatu? Ya, semoga terdengar. Sekarang kita naik pada level selanjutnya, yaitu memainkan file mp3 dengan menggunakan mpg123
mpg123 dingdong.mp3
terdengar? Selamat menikmati musik kesukaan anda! Cobalah dengan berbagai player seperti Mplayer, xmms, dan sebagainya.
Lagi…lagi….
Perjalanan kita dengan port paralel tidak berhenti disini. Sebuah ide yang cukup berani adalah membuat dan mengontrol air mancur kecil di ruang tamu, yang akan menari-nari ketika musik dijalankan dari komputer.
Silakan menghubungi kami jika mempunyai ide gila menggunakan port paralel.
Kesimpulan
Kami mencoba untuk mempersembahkan hal kecil tentang port paralel pada komputer anda dengan hal-hal yang menyenangkan. Modul ini merupakan software yang bagus untuk penggunaan ini. Harap diperhatikan, anda mungkin ketagihan dengan “suara-suara digital” yang dihasilkan software ini.
Kami akan berterimakasih sekali kepada pembaca yang memberitahukan error atau inkonsistensi pada software ini, jika ada. Kami sangat menanti pendapat dari anda.
Bacaan Selanjutnya
Buku wajib untuk pengembang kernel, Linux Kernel Development by Robert Love.
Artikel yang menginspirasi petualangan ini “Creating a Kernel Driver for the PC Speaker” by Cherry George Mathew.
teguh responded on 29 Okt 2009 at 6:58 pm #
bahasan yg sangat menrik dan manantang untuk dicoba,…
thx bgt mas.
oya,… saya ada tugas niihh….
bikin selector untuk 3 jenis bit yg berbeda??? gmana ya>?? bisa dari jallur paralel juga g?
unt sampling audio nya menngunakn cooledit pro ato adobe audition, ntar jalur komunikasinya harus bisa mengarahkan tipe apa yg masuk (8 bit, 16bit, ato 32 bit) untuk kemudian dipisahkan ke 3 out.
jika dikirim yg 8 bit, diarahkan ke out yg 8bit.]
jika dikirim yg 16bit, diarahkan ke out yg 16bit, dst.
jadi ada 3 out untuk meerjemahkan jenis bit masing2…
thanks berat untuk pencerahannya….
teguh palembang,
dwijayateguh@yahoo.com