• Tidak ada hasil yang ditemukan

BAB IV HASIL DAN PEMBAHASAN

4.1.3 Tombol Ambil Suara Acuan

Tombol Ambil Suara Acuan akan bekerja apabila kotak pengujian telah siap yang ditandai dengan nilai variabel m_Start bernilai 1 dan hanya dapat dilakukan sekali penekanan. Beberapa tahapan proses yang dilakukan saat tombol Ambil Suara Acuan

ditekan, yaitu:

1. Pembuatan log file yang berekstensi .txt akan digunakan untuk pencatatan data pengujian. Pembuatan dan pembukaan file dilakukan dengan metode berikut:

LogFile.Open(NamaFile,CFile::modeCreate|CFile::modeWrite |CFile::typeText); //open file text

Catatan:

Log file adalah file dengan ekstensi .txt yang berisi data pengujian seperti banyaknya

penekanan, hasil akumulasi data sampling suara, error suara uji terhadap suara acuan, dan tegangan baterai setiap 1 kali penekanan tombol on pada mainan. Gambar 4.12 merupakan contoh hasil pembuatan log file . LogFile merupakan nama instance dari

class CStdioFile. Class CStdioFile merupakan class yang sudah tersedia pada Visual

C++ yang dapat digunakan untuk membuat sebuah file.

Gambar 4.12. Tampilan Log File Pada Jendela Notepad

2. Persiapan untuk proses perekaman yang diawali dengan:

a. Menginisialisasikan parameter perekaman dengan metode berikut: // pengesetan parameter perekaman

WAVEFORMATEX pFormat;

pFormat.wFormatTag=WAVE_FORMAT_PCM;//tanpa kompresi format, PCM data

pFormat.nChannels=1; //1=mono, 2=stereo pFormat.nSamplesPerSec=sampleRate;

pFormat.wBitsPerSample=bit; //16 high quality, 8 standar sampling telepon

pFormat.nAvgBytesPerSec=sampleRate*pFormat.wBitsPerSample/8; // = nSamplesPerSec * n.Channels * wBitsPerSample/8

pFormat.nBlockAlign=pFormat.nChannels * pFormat.wBitsPerSample / 8;// = n.Channels *wBitsPerSample /8

pFormat.cbSize=0;

Metode di atas digunakan untuk mengkonfigurasi format data dari sinyal suara yang akan direkam. Pada motode tersebut, konfigurasi dilakukan dengan menentukan parameter perekaman, seperti format suara, channel, sampling rate, bit per sampel, AvgBytesPerSec, dan BlockAlign.

Catatan:

1. AvgBytesPerSec merupakan rata-rata kecepatan transfer data dalam byte untuk

tiap detik. Nilai ini digunakan untuk menentukan ukuran dari buffer. Persamaan 4.1 merupakan rumusan untuk menentukan nilai AvgBytesPerSec.

2. BlockAlign merupakan nilai dari ukuran data dalam byte untuk tiap sampel.

//pengaturan header buffer perekaman waveIn = new short [NUMPTS];

WaveInHdr.lpData = (LPSTR)waveIn;//menunjuk pointer buffer data WaveInHdr.dwBufferLength = NUMPTS * pFormat.wBitsPerSample / 8; WaveInHdr.dwBytesRecorded=0;

WaveInHdr.dwUser = 0L; WaveInHdr.dwFlags = 0L; WaveInHdr.dwLoops = 0L;

Metode di atas digunakan untuk menentukan struktur dari buffer. Buffer adalah memori yang disiapkan sebagai tempat penyimpanan sementara data hasil perekamanan suara. Pada metode di atas, pengaturan persiapan buffer terdiri atas: 1. Pengalokasian memori untuk menyimpan data hasil perekaman suara berupa

pointer dengan menuliskan waveIn = new short [NUMPTS].

2. Pendeklarasian variabel pointer dilakukan dengan menuliskan WaveInHdr.lpData = (LPSTR)waveIn.

3. Penentuan panjang buffer dilakukan dengan menuliskan WaveInHdr.dwBufferLength.

4. Penginisialisasian awal data yang terdapat pada buffer dilakukan dengan menuliskan WaveInHdr.dwBytesRecorded=0. Nilai 0 mengartikan buffer

dalam keadaan kosong pada saat awal.

5. Penginisialisasian variabel dwUser dilakukan dengan menuliskan WaveInHdr.dwUser=0L. Nilai 0L sama artinya dengan nilai 0.

6. Penginisialisasian variabel dwFlags dilakukan dengan menuliskan WaveInHdr.dwFlags=0L. Nilai 0L dimaksudkan bahwa tidak menggunakan

flag sebagai informasi tambahan pada buffer.

7. Penginisialisasian variabel dwLoops dilakukan dengan menuliskan WaveInHdr.dwLoops=0L. Nilai 0L dimaksudkan bahwa pengulangan proses perekaman tidak dilakukan, hanya 1 kali proses perekaman.

b. Membuka perangkat suara dengan metode berikut:

waveInOpen(&hWaveIn,WAVE_MAPPER,&pFormat,0L,0L,WAVE_FORMAT _DIRECT);

c. Mempersiapkan buffer untuk penyimpanan sementara data hasil perekaman dengan metode berikut:

3. Meminta kepada kotak pengujian untuk mengirimkan data level tegangan mainan bersuara dengan metode berikut:

port.WriteByte(48); //perintah untuk meminta data tegangan

port.ReadByte(data);//mengambil data tegangan dari kotak pengujian port merupakan nama instance pada class CSerialCom sedangkan WriteByte dan ReadByte merupakan fungsi yang terdapat pada class CSerialCom.

4. Program memerintahkan kotak pengujian untuk menekan tombol on mainan bersuara dengan metode berikut:

port.WriteByte(3); //perintah untuk menekan tombol on mainan

5. Penundaan proses selama 1,2 detik agar perekaman suara dimulai tepat saat mainan mengeluarkan suara. Penundaan proses dilakukan dengan metode berikut:

Sleep (1200); //dalam milisekon

Waktu tunda sebesar 1,2 detik didapatkan dengan melakukan percobaan terlebih dahulu. Percobaan dilakukan dengan melihat seberapa lama waktu tunda yang diperlukan agar program dapat merekam suara tepat saat mainan mulai bersuara.

6. Memulai proses perekaman dengan metode berikut: waveInStart(hWaveIn);

dan menunggu sampai perekaman selesai dengan metode:

do {} while (waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR))==WAVERR_STILLPLAYING);

7. Mengambil data pada buffer untuk disimpan pada variabel dengan metode berikut: //ambil data buffer

for (long i=0;i<NUMPTS;i++)

{ dataWaveAcuan[i]=*waveIn; waveIn++;}

8. Memplot data suara hasil rekaman pada grafik suara acuan dengan metode berikut: Scope.Channels[ 0 ].Data.SetYData( dataWaveAcuan, NUMPTS ); 9. Mengakumulasi data sampling suara acuan dengan metode berikut:

//proses akumulasi data double dataAcuan = 0;

for (long i=0;i<NUMPTS;i++)

{ dataWaveAcuan[i]= abs(dataWaveAcuan[i]);

dataAcuan = dataAcuan + dataWaveAcuan[i]; } 10.Menutup perangkat suara dengan metode:

waveInClose(hWaveIn);

11.Menampilkan data akumulasi suara acuan dan tegangan baterai dengan metode: m_dataAkumulasiAcuan=dataAcuan;//menampilkan data akumulasi acuan //tampil Slider tegangan

int slider=m_TeganganBaterai*10; m_SliderTegangan.SetPos(slider);

12.Menuliskan data akumulasi suara acuan dan tegangan baterai pada log file dengan metode: CString No,Acuan,Error,spasi,tulis,tegangan; m_CounterPenekanan_Ctrl.GetWindowTextW (No); m_dataAkumulasiAcuan_Ctrl.GetWindowTextW (Acuan); m_Error_Ctrl.GetWindowTextW (Error); m_TeganganBaterai_Ctrl.GetWindowTextW (tegangan); char space[]=" "; spasi=space;

CString judul=_T("Penekanan ke- Data Akumulasi Error Tegangan"); tulis=No+spasi+Acuan+spasi+Error+spasi+tegangan; TCHAR enter[]=_T("\n"); LogFile.WriteString (judul); LogFile.WriteString (enter); LogFile.WriteString(tulis); LogFile.WriteString (enter);

Penulisan data hasil pengujian pada notepad dilakukan oleh fungsi LogFile.WriteString().

13.Menunda proses selama 5 detik untuk pemulihan tegangan baterai setelah dilakukan penekanan. Penundaan proses dilakukan dengan metode:

Sleep (5000); //dalam milisekon

Waktu tunda sebesar 5 detik didapatkan dengan melakukan percobaan. Percobaan dilakukan dengan melihat seberapa lama tegangan baterai dapat kembali pada keadaan sebelum terjadi penekanan tombol on.

14.Proses terakhir yaitu memberikan pesan yang terlihat pada Gambar 4.13 kepada user

bahwa pengambilan suara acuan telah selesai dan dapat melanjutkan pengujian dengan menekan tombol Uji.

Gambar 4.13. Tampilan Pesan Bahwa Tombol Uji Sudah Dapat Ditekan

Pada perancangan, program meminta data tegangan baterai kepada kotak pengujian dilakukan setelah program merekam suara. Tetapi pada implementasi, program meminta data tegangan baterai kepada kotak pengujian dilakukan sebelum program memerintahkan kotak pengujian untuk menekan tombol on pada mainan Barbie. Hal tersebut dilakukan karena tegangan baterai pada mainan akan turun saat mainan sedang berbunyi. Perekaman suara yang dilakukan pada saat menekan tombol Ambil Suara

Acuan dilakukan untuk mendapatkan data digital dengan format data PCM. Data PCM yang direkam tidak disimpan ke dalam sebuah file suara, sehingga akan hilang ketika melakukan kembali proses perekaman.

Tombol Ambil Suara Acuan telah berjalan dengan baik. Saat tombol ditekan program dapat meminta data tegangan baterai kepada kotak pengujian, menekan tombol on

mainan, merekam suara, menampilkan akumulasi data sampling suara acuan, dan menuliskan data akumulasi suara acuan pada log file. Gambar 4.14 menunjukan tampilan saat penekanan tombol Ambil Suara Acuan.

Gambar 4.14. Tampilan Setelah Penekanan Tombol Ambil Suara Acuan

Dokumen terkait