UNIVERSITAS
GUNADARMA
FAKULTAS ILMU KOMPUTER
SEGMENTASI MELALUI DETEKSI ONSET SUARA
DISUSUN OLEH NAMA
: Moh.Iman Lukman Nulhakim
NPM
: 22101460
FAKULTAS
: Ilmu Komputer
JURUSAN
: Sistem Komputer
PEMBIMBING
: 1. Irwan Arifin., SSi., MMSI 2. Nurul Huda., Skom.,MT
Diajukan untuk melengkapi sebagian syarat dalam mencapai gelar Sarjana Strata Satu (S1) Jakarta 2006
ABSTRAKSI Proses segmentasi pada penelitian ini merupakan suatu proses pemotongan sinyal suara berupa potongan lagu menjadi segmen-segmen kecil. Setiap segmensegmen yang dihasilkan masing-masing hanya berisi satu nada / not. Penelitian segmentasi ini di lakukan dengan menggunakan program Matlab. Proses segmentasi sendiri terdiri atas beberapa subproses : rectifying, enveloping, differentiation, tresholding, dan segmentasi. Empat subproses pertama berfungsi untuk menentukan posisi onset (kemunculan) not. Pelacakan posisi onset dilakukan dengan mencari garis-garis curam (hasil enveloping). Garis curam dicari dengan melacak posisi gradien-gradien (hasil diferensiasi) yang bernilai tinggi. Posisi onset yang diperoleh digunakan sebagai tanda di mana pemotongan sinyal akan dilakukan. Pada subproses segmentasi terjadi pemotongan sinyal menjadi segmen-segmen kecil yang terdiri dari satu not. Setelah selesai melakukan percobaan terhadap 30 data sampel dapat diambil kesimpulan bahwa rata-rata persentasi akurasi program Matlab yang digunakan dalam penelitian Segmentasi Melalui Deteksi Onset Suara dalam penelitian ini sebesar 86,14 % Kata Kunci : rectifying, onset, enveloping, diferentiation, tresholding, segmentasi
Pendahuluan Sistem pendengaran manusia memiliki struktur yang sangat kompleks dan memiliki kemampuan yang luar biasa. Salah satu kemampuan sistem pendengaran manusia diantarannya dapat mendeteksi kapan suatu not mulai dibunyikan. Dengan perkembangan sistem komputer yang semakin canggih, salah satu kemampuan sistem pendengaran tersebut dapat diimpementasikan ke dalam komputer dengan menggunakan MATLAB. Penulisan program yang cerdas, yang bisa membuat sistem yang dapat mendeteksi kapan suatu not mulai dibunyikan akan membutuhkan teknik tertentu, sehingga kecerdasannya dapat menyerupai indera pendengaran manusia. Sesungguhnya dengan perkataan lain, penulis ingin membuat suatu program yang memiliki kemampuan pemrosesan informasi pola yang sama seperti yang dimiliki oleh manusia khususnya indra pendengaran (telinga) yang dapat mendeteksi kapan suatu not mulai dibunyikan. Segmentasi pada penelitian yang penulis lakukan adalah proses pemotongan sinyal menjadi segmen-segmen kecil yang terdiri dari satu not.
Proses segmentasi pada penelitian yaitu dengan menggunakan program MatLab. Data sampel untuk data suara dibuat menggunakan software gitar pro dan dirubah dalam bentuk wav. Frekuensi nada standar A5 (440 Hz) dapat diatur dalam rentangan (415,3 - 466,2)Hz. Data dibuat dalam bentuk file MIDI untuk kemudian dirubah ke dalam format WAV (44,1 kHz, 16 bit) yang bersifat mono. Metodologi, Hasil dan Pembahasan Segmentasi pada penelitian yang penulis lakukan adalah proses pemotongan sinyal menjadi segmen-segmen kecil yang terdiri dari satu not. Proses segmentasi pada penelitian yaitu dengan menggunakan program MatLab. Proses segmentasi sendiri terdiri dari beberapa subproses, seperti pada struktur diagram alur program pada gambar 1. dibawah ini: Data Suara (file wave)
Rectifying
Enveloping
Differentiation
Tresholding
Segmentation
Gambar 1. Struktur diagram alur program
Pada empat subproses pertama(rectifying, enveloping, differentiation, tresholding) berfungsi untuk menentukan posisi onset (kemunculan) not. Pelacakan posisi onset dilakukan dengan mencari garis-garis curam (hasil enveloping). Garis curam dicari dengan melacak posisi gradien-gradien (hasil diferensiasi) yang bernilai tinggi. Posisi onset yang diperoleh digunakan sebagai tanda di mana pemotongan sinyal akan dilakukan. Pada subproses segmentasi terjadi pemotongan sinyal menjadi segment-sement kecil yang terdiri dari satu not. Rincian tentang proses segmentasi melalui deteksi onset suara dapat dilihat pada bagian-bagian berikut: Data Suara Pada eksperimen Segmentasi Melalui Deteksi Onset Suara ini, data yang digunakan berupa data suara musik yang pengambilan datanya menggunakan software gitar pro dan dirubah dalam bentuk wav. Data suara yang digunakan dalam eksperimen ini mempunyai batasan-batasan :
Data yang digunakan tidak satu lagu full tetapi hanya bagianbagian tertentu
Data suara musik atau potongan lagu yang digunakan sebagai data berbentuk midi yang dirubah ke dalam bentuk wave
Data suara berbentuk suara mono (44,100 kHz; 16 bit; mono)
Data musiknya tanpa menggunakan Vokal
Suara yang dipakai sebagai input/masukan dalam penelitian deteksi onset suara yang penulis kerjakan adalah suara yang sederhana (penulis menggunakan input suara tangga nada yaitu do, re, mi ,fa, sol, la, si, do dimainkan dengan menggunakan instrumen gitar) dengan bentuk file wave yang diberi nama ‘hkm.wav’. Inputan suara ini dipanggil dengan menggunakan program Matlab dengan perintah seperti dibawah ini: [d,fs,bits]=wavread('hkm.wav'); clc; figure(1); plot(d);
Variabel d pada perintah diatas menyatakan data suara berupa matrik (N x I), dimana N menyatakan jumlah sampel dan I menyatakan waktu atau jarak. Sebagai contoh : Diketahui potongan lagu berdurasi selama 2 detik dan mempunyai sampling rate sebesar 44,1 kHz. Maka dapat dinyatakan bahwa potongan lagu tersebut mempunyai data suara sebesar 44,1 kHz*2 s*2byte = 176,4 kbyte ........................................ (1) variabel
fs di atas menyatakan sampling rate, dan sampling rate yang
penulis gunakan dalam penelitian sebesar 44,1 kHz. Untuk variabel bits pada program di atas menyatakan resolusi, penulis menggunakan resolusi pada penelitian ini sebesar 16 bit. Sedangkan perintah waveread untuk membaca file wav yang terdapat pada kurung, yang pada penelitian ini penulis menggunakan nama file hkm.wav. Output yang dihasilkan berupa bentuk gelombang seperti pada gambar 2 dibawah ini
Gambar 2 Visualisasi getaran suara yang tersimpan dalam data dari file hkm.wav Rectifying Pada bagian rectifying, suara yang telah dirubah ke dalam bentuk gelombang (gambar 2) diproses untuk diambil nilai absolut atau nilai mutlaknya. Pada proses ini data yang bernilai negatif dirubah menjadi bernilai positif. Proses rectifying ini dilakukan agar data yang diamati atau diteliti tidak ada yang bernilai negatif atau bernilai positif, sehingga mudah dalam proses perhitungan. Ekspresi matematik untuk rectifying adalah:
X = │d│ ......................................................................
(2)
Rectifying menggunakan program dalam MatLab seperti dibawah ini: [d,fs,bits]=wavread('hkm.wav'); clc; x=abs(d); figure(2); subplot(2,1,1);plot(d); subplot(2,1,2);plot(x);
Gambar 3.Gambar hasil rectifying dari data suara Dengan data input suara yang sama, apabila program Matlab-nya dijalankan akan menghasilkan output seperti pada gambar 3.3. Gambar bagian atas merupakan input data suara, sedangkan gambar bagian yang bawahnya merupakan hasil rectifying dari gambar yang diatasnya (input data suara). Enveloping Enveloping yaitu proses mengambil nilai-nilai puncak dari gelombang hasil rectifying dari data suara. Enveloping dengan kata lain mengambil bagian yang terluar dari gambar. Enveloping menggunakan program matlab seperti dibawah ini: N = 10; wavename = 'db3' [C,L] = wavedec(x,N,wavename); A = abs(appcoef(C,L,wavename,N)); figure(3); subplot(2,1,1);plot(x); subplot(2,1,2);plot(A) B=zeros(1,length(A)); C=zeros(1,length(A));
Program diatas menggunakan wavelet pada Matlab. N pada program di atas harus selalu bilangan bulat positif, karena N merupakan jumlah pengulangan wavelet. Sedangkan db3 merupakan ketetapan untuk nama spesifikasi wavelet. Wavedec merupakan analysis wavelet yang menggunakan suatu wavelet spesifik 'wname' atau suatu spesifik satuan wavelet decomposition filters. Koefisien dari semua komponen suatu penguraian digabungan ke dalam satu garis vektor C. Garis vektor L merupakan panjangnya dari tiap komponen. A=appcoef(C,L,'wavename',N) menghitung koefisien perkiraan pada tingkatan N menggunakan wavelet struktur penguraian [C,L]. Wavename adalah suatu string yang berisi nama wavelet.
Gambar 4. Gambar hasil enveloping dari hasil rectifying Differentiation Pada bagian differentiation, pelacakan posisi onset dilakukan dengan mencari garis-garis curam pada hasil enveloping. Garis curam dicari dengan menghitung posisi gradien-gradien. Perhitungan secara matematis untuk mencari gradien dengan menggunakan persamaan: m=
∆γ ............................................................................(3) ∆χ
γ ( n +1) − γ ( n ) ............................................................. (4) χ ( n +1) − χ ( n ) karena χ ( n +1) − χ ( n ) = 1 , maka : m=
m = γ ( n +1) − γ ( n ) ................................................................(5)
Differentiation dalam matlab menggunakan perintah seperti
dibawah ini: buff = abs(diff(A)); B(1:length(buff))=buff; figure(4); subplot(2,1,1);plot(A); subplot(2,1,2);plot(B);
pada gambar 5 yang merupakan output dari program diatas dapat terlihat jelas garis-garis curam yang merupakan hasil differentiation.
Gambar 5. Gambar hasil differentiation Tresholding Pada bagian tresholding, hasil dari differentiation ditentukan nilai tiap frekwensi yang memiliki nilai tinggi. Tiap nilai frekwesi tinggi yang diperoleh akan dijadikan acuan untuk mendeteksi posisi dari onset. Program tresholding yang digunakan dalam matlab seperti dibawah ini: treshold = 0.25; LC = length(C); for i=1 : length(C), if C(i) < treshold C(i) = 0; end; end; figure(5); subplot(2,1,1);plot(B); subplot(2,1,2);plot(C);
Output dari program rectifying setelah di eksekusi atau dijalankan adalah seperti pada gambar 6 dibawah ini
Gambar 6. Gambar hasil tresholding Segmentation Pada bagian segmentasi atau bagian akhir dari segmentasi melalui deteksi onset suara, posisi onset yang diperoleh digunakan sebagai tanda di mana pemotongan sinyal akan dilakukan, seperti pada gambar 8 dan membentuk beberapa segmen dengan menggunakan program matlab Mulai St=1 Number=0 i=1 Lc Adjust=5
i < LC
i=i+1
C(i) > 0 Stop=i [Y,I]=max(C(st:stop))
Number=number+1 Peak(number)=1+(st+I-adjust)*2^N St=stop
Gambar 7 Flowchart segmentasi
Selesai
st = 1; number = 0 % i = 1; LC adjust = 5; while i < LC, if C(i)>0 while C(i)>0, i=i+1; end; stop = i; [Y,I]=max(C(st:stop)); number=number + 1; peak(number) = 1+(st+I-adjust)*2^N; st = stop; else i=i+1; end end number peak for i = 1 : (number-1), subplot(4,8,i);plot(d(peak(i):peak(i+1))); end subplot(4,8,number);plot(d(peak(number):length(d)));
Program diatas bekerja dengan membaca output dari tresholding. Program menganalisa tiap detail pada sumbu x dari output tresholding. Setiap ada frekwensi (sumbu y) yang nilainya positif (>0) akan mencatatnya sampai kembali ke 0 sebagai posisi awal dari onset suara. Setelah selesai menganalisa dan mendapatkan posisi itu, lalu program kembali ke data awal dan melakukan pemotongan data mengacu pada posisi onset suara yang telah didapatkan pada program diatas. Gambar 8 merupakan output dari program segmentasi diatas.
gambar 8. Gambar segmentasi onset suara Percobaan Dengan Menggunakan 30 Data Sampel Untuk mengetahui tingkat keakuratan dari program segmentasi melalui deteksi onset suara yang penulis gunakan, maka dilakukan percobaan dengan menggunakan 30 data sampel yang diambil secara acak. Data sampel yang digunakan adalah suara tangga nada yang dibunyikan secara random (acak). Percobaan tersebut dapat dilihat pada table 1 dibawah ini. Tabel 1 Percobaan Dengan 30 Data Sampel Nama
Hasil
Persentasi
file(.wav)
(segmen)
Akurasi
1–2–3–4–5–6–7-i
Hkm1
9
88,89 %
2
2–3–4–5–6–7–i-1
Hkm2
11
72,73 %
3
3–4–5–6–7–i–1-2
Hkm3
8
100 %
4
4–5–6–7–i–1–2-3
Hkm4
10
80 %
5
5–6–7–i–1–2–3-4
Hkm5
8
100 %
6
6–7–i–1–2–3–4-5
Hkm6
8
100 %
7
7–i–1–2–3–4–5-6
Hkm7
10
80 %
8
i–1–2–3–4–5–6-7
Hkm8
9
88,89 %
9
i–7–6–5–4–3–2-1
Hkm9
8
100 %
10
7–6–5–4–3–2–1-i
Hkm10
8
100 %
11
6–5–4–3–2–1–i-7
Hkm11
12
66,67 %
12
5-4–3–2–1–i–7-6
Hkm12
9
88,89 %
13
4–3–2–1–i–7–6-5
Hkm13
12
66,67 %
No.
Data tangga nada acak
1
14
3–2–1–i–7–6–5-4
Hkm14
9
88,89 %
15
2–1–i–7–6–5–4-3
Hkm15
10
80 %
16
1–i–7–6–5–4–3-2
Hkm16
9
88,89 %
17
1–3–4-5–6–7–i-2
Hkm17
11
72,73 %
18
1–4–5–6-7–i–2-3
Hkm18
11
72,73 %
19
1–5–6–7–i–2–3-4
Hkm19
10
80 %
20
1–6–7–i–2–3–4-5
Hkm20
8
100 %
21
1–7–i–2–3-4–5-6
Hkm21
9
88,89 %
22
1–i–2–3–4–5-6-7
Hkm22
8
100 %
23
2–1–3–4–5–6–7-i
Hkm23
9
88,89 %
24
2–1–4–5–6–7–i-3
Hkm24
10
80 %
25
2–1–5–6–7–i–3-4
Hkm25
8
100 %
26
2–1–6–7–i-3–4-5
Hkm26
10
80 %
27
2–1-7–i–3–4–5-6
Hkm27
10
80 %
28
2–1–i–3–4–5–6-7
Hkm28
9
88,89 %
29
3–1–2–4–5–6–7-i
Hkm29
9
88,89 %
30
3–1–4–5–6–7–i-2
Hkm30
11
72,73 %
Rata-rata persentasi akurasi
86,14 %
Tabel 1 diatas yaitu membandingkan jumlah not sebagai masukan dengan jumlah segmen yang dihasilkan, dimana setiap segmen yang dihasilkan terdiri dari satu not atau nada. Untuk menghitung persetasi akurasi digunakan persamaan : Persentasi Akurasi =
jumlah data masukan ×100 % ............... (6) jumlah segmen hasil
karena penulis menggunakan jumlah data masukan semuanya 8, maka perhitungan diatas (6) menjadi : Persentasi Akurasi =
8 ×100 % jumlah segmen hasil
....................(7)
Sebagai contoh dalam perhitungannya, untuk percobaan no.1 dengan nama file Hkm1.wav, maka perhitungan untuk
persentasi
akurasinya sebagai berikut : diketahui untuk jumlah segmen hasil = 9 segmen, maka :
Persentasi Akurasi =
8 ×100 % 9
persentasi Akurasi = 88,89 % Perhitungan yang sama dilakukan untuk mencari nilai persentasi akurasi pada percobaan No yang lainnya dengan menggunakan persamaan 7 diatas. Hasil dari perhitungannya dapat dilihat tabel 1 diatas. Setelah
nilai
persentasi
akurasi
semua
didapatkan,
maka
keakuratan program yang digunakan penulis dalam penelitian segmentasi melalui deteksi onset suara dapat dihitung dengan mencari rata – rata persentasi akurasi dari tabel 1 diatas. Perhitungan untuk rata-rata persentasi akurasi dengan menggunkan persamaan dibawah ini : % Akurat =
jumlah hasil persentasi akurasi jumlah data percobaan
.............(8)
jumlah hasil persentasi akurasi = 2584,27 % dan jumlah data yang digunkan 30 sampel data, maka : % Akurat =
2584 , 27 % 30
% Akurat = 86 ,14 % Persentasi Keakuratan = 86,14 %
Kesimpulan Dari penelitian segmentasi melalui deteksi onset suara dapat diambil kesimpulan bahwa program yang digunakan berjalan dengan baik. Hal tersebut dapat dilihat dengan diperoleh output berupa segmen-segmen yang masingmasing terdiri dari satu nada/not. Percobaan dilakukan dengan menggunakan 30 data sampel berupa potongan lagu yang dalam hal ini penulis menggunakan suara tangga nada (do, re,
mi, fa, sol, la si, do) secara acak (random) yang terdiri dari 8 buah nada/not. Percobaan tersebut dilakukan untuk mencari persentasi akurasi tiap data sampel yang dimasukan ke dalam program sebagai input. Setelah selesai melakukan percobaan terhadap 30 data sampel dapat diambil kesimpulan bahwa rata-rata persentasi akurasi program Matlab yang digunakan dalam penelitian Segmentasi Melalui Deteksi Onset Suara dalam penelitian ini sebesar 86,14 %.
Daftar Pustaka 1. Djohan, "Psikologi Musik", Penerbit Buku Baik, Yogyakarta, 2005 2. Jim
Heckroth,
"MIDI
and
Music
Synthesis",
Http://www.harmony-
central.com/MIDI/Doc/tutorial.html, 18 Februari1995 3. Jimmy Wales, "Suara", Http://Id.Wikipedia.Org/Wiki/Suara , 13 Mei 2006 4. Joha G. Proakis, Dimitris G. Manolakis, "Pemrosesan Sinyal Digital Prinsip, Algoritma, Dan Aplikasi", PT. Prenhallindo, Jakarta, 1995 5. Jong Jek Siang, "Jaringan Syaraf Tiruan & Pemrogramannya Menggunakan MATLAB", Penerbit Andi, Yogyakarta, 2005 6. Michel Misiti, Yves Misiti, Georges Oppenheim, Jean-Michel Poggi, Wavelet Toolbox For Use With Matlab, the math works. Inc, 1992 7. Sri Kusuma Dewi, "Membangun Jaringan Syaraf Tiruan Menggunakan MATLAB & EXEL LINUX", Graham Ilmu, Yogyakarta, 2004