[DIGITAL SIGNAL PROCESSING

]

November 6, 2011

HOW TO CREATE ECHO IN AUDIO USING MATLAB

Artikel ini hanya selingan saja ketika membaca pertanyaan dalam sebuah grup bagaimana caranya untuk menghasilkan gema (echo) audio dengan menggunakan program Matlab. Untuk itu saya mencoba untuk membuat sebuah program sederhana demi memenuhi hasrat keingintahuan saya juga. Pada dasarnya tidak terlalu susah membuat program ini. Yang harus kita lakukan adalah melakukan perubahan pada matriks asli. Matriks asli merupakan isyarat (sinyal) audio yang terekam atau yang sudah ada dalam perangkat penyimpan milik anda. Dalam hal ini saya akan mencoba menghadirkan 2 buah cara yakni: Memotong isyarat audio lalu menempatkannya pada bagian akhir dari audio asli. Pemotongan dilakukan berulang-ulang dengan rentang pemotongan semakin lama semakin kecil. Hal ini akan menyebabkan ukuran dari isyarat audio menjadi semakin besar. Contoh programnya:
clear all; close all clc; %% import audio into matlab filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); %% audio processing - digital delay data2=[]; repp=5; iter=1; pjg=length(data); while iter<=repp data2=[data2;(1/iter)*data(1+pjg-round(pjg/iter):pjg,:)]; iter=iter+1; end soundsc(data2,fs);

bila kita cek ukuran file, sebelum = >> size(data)

[{EE&IT of UGM, INDONESIA} janshendry@gmail.com]

[DIGITAL SIGNAL PROCESSING]

November 6, 2011

ans = 72292 Sesudah = >> size(data2) ans = 165066 2 2

Tampak perbedaan ukuran sangat signifikan. Semakin banyak anda melakukan pemotongan maka semakin besar ukuran file akhirnya. Data audio di atas bersumber dari http://www.vocaldownloads.com/freesamples.cfm. Data tersebut bisa di unduh secara gratis. Selain ukuran, isyarat yang dihasilkan pun tidak menghasilkan efek gema yang optimal. Hasilnya memperlihatkan adanya pemotongan yang tentu saja hal tersebut kita hindari. Hal ini mengakibatkan hasil akhir proses tidak begitu mulus. Cara yang kedua ini adalah dengan memberikan tunda sebesar N/fs. N merupakan bit awal dalam membuat gema sedangkan fs merupakan frekuensi cupliknya. Frekuensi cuplik ini merupakan nilai yang ada pada isyarat audio asli atau original. Perhatikan program berikut ini:
clear all; close all clc; %% import audio into matlab filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); N=5000; % total tunda sebesar N/fs data2=data; for k=N+1:length(data) data2(k,:)=.7*data2(k-N,:)+data(k,:); end % for stereo soundsc(data2,fs);

teknik yang kita lakukan adalah dengan mengubah nilai-nilai elemen matriks isyarat. Data yang sekarang kita tambahkan dengan data yang dahulu yang dimulai pada data ke-N+1. Sehingga data asli dan data hasil proses tidak mengalami perubahan dalam ukuran. Anda bisa melakukan pengecekan sendiri. Bila anda menginginkan data hasil berupa data mono bukan stereo anda bisa menggunakan program di bawah ini:

[{EE&IT of UGM, INDONESIA} janshendry@gmail.com]

[DIGITAL SIGNAL PROCESSING]

November 6, 2011

clear all; close all clc; %% import audio into matlab filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); N=5000; % total tunda sebesar N/fs data2=data; for k=N+1:length(data) data2(k,:)=.7*data2(k-N,:)+data(k,:); end % for mono mono=(data2(:,1)+data2(:,2))/2; soundsc(mono,fs);

selain itu saya tambahkan beberapa program untuk bermain-main dengan isyarat audio. Memperbesar amplitudo audio Hal ini sangat mudah, karena anda hanya memberikan sebuah konstanta pengali kepada tiap data pada audio. Berikut ini contohnya jika saya ingin memperbesar amplitudo sebesar 5.5 kali.
filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); start=20000; % total tunda sebesar start/fs data=5.5*(data); sound(data,fs);

Membalikkan audio Untuk melakukan ini kita bisa menggunakan toolbox matlab yakni flipud untuk membalikkan data dari tiap kolom pada matriks. Mengapa bukan fliplr atau fliprl??? Karena data kita .wav sebenarnya berukuran Nx2 (bila stereo) atau Nx1 (bila mono). Sementara tiap kolom berisi baris yang sangat banyak, sehingga dengan keadaan data yang berada pada kolom maka fungsi di atas yang tepat digunakan. Berikut ini adalah contoh programnya:
filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); start=20000; % total tunda sebesar start/fs
[{EE&IT of UGM, INDONESIA} janshendry@gmail.com]

[DIGITAL SIGNAL PROCESSING]

November 6, 2011

data=flipud(data); data2=data; soundsc(data2,fs);

Memperlambat ketukan (slow down) Hal ini dapat dilakukan dengan mudah melalui pengubahan frekuensi sampling pada audio asli. Seperti diketahui bahwa file audio kita juga membawa informasi frekuensi cuplik asli (fs), agar audio dapat dimainkan dengan ketukan yang lebih lambat maka frekuensi cuplik saat memainkan file audio dapat diperkecil. Perhatikan contoh program berikut ini:
filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); fs2=fs/4; sound(data,fs2);

awalnya audio asli memiliki frekuensi cuplik (fs), lalu agar ketukan semakin lambat maka nilai tersebut kita bagi dengan 4. Kita mainkan audio dengan frekuensi tersebut. Sehingga anda akan mendapatkan hasil yang diinginkan. Mempercepat ketukan Anda hanya mengalikan atau memperbesar nilai fs. Perhatikan contoh berikut ini:
filename='AndLetItFlow'; filename=strcat(filename,'.wav'); [data,fs]=wavread(filename); fs2=2*fs; sound(data,fs2);

anda bisa menguji hasilnya sendiri. Bisa dikatakan hasilnya mirip chipmunk sedang berbicara... ☺

saya rasa informasi di atas cukup untuk membantu anda melakukan pengolahan file audio, baik sederhana maupun yang cukup rumit. Pada kesempatan lain, saya mencoba untuk membuat musik sendiri menggunakan matlab. Mungkin musik yang sederhana. Bila memungkinkan akan ditambahkan animasi sederhana. Hal tersebut sangat mungkin dilakukan asalkan kita tau frekuensi dasar dari setiap kunci pada alat musik yang ingin kita gunakan. Untuk itu saya akan mencoba mencari referensi tentang frekuensi tersebut. Sumber: Matlab Help http://www.vocaldownloads.com/freesamples.cfm Thanks...
[{EE&IT of UGM, INDONESIA} janshendry@gmail.com]

Sign up to vote on this title
UsefulNot useful