Anda di halaman 1dari 116

PROYEK AKHIR

PEMBUATAN KOMPOSER (LAGU) PADA


PERSONAL COMPUTER (PC) BERBASIS
DIGITAL SIGNAL PROCESSING (DSP)
(Dengan NADA-nada tunggal)

Devi Dyah Palupi


NRP. 7203 030 015

Dosen Pembimbing :

Tri Budi Santoso, ST, MT


NIP. 132 128 464

Bima Sena Bayu Dewantara, SST


NIP. 132 232 762

JURUSAN TEKNIK TELEKOMUNIKASI


POLITEKNIK ELEKTRONIKA NEGERI SURABAYA
S U R A B A Y A 2006
PEMBUATAN KOMPOSER (LAGU) PADA
PERSONAL COMPUTER (PC) BERBASIS
DIGITAL SIGNAL PROCESSING (DSP)
(Dengan Nada-nada Tunggal)

Oleh:
Devi Dyah Palupi
7203 030 015

Proyek Akhir ini Diajukan Sebagai Salah Satu Syarat Untuk


Memperoleh Gelar Ahli Madya (A.Md)
di
Politeknik Eletronika Negeri Surabaya
Institut Teknologi Sepuluh Nopember Surabaya

Disetujui Oleh :

Tim Penguji Proyek Akhir: Dosen Pembimbing:

1. Drs. Miftahul Huda, MT 1. Tri Budi Santoso, MT


NIP. 132 055 257 NIP. 132 128 464

2. Sritusta Sukaridhoto, ST 2.Bima Sena Bayu D, SST


NIP. 132 300 372 NIP. 132 232 762

3. Ari Wijayanti, ST
NIP. 132 303 877

Mengetahui
Ketua Jurusan Tekomunikasi

Drs. Miftahul Huda, MT


NIP. 132 055 257

ii
ABSTRAK
Komposer adalah sistem yang mampu memadukan dan mengolah
nada-nada tunggal menjadi sebuah lagu ataupun hanya sebuah intro lagu
saja. Pada saat ini komposer masih bisa dibuat pada handphone saja.
Dengan perpaduan Pengolahan Sinyal Digital (DSP) dan Bahasa
Pemrograman Visual C++ dan Snack-Tcl/Tk akan diperoleh sebuah
software yang mampu mengolah nada-nada tunggal menjadi sebuah
lagu. Langkah pertama yang dilakukan adalah penentuan frekuensi dari
nada-nada tunggal dari piano yang nantinya disesuaikan dengan
formulasi yang akhirnya bisa dihasilkan bunyi dari nada-nada tunggal
yang diinginkan. Formulasi tersebut akan diproses dengan
menggunakan program Visual C++ dan Snack-Tcl/Tk. Nada-nada
tunggal tersebut akan digabungkan agar bisa menjadi sebuah lagu. Lagu
ini nantinya akan disimpan dalam bentuk WAV dan di putar pada media
yang sesuai seperti Windows Media Player atau media lain yang sesuai.

Kata kunci : Komposer, nada-nada tunggal,Pengolah sinyal digital,


frekuensi sampling

iii
ABSTRACT
Composer is a system that capable to combine and process the
single tones become a song or a part of song. At the moment, the
composer can be made at the mobile phone only. With the Digital Signal
Processing, Visual C++, and Snack-Tcl/Tk Programming can be
created a software that capable to process single tones become a song.
The first step is determine the frequency of single tone of piano which is
accommodated with a formulation that can be produced a sound of the
desired single tones. The formulation will be processed by using visual
C++ and Snack-Tcl/Tk programming. The single tones will be merged
in order to be a song. It will be saved in WAV form and played at the
appropriate media, such as Windows Media Player or the others.

Key word : Composer, single tones, digital signal processor, sampling


frequency

iv
KATA PENGANTAR
Assalamu’alaikum WR.Wb.

Alhamdulillah! Kami panjatkan puji syukur kehadirat Allah SWT


atas rahmat dan hidayah-Nya sehingga saya dapat menyelesaikan proyek
akhir ini yang berjudul judul :
PEMBUATAN KOMPOSER (LAGU) PADA PERSONAL COMPUTER
(PC) BERBASIS DIGITAL SIGNAL PROCESSING (DSP)
(DENGAN NADA-NADA TUNGGAL)
Proyek Akhir ini kami susun guna memenuhi salah satu syarat
untuk memperoleh gelar Ahli Madya (A.Md.) di Politeknik Elektronika
Negeri Surabaya, Institut Teknologi Sepuluh Nopember Surabaya (ITS).
Dalam menyelesaikan proyek akhir ini, kami melaksanakan
berdasarkan teori-teori yang telah kami peroleh dalam perkuliahan,
literature dan bimbingan dari dosen pembimbing serta pihak pihak lain
yang telah memberi semangat dan bantuan.
Kami menyadari bahwa masih banyak kesalahan dan kekurangan
dalam penyusunan dan pembuatan buku laporan Proyek Akhir ini.
Seperti halnya pepatah yang berbunyi “Tiada Gading yang Tak Retak” .
Oleh karena itu kami mengharapkan kritik dan saran dari pembaca.
Kami juga mengharapkan semoga buku ini dapat memberikan manfaat
bagi para mahasiswa Politeknik Elektronika Negeri Surabaya pada
umumnya dan dapat memberikan nilai lebih untuk para pembaca pada
khususnya.

Wassalamu’alaikum Wr.Wb.

Surabaya, Agustus 2006

Penulis

v
UCAPAN TERIMA KASIH
Pada kesempatan yang membahagiakan ini, penulis ingin
mengucapkan terima kasih kepada semua pihak yang telah membantu
penulis dalam menyelesaikan Proyek Akhir ini. Semua pihak tersebut
antara lain :
1. Allah SWT, Alhamdulillahirrabbil Alamin atas segala berkah,
rahmat, karunia dan pertolongan-Nya yang tiada henti yang
diberikan kepada semua hamba-Nya, dan semua petunjuk-Nya
yang kadang tak sanggup dilihat.
2. Shalawat serta salam tercurah selalu kepada junjungan besar
Nabi Muhammad SAW yang mengajarkan kebenaran-
kebenaran hakiki.
3. Bapak, Ibu, dan Kakak-kakakku tercinta, terima kasih atas
semua cinta, kasih sayang, doa dan dukungan yang terus-
menerus mengalir. Semoga saya selalu menjadi anak yang
shaleh dan berbakti.
4. Dr. Titon Dutono, M.Eng, selaku direktur Politeknik
Elektronika Negeri Surabaya - Institut Teknologi sepuluh
Nopember.
5. Bapak Drs. Miftahul Huda, MT, selaku ketua jurusan Teknik
Telekomunikasi Politeknik Elektronika Negeri Surabaya.
Terima kasih telah membimbing kami dengan penuh kesabaran
dan atas semua yang bapak berikan kepada kami.
6. Bapak Tri Budi Santoso, ST, MT, selaku dosen pengajar dan
pebimbing Proyek Akhir. Terima kasih atas waktu yang telah
Bapak sediakan dan ilmu serta bimbingan yang telah Bapak
berikan.
7. Bapak Bima Sena Bayu Dewantara, SST, selaku dosen
pembimbing Proyek Akhir. Terima kasih atas ilmu, bimbingan
dan waktu yang diberikan, terutama saat penyelesaian proyek
akhir ini.
8. Semua dosen dan staf Politeknik Elektronika Nageri Surabaya -
ITS, bidang keahlian Telekomunikasi atas didikannya dan
dukungan selama ini. Insya Allah ilmu akan selalu diterapkan.
9. Seluruh warga jurusan Teknik Telekomunikasi PENS – ITS.
Terima Kasih atas seluruh dukungannya.
10. Teman-teman Lab Propagasi yang telah memberi bantuan,
semangat, dukungan, dan do’annya dalam penyelesaian PA ini.

vi
11. Buat Fathir yang selalu menemani, membantu, memberi
dukungan, semangat, dan do’anya selama penyelesaian PA ini.
12. Teman-teman seperjuangan untuk proyek akhir atas bantuan,
dukungan, kekompakan, dan do’anya selama proses pembuatan
Proyek Akhir ini.
13. Serta semua pihak yang ikut membantu kelangsungan tugas
akhir ini yang tidak dapat kami sebutkan satu per satu.
Penulis berharap semoga Allah SWT membalas segala kebaikan
yang diberikan dengan yang lebih baik lagi

Surabaya, Agustus 2006

Penulis

vii
DAFTAR ISI

JUDUL…………………………………………………………….. i
PENGESAHAN ………………………………..……………….... ii
ABSTRAK………………………………………………………… iii
ABSTRACT…...…………………………………………………... iv
KATA PENGANTAR..……………………………………………. v
UCAPAN TERIMA KASIH………………………………………. vi
DAFTAR ISI.…………………………………………………..….. viii
DAFTAR GAMBAR……………………………………………… x
DAFTAR TABEL…………………………………………………. xi

BAB I. PENDAHULUAN………………………………………… 1
1.1. Latar Belakang ……………...…………………………. 1
1.2. Tujuan ... ………..……………………………………... 2
1.3. Perumusan Masalah .………..…………………............. 2
1.4. Batasan Masalah ………………………………............ 2
1.5. Metodologi ………………….……………………......... 3
1.6. Sistematika Pembahasan ..……………………………... 3

BAB II. TEORI PENUNJANG …………………………………… 5


2.1. Umum……………………….......................................... 5
2.2. Pemrograman Snack-Tcl/Tk ........................................... 5
2.2.1. Snack 2.2 .................................................................. 5
2.2.2. Tcl/Tk 8.3.0 .............................................................. 5
2.3. Pemrograman Visual C++ …………………………….. 9
2.4. Frekuensi Suara Musik ................................................... 10
2.5. Pengenalan Not Musik ………………………………… 12
2.5.1 Sistem Not Angka ……………………………… 12
2.5.2 Sistem Not Balok ……………………………….. 12

BAB III. PERENCANAAN DAN PERANGKAT LUNAK ........... 13


3.1. Perencanaan Sistem ....................................................... 13
3.2. Pembuatan Ekstensi…………………………………... 14
3.3. Pembangkitan Nada-Nada Tunggal ............................... 17
3.3.1. Pembangkitan Nada dengan Software Visual C++ . 17
3.3.2. Pembangkitan Nada dengan Software Tcl/Tk ......... 20
3.3.3. Penggabungan Nada-nada pada Visual C++ .......... 21
3.3.4. Pemanggilan Gabungan pada Tcl/Tk ..................... 22

viii
3.3.5. Penyimpanan Gabungan Nada-nada dalam WAV . 22
3.3.6. Pembuatan Tampilan .............................................. 23

BAB IV. PENGUJIAN PERANGKAT LUNAK ............................ 27


4.1. Gambaran Umum .......................................................... 27
4.2. Pengujian Sistem ........................................................... 27
4.2.1. Pengujian Nada-nada Tunggal dengan Jumlah Data 27
4.2.2. Pengujian Penggabungan Nada-nada Tunggal ........ 31
4.3. Analisa Hasil Pengujian ................................................ 44
4.3.1. Analisa Pengujian Nada-nada Tunggal dengan
44
Jumlah Data ............................................................
4.3.2. Analisa Pengujian Penggabungan Nada-Nada
44
Tunggal ...................................................................

BAB V. PENUTUP........................................................................... 47
5.1. Kesimpulan……………………………………………. 47
5.2. Saran ………………………………………………….. 47

DAFTAR PUSTAKA........................................................................ 49
LAMPIRAN......................................................................................
RIWAYAT HIDUP ..........................................................................

ix
DAFTAR GAMBAR
Gambar 2.1 Wish Interpreter ………................................................ 6
Gambar 2.2 Contoh pembuatan button.............................................. 7
Gambar 2.3 Contoh pembuatan button ............................................. 8
Gambar 2.4 Contoh pembuatan button ............................................. 8
Gambar 2.5 Contoh pembuatan button ............................................. 9
Gambar 2.6 Contoh tampilan piano ………………………………. 12
Gambar 3.1 Blok Diagram Pembuatan Komposer ………………... 13
Gambar 3.2 Blok Diagram Pembuatan Ekstensi…………………... 14
Gambar 3.3 Spesifikasi lokasi dari file Snack dan Tcl include ........ 15
Gambar 3.4 Spesifikasi stubs ........................................................... 15
Gambar 3.5 Spesifikasi library dari Snack dan Tcl .......................... 16
Gambar 3.6 Output dalam bentuk dll ............................................... 16
Gambar 3.7 Contoh Tampilan .......................................................... 23
Gambar 4.1 Sinyal nada C’ untuk jumlah data 1000 ....................... 26
Gambar 4.2 Sinyal nada C’ untuk jumlah data 2000 ....................... 26
Gambar 4.3 Sinyal nada C’ untuk jumlah data 3000 ....................... 26
Gambar 4.4 Sinyal nada C’ untuk jumlah data 4000 ....................... 27
Gambar 4.5 Sinyal nada C’ untuk jumlah data 5000 ....................... 27
Gambar 4.6 Sinyal nada C’ untuk jumlah data 6000 ....................... 27
Gambar 4.7 Sinyal nada C’ untuk jumlah data 7000 ....................... 28
Gambar 4.8 Sinyal nada C’ untuk jumlah data 8000 ....................... 28
Gambar 4.9 Sinyal nada C’ untuk jumlah data 9000 ....................... 28
Gambar 4.10 Sinyal nada C’ untuk jumlah data 10000 ................... 29
Gambar 4.11 Sinyal lagu Indonesia Raya dengan jumlah data 1000 31
Gambar 4.12 Sinyal lagu Gugur Bunga dengan jumlah data 1000 .. 33
Gambar 4.13 Sinyal lagu Indonesia Raya dengan jumlah data 5000 35
Gambar 4.14 Sinyal lagu Gugur Bunga dengan jumlah data 5000 .. 37
Gambar 4.15 Sinyal lagu Indonesia Raya dengan jumlah data
40
10000 .......................................................................
Gambar 4.16 Sinyal lagu gugur Bunga dengan jumlah data 10000 . 42

x
DAFTAR TABEL
Tabel 2.1 Sejumlah ekstensi yang dibangkitkan oleh C++........... 17
Tabel 2.2 Tabel Frekuensi Tiap Oktaf Dengan Ketentuan Nilai
22
Dasar .............................................................................

xi
BAB I
PENDAHULUAN

1.1 LATAR BELAKANG

Dewasa ini komputer memegang peranan penting dalam


perkembangan produksi teknologi audio. Dengan penerapan hardware
dan software yang tepat sistem komputer dapat digunakan untuk
pembuatan lagu, perekaman, pengeditan, mixing, mastering dan
streaming di internet. Hal ini mebuat penerapan pengolahan sinyal audio
seperti equalizer dan digital audio effect dengan sistem komputer
semakin luas [1].
Demikian halnya dengan pengolahan sinyal secara digital yang
telah diterapkan begitu luas. Dari peralatan instrumentasi dan kontrol,
peralatan musik, peralatan kesehatan dan peralatan lainnya [2]. Sebagai
penerapan dari pengolahan sinyal digital menggunakan sistem
komputer, untuk itu pembuatan komposer (lagu) pada personal
komputer menggunakan digital signal processing dengan nada-nada
tunggal ini merupakan salah satu aplikasi dari perkembangan teknologi
pengolahan sinyal
Komposer adalah seseorang yang menulis musik, dalam hal ini
orang tersebut menulis musik dalam bentuk not-not musik yang
memungkinkan orang lain untuk memainkannya [3]. Tetapi dalam
proyek akhir ini yang dimaksud dengan komposer adalah sebuah
software yang dapat memadukan not-not musik menjadi sebuah lagu
Saat ini komposer hanya dapat dibuat pada mobile phone. Dengan
pengolahan sinyal digital, bahasa pemrograman Snack Tcl/tk dan visual
C++ akan diperoleh sebuah software dimana komposer atau lagu
tersebut dapat ditampilkan pada personal komputer .
Pembuatan sebuah lagu dapat dilakukan melalui proses
pembangkitan frekuensi dari not-not musik yang kemudian diolah
dengan bahasa pemrograman Snack Tcl/tk dan visual C++. Dengan
mengolah frekuensi-frekuensi tersebut akan diperoleh suara yang
berlainan dari tiap nada. Dari nada-nada tersebut akan diatur dan
dipadukan sehingga akan menghasilkan sebuah lagu.
Proyek akhir ini menggunakan tampilan alat musik piano. Bentuk
alat musik piano dapat dibuat menggunakan script Snack tcl/tk dan
pembangkitan suara dari tiap-tiap notnya menggunakan bahasa
pemrograman visual C++, dimana kedua program tersebut telah di-

1
2

ektensi terlebih dahulu. Nada-nada tunggal yang telah dibangkitkan


tersebut (nada) kemudian digabungkan sehingga dapat menjadi sebuah
lagu dengan nada-nada tunggal maupun dengan penambahan effect.

1.2 TUJUAN

Proyek Akhir yang kami kerjakan ini memiliki tujuan yaitu :


a. Pengolahan input berupa frekuensi-frekuensi nada-nada tunggal
yang kemudian dihasilkan bunyi-bunyi yang bernada atau
disebut komposer.
b. Komposer ini dapat ditampilkan pada Personal Computer (PC)
baik melalui tampilan yang dibuat sendiri maupun melalui
WAV.
c. Yang tidak kalah pentingnya menjadikan sebagai alat untuk
berlatih bagi pemula yang ingin menambah ilmu dalam bidang
musik.

1.3 PERUMUSAN MASALAH

Dari pembahasan di atas maka permasalahan yang mungkin akan


terjadi yaitu bagaimana dengan membangun sebuah aplikasi untuk
menampilkan suara musik pada Personal Computer (PC) dengan
program bantu Visual C++ dan Snack-Tcl/Tk dan dapat didengarkan
dengan enak oleh pendengar dengan menggabungkan nada-nada tunggal
yang saling berkaitan satu dengan yang lainnya. Hasil dari Komposer ini
nantinya akan ditampilkan pada Personal Computer (PC).

1.4 BATASAN MASALAH

Batasan masalah pada Proyek Akhir ini yaitu :


1. Program bantu yang digunakan dalam menyelesaikan
pembuatan komposer ini adalah software script Snack-Tcl/Tk
dan Visual C++.
2. Pembuatan komposer ini hanya menggunakan nada-nada
tunggal saja.
3. Pembuatan komposer ini hanya dibatasi pada alat musik piano
untuk 4 oktaf.
4. Tampilan yang digunakan pada komposer ini berupa tuts-tuts
piano dan langsung diputar dalam 1 intro lagu.
3

1.5 METODOLOGI

Penyelesaian proyek akhir ini dilakukan dengan langkah-langkah


sebagai berikut:
a) Perancangan Sistem
Perancangan sistem didasarkan blok diagram pembuatan komposer
seperti pada Gambar 3.1 dan diharapkan dapat mempermudah
dalam membuat perangkat lunak yang diharapkan.
b) Studi Literatur
Pada study literatur Proyek Akhir ini penulis memakai teori tentang
bahasa pemrograman Visual C++ dan Snack-Tcl/Tk, dan teori
frekuensi suara musik.
c) Pembuatan Software
Dari hasil perancangan sistem dan teori yang menunjang, akan
diwujudkan suatu perangkat lunak berdasarkan perencanaan
tersebut.
d) Eksperimen dan Analisa Sistem
Perangkat lunak yang telah jadi akan diuji untuk kerjanya.
Pengujian akan dilakukan untuk semua not-not dasar berikut
performa masing-masing untuk kemudian diperbaiki dan
disempurnakan bila masih ada kekurangan. Beberapa penambahan
fitur akan dilakukan jika memungkinkan.

1.6 SISTEMATIKA PEMBAHASAN

Sistematika pembahasan Proyek Akhir ini disusun dengan kerangka


pembahasan yang saling berkaitan yaitu sebagai berikut :

1. BAB I PENDAHULUAN
Bab ini berisi tentang latar belakang, tujuan, perumusan
masalah, batasan masalah, metodologi, dan sistematika
pembahasan.

2. BAB II TEORI PENUNJANG


Bab ini berisi tentang teori-teori yang berkaitan dalam proses
pembuatan proyek akhir, yaitu meliputi teori tentang frekuensi
musik, program bantu Visual C++ dan Snack Tcl/Tk.
4

3. BAB III PERENCANAAN DAN PEMBUATAN


PERANGKAT LUNAK
Bab ini berisi tentang proses perancangan dan pembuatan
perangkat lunak (software) dari sistem keseluruhan mulai dari
proses menginputkan nilai frekuensi ke dalam formulasi pada
visual C++, pembangkitan bunyi nada-nada tunggal,
penggabungan nada-nada tunggal sampai didapatkan sebuah
musik yang diharapkan.

4. BAB IV PENGUJIAN PERANGKAT LUNAK


Membahas tentang pengujian nada-nada tunggal dengan
berbagai jumlah data dan pengujiannya dalam lagu, serta
analisanya.

5. BAB V PENUTUP
Berisi kesimpulan dari keseluruhan apa yang dikerjakan dalam
proyek akhir dan saran-saran untuk memperbaiki kelemahan
sistem yang telah dibuat demi pengembangan dan
kesempurnaan hasil Proyek Akhir ini di waktu mendatang.
BAB II
TEORI PENUNJANG

2.1 UMUM

Pada bab ini akan dibahas tentang teori dasar yang melandasi
permasalahan dan penyelesaiannya yang diangkat dalam Proyek Akhir
ini. Teori dasar yang diberikan meliputi: pemrograman Snack-Tcl/tk,
frekuensi nada-nada tunggal, tanda kunci, dan hal-hal yang berkaitan
dengan musik. Selanjutnya akan dibahas secara detail dalam bab ini.

2.2 PEMROGRAMAN SNACK-TCL/TK


2.2.1 Snack 2.2

Snack adalah tool pengolahan suara yang didesain sebagai


ekstensi untuk bahasa script. Saat ini Snack bekerja dengan bahasa script
Tcl/Tk, Phyton dan Ruby. Snack memiliki perintah-perintah untuk play,
record, process dan memvisualisasi suara. Snack menyediakan obyek
suara tingkat tinggi, dengan manajemen penyimpanan yang fleksibel dan
streaming support. Snack dapat bekerja pada banyak format file suara.
Dengan software yang merupakan hasil integrasi dari Tcl/Tk dan
Snack, maka dapat diberikan beberapa dasar-dasar dari program
tersebut.[4]

2.2.2 Tcl/Tk 8.3.0

Tcl adalah bahasa perintah berbasis string. Bahasa tersebut


memiliki beberapa konstruksi dasar dan relatif sedikit sintaks, yang
membuatnya mudah dipelajari. Tcl didesain untuk melekatkan blok-blok
program assembly pada aplikasi. Tcl akan diinterpretasikan saat aplikasi
berjalan. Interpreter membuatnya mudah untuk membangun dan
memperbaiki aplikasi kita dalam bentuk yang interaktif. Mekanisme
dasar adalah semuanya berhubungan dengan string dan pergantian
string, sehingga sangat mudah untuk ditampilkan apa yang sedang
dilakukan oleh interpreter. Tcl singkatan dari Tool Command Language.
Sebuah perintah yang mengerjakan sesuatu, seperti mengeluarkan string,
menghitung ekspresi matematika, atau menampilkan widget pada layar.
Tk adalah Graphical Toolkit extension dari Tcl, menyediakan

5
6

bermacam-macam item standar antarmuka GUI untuk memfasilitasi


secara cepat, pengembangan aplikasi tingkat tinggi.[4]
Berikut beberapa program dasar yang nantinya diaplikasikan
dalam proyek akhir ini, diantaranya:

Perintah Dasar Tcl / Tk dan Snack


Bekerja dengan menggunakan wish interpreter

Untuk bekerja dengan menggunakan Tcl console, maka jalankan


interpreter wish. Wish singkatan dari “Windows Shell”. Ini adalah
sebuah interpreter Tcl dimana Tk sekaligus termasuk di dalamnya,
sehingga wish bisa memahami perintah Tcl dan Tk. Untuk
menggunakan wish interpreter, maka bukalah Start – Program – Tcl –
Wish. Kemudian akan muncul tampilan gambar dibawah ini :

Gambar 2.1 Wish Interpreter

Pada saat wish interpreter dijalankan, maka tampil dua window.


Satu window adalah Console, dimana kita dapat mengetikkan perintah
setelah prompt %. Window yang lain adalah sebuah “toplevel” window,
dimana beberapa elemen grafik dari perintah tcl/tk seperti button, listbox
dll akan terlihat. Toplevel menunjukkan berbagai macam widget Tk
untuk membangun GUI (Graphical User Interface), sebagai hasil
pengetikan script tcl/tk pada Console.[4]
7

Syntax

Tcl/Tk adalah sebuah bahasa pemrograman berorientasi text.


Tcl/Tk memperlakukan semua perintah dan argument sebagai text.
Untuk menulis sebuah program Tcl/Tk, kita secara mudah menulis satu
perintah setelah satu lainnya. Sebuah perintah bisa berupa perintah
Tcl/Tk yang tersedia secara langsung ataupun membuat prosedur
tersendiri. Syntax dasar dari Tcl/Tk adalah sebuah perintah diikuti
argument :[4]
Command arg1 arg2 arg3…..
Contoh :
% puts stdout “Hello World”
• Hello World
Catatan : tanda % adalah prompt, jadi tidak perlu diketikkan sendiri.

Menciptakan Button
% button .b –text “Push Me”
• .b
% pack .b

Hasilnya dalam toplevel window adalah sebagai berikut :

Gambar 2.2 Contoh pembuatan button

• Perintah button Tk memiliki bentuk :


% button name options?
Perintah adalah button, argumen adalah name dan berbagai option. Pada
contoh ini, nama widget adalah .b dan –text adalah option yang
menunjukkan teks yang akan dimunculkan pada button.
8

• Perintah pack memiliki bentuk :


% pack name options?
Perintah adalah pack, argumen adalah name dan berbagai option. Nama
argumen sangat dibutuhkan, tetapi option tambahan tidak digunakan
dalam contoh ini.

Contoh perintah dengan banyak option :


% button .c -relief raised -activebackground lightblue –activeforeground
red-disabledforeground grey -text "Push Me"
% button .b1 –foreground black –background white
% button .b2 –foreground blue –background white
% pack .b1 .b2

Hasilnya adalah :

Gambar 2.3 Contoh pembuatan button

Packing Widgets
% button .b1 –text play
% button .b2 –text record
% button .b3 –text exit
% pack .b1 .b2 .b3 –side left

Hasilnya adalah :

Gambar 2.4 Contoh pembuatan button


9

Frame Widgets
% pack [frame .f1]
% pack [frame .f2]
% pack [frame .f3]
% button .f1.bplay -text Play -command {s play}
% button .f1.brecord -text Record -command {s record}
% button .f1.bstop -text Stop -command {s stop}
% button .f1.bexit -text Exit -command exit
% pack .f1.bplay .f1.brecord .f1.bstop .f1.bexit -side left -padx 5 -pady 5
% entry .f2.entry -textvariable filename
% button .f2.bsave -text Save -command {s write
data_wav\\$filename.wav}
% pack .f2.entry .f2.bsave -side left -padx 5 -pady 5
% button .f3.b1 -text "Standarisasi" -command {std;y length 1000;y
sign;y play}
% button .f3.b2 -text "Test" -command {go;x length 1000;x sign;x play}
% pack .f3.b1 .f3.b2 -side left -padx 5

Hasilnya adalah :

Gambar 2.5 Contoh pembuatan button

2.3 PEMROGRAMAN VISUAL C++

Visual C++ menggunakan perangkat pengembangan aplikasi


yang menggunakan C++ sebagai bahasa pemrogaman dan dapat
digunakan untuk membuat aplikasi berbasis Windows maupun berbasis
teks (aplikasi konsol). Perangkat ini menyediakan lingkungan yang
dinamakan IDE ( Integrated Development Enviroment) yang
memungkinkan pemakai membuat, mengkompalisasi, menggabungkan,
dan menguji program dengan cepat dan mudah.
10

Beberapa komponen penting dalam Visual C++ adalah sebagai


berikut [6] :

Ekstensi Keterangan
.dsp Berkas ini berisi definisi dasar sebuah proyek,
berisi informasi tentang bagaimana aplikasi
diciptakan berdasarkan berkas-berkas yang
terdapat pada project workspace.
.dsw Berisi informasi tentang isi proyek.
.opt Berisi data tentang pengaturan-pengaturan
dalam proyek; misalnya, menyimpan
informasi tentang kemungkinan aplikasi bisa
di debug atau tidak.
.cpp Berisi kode sumber C++
.h Merupakan berkas judul (header file), yang
umumnya berisi definisi kelas atau berisi
prototipe fungsi.
.rc Berisi resource Microsoft Windows (ikon,
bitmap, dan berbagai kontrol) yang digunakan
oleh aplikasi
.ico Berkas ikon untuk aplikasi
.exe Berkas yang dapat dieksekusi secara langsung
(executable).

Tabel 2.1 Sejumlah ekstensi yang dibangkitkan oleh C++

2.4 FREKUENSI SUARA MUSIK

Dengan menggunakan rumus untuk mencari nilai dari frekuensi,


maka kita dapat mencari nada dasar yang kita butuhkan yaitu dengan
rumus [8]:

Frequency [ Hz ] = 440 × 2 n / 12

Dimana :
11

Hz = Frekuensi dari nada


440 = Ketentuan nilai untuk nada dasar A
n = langkah (oktaf) dari kunci-kunci yang akan di cari C sampai
B pada tabel
12 = jumlah keseluruhan langkah yang ada tabel untuk mencari
nilai frekuensi

Sebagai contoh untuk mencari nilai frekuensi dari nilai


sebelumnya adalah dengan menggunakan nilai dari nilai angka dasar
440 mengurangi nilai langkah pada nilai n sebagai contoh :

f = 440 × 2 −4 / 12 = 394 .2290 Hz

Dengan menggunakan nada dasar A4 dengan nilai 440 kita dapat


dengan mudah mencari kunci-kunci dasar yang lain sesuai pada tabel
berikut

Frekuensi
Note
Oktaf 1 Oktaf 2 Oktaf 3 Oktaf 4 Oktaf 5
C 130.8 261.7 523.3 1046.6 2093.2
C# 138.6 277.2 554.4 1108.8 2217.7
D 146.8 293.7 587.4 1174.8 2349.6
D# 155.6 311.2 622.3 1244.6 2489.3
E 164.8 329.7 659.3 1318.6 2637.3
F 174.6 349.2 698.5 1397.0 2794.0
F# 185.0 370.0 740.0 1480.0 2960.1
G 196.0 392.0 784.0 1568.0 3136.0
G# 207.6 415.3 830.6 1661.2 3322.5
A 220.0 440.0 880.0 1760.0 3520.0
A# 233.1 466.2 932.3 1864.6 3729.2
B 246.9 493.9 987.7 1975.5 3951.0

Tabel 2.2 Tabel Frekuensi Tiap Oktaf Dengan Ketentuan Nilai Dasar.
12

Gambar 2.6 Contoh tampilan piano

2.5 PENGENALAN NOT MUSIK


Dalam penulisan musik (notasi) dikenal ada dua sistem, yaitu [9]:

2.5.1 Sistem Not Angka


Sistem ini menggunakan angka-angka, dengan sebutannya masing-
masing :

1 2 3 4 5 6 7 1
d i f l l i d
2.5.2 Sistem Not Balok
Sistem not balok ini merupakan perpaduan yang terdiri dari
beberapa unsur yang saling mendukung satu sama lainnya dengan
sebutan abjad, yaitu :
c d e f g a b c’
Dari kedua sistem tersebut diatas, yang banyak dikenal secara
menyeluruh adalah sistem not balok. Oleh karena itu dalam
memperlajari cara menulis dan membaca not balok berikut ini, akan
dibantu dengan not angka.
BAB III
PERENCANAAN DAN PEMBUATAN
PERANGKAT LUNAK

3.1 PERENCANAAN SISTEM

Perancangan sistem pembuatan komposer dengan


menggunakan nada-nada tunggal pada proyek akhir ini, merupakan
pembuatan instrumen musik dengan input frekuensi suara musik dan
diolah menggunakan software Visual C++ dan Tcl/Tk. Perancangan
sistem dalam proyek akhir ini dibentuk dalam blok diagram seperti
yang ditunjukkan dalam Gambar 3.1 di bawah ini :

Gambar 3.1 Blok Diagram Pembuatan Komposer

Adapun keterangan dari Blok diagram di atas adalah sebagai berikut


:
1. Menentukan frekuensi nada-nada tunggal. Frekuensi ini
n / 12
diperoleh dari rumus Frequency [ Hz ] = 440 × 2 , di mana
sebagai standartnya adalah nada A = 440 kHz. Lebih
lengkapnya telah dijelaskan dalam bab sebelumnya dalam teori
penunjang.
2. Setelah diketahui frekuensi nada-nada tunggal tersebut maka
frekuensi-frekuensi tersebut diolah dalam suatu formulasi
dengan menggunakan software Visual C++ dan Snack-Tcl/Tk.
3. Selanjutnya nada-nada tunggal yang telah dibangkitkan akan
digabungkan melalui software Visual C++ dan Snack-Tcl/Tk.
4. Hasil dari penggabungan nada-nada tunggal tersebut dihasilkan
sebuah intro lagu atau bahkan sebuah lagu.

13
14

3.2 PEMBUATAN EKSTENSI

Dibawah ini adalah tuntunan langkah demi langkah untuk


pemakai Windows menggunakan MS Visual C++ 6.0.

Gambar 3.2 Blok Diagram Pembuatan Ektensi

Keterangan dari Blok Diagram di atas adalah sebagai berikut :


1. Membuat Win32 Dynamic-Link Library project. (File/New...)
Beri nama 'Square' dan klik Ok kemudian Finish.
2. Tambahkan file square.c ke project (Project/Add to
project/Files...)
3. Menetapkan lokasi dari file Snack dan Tcl include.
(Project/Settings..., C/C++ tab, Category: Preprocessor,
Additional include directories.) Dengan instalasi default
C:\Program Files\Tcl\include\,C:\Program
Files\Snack2.0\include\
15

Gambar 3.3 Spesifikasi lokasi dari file Snack dan Tcl include

4. Spesifikasi stubs (Project/Settings... C/C++ tab, Category:


General, Preprocessor definitions.) USE_SNACK_STUBS,
USE_TCL_STUBS, USE_TK_STUBS

Gambar 3.4 Spesifikasi stubs

5. Spesifikasi librari dari Snack dan Tcl (Link tab, Category: Input,
Object/library modules) tclstub83.lib tkstub83.lib
16

snackstub20.lib dan lokasinya (Additional library path).


C:\Program Files\Tcl\lib\,C:\Program Files\Snack2.0\lib\.

Gambar 3.5 Spesifikasi library dari Snack dan Tcl

6. Nama file output dalam bentuk .dll, missal libsquare.dll


(Category: General, Output file name)

Gambar 3.6 Output dalam bentuk dll


17

7. Membangun Ekstensi
8. Menjalankan Ekstensi menggunakan script. Untuk lebih jelasnya
telah dipaparkan dalam teori penunjang pada bab sebelumnya.

3.3 PEMBANGKITAN NADA - NADA TUNGGAL


3.3.1 Pembangkitan Nada Dengan Software Visual C++

Pada pemrograman Snack, kita bisa mendefinisikan beberapa


obyek perintah baru yang berhubungan dengan Snack sound dan
mengubah traknya. Hal ini dapat diwujudkan dengan menggunakan
Snack C library.

#include "snack.h"
#include "math.h"

struct data
{
float x[50000];
};

struct data dat;

int C(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float frek;
float x[50000];

frek=130.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
18

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.
14*frek/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}
/*
Initialize the square package and create a new
sound command 'square'.
The syntax is: sndName square
*/
EXPORT(int, Square_Init)(Tcl_Interp *interp)
{
#ifdef USE_TCL_STUBS
if (Tcl_InitStubs(interp, "8", 0) == NULL)
{
return TCL_ERROR;
}
#endif
#ifdef USE_TK_STUBS
if (Tk_InitStubs(interp, "8", 0) == NULL)
{
return TCL_ERROR;
}
#endif
#ifdef USE_SNACK_STUBS
if (Snack_InitStubs(interp, "2", 0) == NULL)
{
return TCL_ERROR;
}
#endif

if (Tcl_PkgProvide(interp, "square", "1.0") !=


TCL_OK)
{
return TCL_ERROR;
}
Snack_AddSubCmd(SNACK_SOUND_CMD,"C",
(Snack_CmdProc *) C, NULL);
return TCL_OK;
}
19

Untuk pembangkitan 1 nada tunggal itu sendiri misalnya saja


nada C dapat diambil dari program :

int C(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float frek;
float x[50000];

frek=130.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.
14*frek/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

Untuk nada-nada yang lain dibuat dengan menggunakan


program yang sama. Perubahan yang dilakukan hanya pada
pemanggilan nama nada dan pada frekuensi yang digunakan oleh
nada tersebut. Misalnya, pada program nada C di atas kita
menggunakan int C maka untuk nada yang lain hanya mengganti
nama C dengan nama lain, misalmya D. Untuk masing-masing nada
menggunakan frekuensi yang berbeda-beda. Oleh karena itu, untuk
membedakan suara dari nada-nada tersebut harus mengganti
frekuensi dari nada yang digunakan. Selain itu, untuk memanggil
nada-nada tersebut juga dilakukan perintah yang berbeda.
20

//Pemanggilan Nada C
Snack_AddSubCmd(SNACK_SOUND_CMD,"C", (Snack_CmdProc
*) C, NULL);

//Pemanggilan Nada D
Snack_AddSubCmd(SNACK_SOUND_CMD,"D", (Snack_CmdProc
*) D, NULL);

3.3.2 Pembangkitan Nada Dengan Software Tcl/Tk

Software yang dibuat pada Tcl/Tk merupakan script


menggunakan ekstensi. File script dapat dibuat dari berbagai editor.
Dalam hal ini bisa digunakan editor notepad, wordpad, dsb. Untuk
penyimpanan file, pada akhir nama file harus ditambahkan “.tcl”.

#/usr/local/bin/wish
# 'info sharedlibext' returns .dll on Windows and
.so on most Unix systems
load square

set f [snack::filter generator 440.0 30000 0.0 sine


5000]
snack::sound s
snack::sound u
wm resizable . 0 0
proc Beep {freq} {
$::f configure $freq
s stop
s play -filter $::f
}

Pemanggilan serta tampilan untuk nada C pada software Tcl/Tk


adala sebagai berikut :

s length 5000
pack [button .b1 -text C -height 10 -width 3 -
background white -command {s C;s play}] -side left
-pady 10

Sedangkan untuk memanggil nada C dari software Visual C++


adalah dengan menggunakan perintah -command {s C;s
play}]. Nama pemanggilan nadanya harus disesuaikan dengan
21

nada yang dituliskan pada Visual C++. Misalnya, pada Visual C++
dituliskan int C maka pemanggilan pada Tcl/Tk juga harus sama
yaitu s C.

3.3.3 Penggabungan Nada-nada Pada Visual C++

Penggabungan pada Visual C++ disimpan dalam bentuk


File.txt. Dalam program Visual C++ menggunakan perintah sebagai
berikut :

FILE *gabung;

Selain perintah di atas juga terdapat perintah yang lain yaitu :

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

Maksud dari program di atas adalah jika nada yang ditekan belum
ada maka akan dibuat file baru, tetapi jika nada tersebut sudah ada
maka akan disimpan dalam satu file secara berurutan.
Penggabungan nantinya akan dipanggil dalam software Tcl/Tk.
Program pada Visual C++ yang akan dipanggil adalah sebagai
berikut :

int Gabung(ClientData cdata, Tcl_Interp *interp,


int objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float x[50000];

gabung=fopen("gabungan.txt","r");
/* Get the sound structure for this sound.
*/
sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
fscanf(gabung,"%f",&dat.x[i]);
fclose(gabung);
22

return TCL_OK;
}

Kemudian program di atas akan dibaca dengan program sebagai


berikut. Jika tidak ditambah program Baca maka program, gabung
tidak akan bisa bekerja.

int Baca(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
int i;
Sound *sound;

Sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
Snack_SetSample(sound,0, i,
1000*dat.x[i]);

return TCL_OK;
}

Pemanggilan 2 program di atas tergabung dalam satu perintah pada


Tcl/Tk. Pemanggilan ini dimaksudkan agar penggabungan nada-nada
tunggal tersebut bisa dibaca oleh software Tcl/Tk.

3.3.4 Pemanggilan Gabungan Pada Tcl/Tk

Program Gabung pada Visual C++ nantinya akan dipanggil


pada Tcl/Tk. Program yang digunakan juga seperti halnya
pemanggilan nada-nada. Programnya adalah sebagai berikut :

u
button .agabungan -text Gabung -command {u gabung;u
baca}
pack .agabungan -side bottom -pady 5

3.3.5 Penyimpanan Gabungan Nada-Nada Dalam WAV

Program nada-nada yang telah digabungkan nantinya akan


diputar dalam bentuk WAV. Program untuk menyimpan
penggabungan nada-nada tersebut sehingga menjadi WAV dan dapat
23

diputar menggunakan Windows Media Player dibuat pada software


Tcl/Tk. Program tersebut adalah sebagai berikut :

u length 60000
button .agabungan -text Gabung -command {u gabung;u
baca;u write hasil.wav}
pack .agabungan -side bottom -pady 5

Program ini merupakan lanjutan dari program pemanggilan program


Gabungan pada Visual C++. Sehingga program tersebut dapat ditulis
dalam satu baris.

3.3.6 Pembuatan Tampilan

Untuk membuat tampilan pada Proyek Akhir ini 100%


menggunakan software Tcl/Tk. Tampilan yang dibuat adalah seperti
di bawah ini.

Gambar 3.7 Contoh Tampilan

Program yang digunakan untuk membuat tuts-tuts piano tersebut


misalnya adalah sebagai berikut :

pack [button .b1 -text C -height 10 -width 3 -


background white -command {s C;s play}] -side left
-pady 10

Program di atas adalah program untuk membuat tombol dari nada C.


Program tersebut langsung digabung jadi satu dengan program
pemanggil suara nada C pada software Visual C++. Maksuddari
perintah-perintah di atas adalah sebagai berikut :

-text C digunakan untuk menuliskan teks pada tombol


24

-height 10 digunakan untuk membuat panjang tombol (vertikal)


-width 3 digunakan untuk membuat lebar tombol (horisontal)
-background white digunakan untuk warna tombol
-side left digunakan untuk posisi tombol yang berurutan ke kiri
-pady 10 digunakan untuk membuat jarak antar tombol

Sedangkan untuk membuat tuts-tuts piano yang berwrna hitam harus


mengatur posisinya dengan menentukan nilai posisinya, misalnya
yaitu sebagai berikut :

pack [button .b30 -text Cis -height 4 -width 1 -


background black -command {s Cis;s play}] -side
left -pady 10
place .b30 -relx 0.023 -rely 0.04

Begitu tuts-tuts yang berwarna hitam, programnya juga sama


digabung jadi satu dengan program pemanggil suara nadanya pada
software Visual C++. Perintah-perintah yang digunakan juga sama
hanya saja -background white diganti dengan -background
black untuk membuat warna hitam pada tombol.

Untuk membuat teks di bawah tuts-tuts piano digunakan perintah


yang lain, yaitu sebagai berikut :

label .a1 -text "Created By DEVI DYAH PALUPI" -


foreground darkgoldenrod
pack .a1 -side bottom -before .agabungan -padx 5

label .a2 -text "7203.030.015" -foreground


darkgoldenrod
pack .a2 -side bottom -before .a1 -padx 5

label .a3 -text "Jurusan Telekomunikasi" -


foreground darkgoldenrod
pack .a3 -side bottom -before .a2 -padx 5

label .a4 -text "Poleteknik Elektronika Negeri


Surabaya (PENS)" -foreground darkgoldenrod
pack .a4 -side bottom -before .a3 -padx 5

label .a5 -text "Institut Teknolologi Sepuluh


Nopember (ITS)" -foreground darkgoldenrod
25

pack .a5 -side bottom -before .a4 -padx 5

label .a6 -text "Surabaya 2006" -foreground


darkgoldenrod
pack .a6 -side bottom -before .a5 -padx 5
26

*****Halaman ini sengaja dikosongkan*****


BAB IV
PENGUJIAN PERANGKAT LUNAK
Bab IV merupakan hasil pengujian perangkat lunak sekaligus
analisa proses kerja Proyek Akhir apakah telah sesuai dengan keinginan
yang diharapkan.

4.1 GAMBARAN UMUM

Pembuatan Komposer ini memungkinkan pengguna dapat


membuat intro atau reff sebuah lagu dengan mudah, bahkan dapat
berupa lagu yang utuh. Pengguna hanya menginputkan nada-nada dari
lagu tersebut. Caranya adalah menekan tuts-tuts piano yang ditampilkan
pada computer (PC). Setelah nada-nada yang diinginkan tersebut selesai
ditekan, selanjutnya ditekan tombol atau button gabung untuk
menggabungkan nada-nada tersebut menjadi sebuah lagu.

4.2 PENGUJIAN SISTEM

Pengujian sistem akan dilakukan dengan pembuatan beberapa


intro lagu. Seperti yang dijelaskan di atas intro lagu ini akan dibuat dari
nada-nada tunggal yang nantinya akan digabungkan dengan melalui
beberapa proses. Pengujian yang dilakukan antara lain :
1. Pengujian nada-nada tunggal dengan menggunakan beberapa nilai
jumlah data (panjang nada).
2. Pengujian penggabungan nada-nada tunggal.

4.2.1 Pengujian Nada-Nada Tunggal dengan Jumlah Data

Pengujian nada-nada tunggal dapat dilakukan dengan


menggunakan beberapa nilai jumlah data. Pengujian nada-nada tunggal
dengan menggunakan jumlah data (panjang nada) 1000 sampai dengan
10000. pengujiannya dilakukan dengan mengganti jumlah data pada
program Tcl/Tk dengan nilai 1000 - 10000. Sebagai hasilnya
panjangnya nada akan didengarkan pada speaker dengan menekan
tombol nada pada tampilan piano. Untuk penekanan satu nada diperoleh
nilai-nilai yang ditampilkan dalam bentuk file .txt sepanjang jumlah data
yang digunakan tersebut, dan salah satunya dapat dilihat pada lampiran.
Sebagai contoh, pengujian dilakukan pada nada C’. Sedangkan untuk

27
28

sinyal yang diperoleh dari pengujian nada C’ dengan jumlah data 1000
adalah sebagai berikut :

15

10

5
Amplitudo
0
0 200 400 600 800 1000 1200
-5

-10

-15
Jumlah data

Gambar 4.1 Sinyal nada C’ untuk jumlah data 1000

Untuk sinyal-sinyal yang diperoleh dari pengujuian nada C’


dengan menggunakan jumlah data 2000 – 10000 adalah sebagai berikut :

15

10

5
Amplitudo

0
0 500 1000 1500 2000 2500
-5

-10

-15
Jumlah Data

Gambar 4.2 Sinyal nada C’ untuk jumlah data 2000


15

10

5
Amplitudo

0
0 1000 2000 3000 4000
-5

-10

-15
Jumlah Data

Gambar 4.3 Sinyal nada C’ untuk jumlah data 3000


29

15

10

Amplitudo
0
0 1000 2000 3000 4000 5000
-5

-10

-15
Jumlah Data

Gambar 4.4 Sinyal nada C’ untuk jumlah data 4000

15

10

5
Amplitudo

0
0 1000 2000 3000 4000 5000 6000
-5

-10

-15
Jumlah Data

Gambar 4.5 Sinyal nada C’ untuk jumlah data 5000

15

10

5
Amplitudo

0
0 2000 4000 6000 8000
-5

-10

-15
Jumlah Data

Gambar 4.6 Sinyal nada C’ untuk jumlah data 6000


30

15

10

5
Amplitudo
0
0 2000 4000 6000 8000
-5

-10

-15
Jumlah Data

Gambar 4.7 Sinyal nada C’ untuk jumlah data 7000

15

10

5
Amplitudo

0
0 2000 4000 6000 8000 10000
-5

-10

-15
Jumlah Data

Gambar 4.8 Sinyal nada C’ untuk jumlah data 8000

15

10

5
Amplitudo

0
0 2000 4000 6000 8000 10000
-5

-10

-15
Jumlah Data

Gambar 4.9 Sinyal nada C’ untuk jumlah data 9000


31

15

10

Amplitudo
0
0 2000 4000 6000 8000 10000 12000
-5

-10

-15
Jumlah Data

Gambar 4.10 Sinyal nada C’ untuk jumlah data 10000

4.2.2 Pengujian Penggabungan Nada-Nada Tunggal

Setelah pengujian pembangkitan nada-nada tunggal selanjutnya


dilakukan pengujian penggabungan nada-nada tunggal yang telah
dibangkitkan. Pengujian penggabungan nada-nada tunggal akan
dilakukan dengan menggunakan jumlah data 1000, 5000, dan 10000.
pengujian dilakukan pada beberapa lagu.

1. Jumlah Data 1000


b. Untuk lagu Indonesia Raya
Nada-nada tunggal dari lagu Indonesia Raya yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :

NO Nada Sinyal
15

10

5
Amplitudo

0
1 C’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah data

15

10

5
Amplitudo

0
2 C’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah data
32

15

10

Amplitudo
0
3 F’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

Amplitudo
0
4 A’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
5 A’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
6 A’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
7 A’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
8 A’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data
33

15

10

Amplitudo
0
9 G’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

Amplitudo
0
10 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo
0
11 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
12 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

Sinyal yang diperoleh dari nada-nada reff lagu Indonesia Raya


yang telah digabung dengan jumlah data 1000 adalah sebagai
berikut :

15

10

5
Amplitudo

0
0 5000 10000 15000
-5

-10

-15
Jumlah Data

Gambar 4.11 Sinyal lagu Indonesia Raya dengan jumlah data 1000
34

b. Untuk lagu Gugur Bunga


Nada-nada tunggal dari lagu Gugur Bunga yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :

NO Nada Sinyal
15

10

Amplitudo
0
1 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo
0
2 G’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
3 F’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
4 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
5 F’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data
35

15

10

Amplitudo
0
6 D’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

Amplitudo
0
7 F’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

15

10

5
Amplitudo
0
8 E’ -5
0 200 400 600 800 1000 1200

-10

-15
Jumlah Data

Bentuk sinyal yang dihasilkan dari pengujian dari lagu Gugur


Bunga dengan jumlah data 1000 adalah sebagai berikut :

15

10

5
Amplitudo

0
0 2000 4000 6000 8000 10000
-5

-10

-15
Jumlah Data

Gambar 4.12 Sinyal lagu Gugur Bunga dengan jumlah data 1000

2. Jumlah Data 5000


a. Untuk lagu Indonesia Raya
Nada-nada tunggal dari lagu Indonesia Raya yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :
36

NO Nada Sinyal
15

10

Amplitudo
0
1 C’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

Amplitudo
0
2 C’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
3 F’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
4 A’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
5 A’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
6 A’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
7 A’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data
37

15

10

Amplitudo
0
8 A’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

Amplitudo
0
9 G’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

Amplitudo
0
10 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
11 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
12 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

Sinyal yang diperoleh dari nada-nada reff lagu Indonesia Raya


yang telah digabung dengan jumlah data 5000 adalah sebagai
berikut :
38

15

10

Amplitudo
0
0 10000 20000 30000 40000
-5

-10

-15
Jumlah Data

Gambar 4.12 Sinyal lagu Indonesia Raya dengan jumlah data 5000

b. Untuk lagu Gugur Bunga


Nada-nada tunggal dari lagu Gugur Bunga yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :

NO Nada Sinyal
15

10

5
Amplitudo

0
1 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
2 G’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
3 F’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
4 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data
39

15

10

Amplitudo
0
5 F’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

Amplitudo
0
6 D’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

Amplitudo
0
7 F’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
8 E’ -5
0 1000 2000 3000 4000 5000 6000

-10

-15
Jumlah Data

Bentuk sinyal yang dihasilkan dari pengujian dari lagu Gugur


Bunga dengan jumlah data 5000 adalah sebagai berikut :

15

10

5
Amplitudo

0
0 10000 20000 30000 40000
-5

-10

-15
Jumlah Data

Gambar 4.13 Sinyal lagu Gugur Bunga dengan jumlah data 5000
40

3. Jumlah Data 10000


a. Untuk lagu Indonesia Raya
Nada-nada tunggal dari lagu Indonesia Raya yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :

NO Nada Sinyal
15

10

Amplitudo
0
1 C’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
2 C’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
3 F’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
4 A’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
5 A’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
6 A’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data
41

15

10

Amplitudo
0
7 A’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

Amplitudo
0
8 A’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
9 G’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
10 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
11 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
12 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data
42

Sinyal yang diperoleh dari nada-nada reff lagu Indonesia Raya


yang telah digabung dengan jumlah data 10000 adalah sebagai
berikut :

15

10

5
Amplitudo

0
0 10000 20000 30000 40000
-5

-10

-15
Jumlah Data

Gambar 4.14 Sinyal lagu Indonesia Raya dengan jumlah data 10000

b. Untuk lagu Gugur Bunga


Nada-nada tunggal dari lagu Gugur Bunga yang akan
diinputkan dalam pengujian ini adalah sebagai berikut :

NO Nada Sinyal
15

10

5
Amplitudo

0
1 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
2 G’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data
43

15

10

Amplitudo
0
3 F’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

Amplitudo
0
4 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
5 F’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
6 D’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
7 F’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

15

10

5
Amplitudo

0
8 E’ -5
0 2000 4000 6000 8000 10000 12000

-10

-15
Jumlah Data

Bentuk sinyal yang dihasilkan dari pengujian dari lagu Gugur


Bunga dengan jumlah data 10000 adalah sebagai berikut :
44

15

10

5
plitudo

0
m

0 10000 20000 30000 40000


A

-5

-10

-15
Jumla h Da ta

Gambar 4.15 Sinyal lagu Gugur Bunga dengan jumlah data 10000

4.3 ANALISA HASIL PENGUJIAN


4.3.1 Analisa Pengujian Nada-Nada Tunggal dengan Jumlah Data

Setelah diadakan pengujian nada-nada tunggal dengan merubah


jumlah datanya dapat diketahui bahwa jumlah data akan mempengaruhi
panjang pendeknya nada. Semakin besar jumlah data yang digunakan
maka nada yang dihasilkan akan semakin panjang. Semakin besar
jumlah data juga akan mempengaruhi sinyal yang dihasilkan. Sinyal
nada yang dihasilkan akan semakin rapat. Hal ini dikarenakan data yang
dihasilkan dalam file .txt semakin banyak tetapi skala yang digunakan
untuk semua sinyal tetap. Sehingga bentuk sinyal yang dihasilkan hanya
terlihat seperti kotak.

4.3.2 Analisa Pengujian Penggabungan Nada-Nada Tunggal

Seperti halnya yang diketahui di atas, bahwa panjang pendeknya


nada dipengaruhi oleh jumlah data yang digunakan. Hal ini akan
menyebabkan banyak sedikitnya nada yang bisa tertampung pada
memori Tcl/Tk. Misalnya saja, bila kita menggunakan jumlah data 1000
maka nada yang bisa dihasilkan adalah 60 nada. Sebaliknya apabila kita
menggunakan jumlah data 10000 maka nada yang bisa tertampung
hanya 6 nada saja. Hal ini dikarenakan memori Tcl/Tk terbatas. Memori
Tcl/Tk maksimal yang bisa digunakan dalam proyek akhir ini adalah
60000. Jadi, jika kita menggunakan kecil yang semakin kecil maka daya
tampungnya akan semakin besar. Hal inilah yang menyebabkan kendala
dalam proyek akhir ini tidak bisa menghasilkan satu lagu utuh. Untuk
45

mengatasi hal tersebut adalah dengan penambahan memori, yaitu


dengan cara menambahkan perintah calloc pada program Visual C++,
sehingga jumlah data pada Tcl/Tk dapat ditambah. Dengan demikian,
durasi waktunya bisa diatur dari penambahan perintah tersebut.
Selain jumlah data mempengaruhi panjang pendeknya nada, juga
akan mempengaruhi kualitas gabungan nada-nada yang telah dihasilkan.
Jika kita menggunakan jumlah data yang kecil maka tempo gabungan
nada yang dihasilkan sangat cepat. Jika sebuah lagu yang dihasilkan
sangat cepat maka akan tidak enak didengar. Sebaliknya jika jumlah
data yang digunakan itu besar maka lagu yang dihasilkan akan terdengar
lamban. Lagu seperti ini juga kurang enak didengar. Dalam pengujian
penggabungan nada-nada tunggal dalam proyek akhir ini, jumlah data
yang paling sesuai digunakan adalah jumlah data 10000. Akan tetapi
penggunaan jumlah data juga harus disesuaikan dengan tempo yang
digunakan dalam sebuah lagu.
Pada proyek akhir ini dilakukan pengujian terhadap 2 lagu yaitu
lagu Indonesia Raya dan Gugur Bunga. Indonesia Raya merupakan lagu
dengan tempo yang lebih cepat daripada lagu Gugur Bunga. Oleh karena
itu, lagu Indonesia Raya memerlukan jumlah data yang lebih kecil
daripada lagu Gugur Bunga. Nilai jumlah data yang sangat kecil akan
menghasilkan kualitas lagu yang kurang baik karena temponya sangat
cepat, sehingga suaranya tidak seperti lagu yang diharapkan.
Dari pengujian yang dilakukan dapat diketahui bahwa kesalahan
terjadi pada pengujian penggabungan nada-nada tunggal adalah terdapat
pada sinyal yang dihasilkan pada gabungan nada-nada dengan jumlah
data 5000 dan 10000. sinyalnya terpotong hanya sampai jumlah data ke
30000.
46

*****Halaman ini sengaja dikosongkan*****


BAB V
PENUTUP
Pada bab kelima ini merupakan akhir dari penulisan Proyek Akhir.
Dari berbagai uraian dan pernyataan dalam bab-bab sebelumnya, ada
beberapa hal yang perlu dicatat sebagai kesimpulan dan juga saran-saran
untuk perbaikan dan pengembangan perangkat lunak ini di masa yang
akan datang.

5.1 KESIMPULAN

¾ Berdasarkan uji coba yang dilakukan, hasil dari komposer ini akan
menghasilkan intro dari sebuah lagu berdasarkan nada-nada yang
telah ditentukan, yaitu nada-nada yang telah ditekan pada tampilan
piano pada komputer yang telah digabung dan diputar pada
Windows Media Player dalam bentuk WAV.
¾ Kegagalan dalam proyek akhir ini adalah belum bisa membuat
lagu dengan ketukan.

5.2 SARAN

¾ Dalam pembuatan intro lagu dengan input nada-nada tunggal lebih


mudah menggunakan program Visual C++ dan program Snack-
Tcl/Tk dengan menentukan formulasi dari nada-nada tunggal
tersebut beserta dengan frekuensi yang digunakan.
¾ Dengan penggunaan nada-nada tunggal mungkin di masa yang
akan datang akan lebih dikembangkan dengan menggunakan atau
menambahkan fitur-fitur yang lainnya, agar Proyek Akhir yang
akan dibuat sesuai dengan yang diharapkan dan hasil yang
memuaskan.

47
48

*****Halaman ini sengaja dikosongkan*****


DAFTAR PUSTAKA

[1] Ratnawati Linda, “Pembuatan 10 Channel Digital Audio


Equalizer dan Digital Audio Effects Berbasis Perangkat Lunak” ,
Proyek Akhir PENS-ITS. 2004
[2] http://wiryana.pandu.org/artikel/dsp_02/
[3] http://en.wikipedia.org/wiki/Composer
[4] Bima Sena Bayu Dewantara, “Pelatihan Digital Signal
Processing”, PENS – ITS. 2004
[5] Dwinardani Shinta, “Perangkat Lunak Untuk kompresi Audio
Dengan Differential PCM”, Proyek Akhir PENS-ITS. 2005
[6] Syarif Iwan, Sigit Riyanto, Helen Afrida, Sa’adah Umi, Muso
Toru, “Pemrograman 2 (Pemrograman C)” .PENS-ITS.2001
[7] http://library.thinkquest.org/18160/frequency.htm
[8] Lynn Ashley, “Equally Tempered Scale”,
http://ashley.net/music/notefreq.htm, 2001
[9] Ds. Soewito M, “Teknik Termudah Menulis dan Membaca Not
Balok”, Bogor.1993

49
50

*****Halaman ini sengaja dikosongkan*****


LAMPIRAN A
Listing Program Pada Visual C++

#include "snack.h"
#include "math.h"

struct data
{
float x[50000];
};

struct data dat;

int C(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float frek;
float x[50000];

frek=130.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

51
52

int D(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=146.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int E(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float frek;
float x[50000];

frek=164.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
53

gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int F(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=174.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
54

return TCL_OK;
}

int G(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=196.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int A(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=220.0;
55

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int B(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=246.9;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
56

Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int C1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=261.7;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int D1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];
57

frek=293.7;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int E1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=329.7;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
58

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int F1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=349.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int G1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
59

Sound *sound;
int i;
int frek;
float x[50000];

frek=392.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int A1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=440.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


60

sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int B1(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=493.9;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}
61

int C2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=523.3;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int D2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=587.4;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
62

gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int E2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=659.3;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
63

return TCL_OK;
}

int F2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=698.5;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int G2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=784.0;
64

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int A2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=880.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
65

Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int B2(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=987.7;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int C3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];
66

frek=1046.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int D3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1174.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
67

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int E3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1318.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int F3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
68

Sound *sound;
int i;
int frek;
float x[50000];

frek=1397.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int G3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1568.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


69

sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int A3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1760.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}
70

int B3(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1975.5;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int C4(ClientData cdata, Tcl_Interp *interp, int objc,


Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=2093.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
71

gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Nol(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
72

return TCL_OK;
}

int Cis(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=138.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Dis(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=155.6;
73

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Fis(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=185.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
74

Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Gis(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=207.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Ais(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];
75

frek=233.1;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Cis1(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=277.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
76

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Dis1(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=311.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Fis1(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
77

Sound *sound;
int i;
int frek;
float x[50000];

frek=370.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Gis1(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=415.3;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


78

sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Ais1(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=466.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}
79

int Cis2(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=554.4;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Dis2(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=622.3;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
80

gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Fis2(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=740.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
81

return TCL_OK;
}

int Gis2(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=830.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Ais2(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=932.3;
82

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Cis3(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1108.8;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
83

Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Dis3(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1244.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Fis3(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];
84

frek=1480.0;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Gis3(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1661.2;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{
85

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Ais3(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
int frek;
float x[50000];

frek=1864.6;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Cis4(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
86

Sound *sound;
int i;
int frek;
float x[50000];

frek=2217.7;

if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");

/* Get the sound structure for this sound. */


sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
{

x[i]=20*sin(2*3.14*frek/32000*i)*cos(2*3.14*fre
k/32000*i);
fprintf(gabung,"%f\n",x[i]);
Snack_SetSample(sound,0, i, 1000*x[i]);
}
fclose(gabung);
return TCL_OK;
}

int Gabung(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
FILE *gabung;
Sound *sound;
int i;
float x[50000];

gabung=fopen("gabungan.txt","r");
/* Get the sound structure for this sound. */
sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
fscanf(gabung,"%f",&dat.x[i]);
fclose(gabung);

return TCL_OK;
}
87

int Baca(ClientData cdata, Tcl_Interp *interp, int


objc, Tcl_Obj *CONST objv[])
{
int i;
Sound *sound;

sound = Snack_GetSound(interp,
Tcl_GetStringFromObj(objv[0], NULL));
for (i = 0; i < Snack_GetLength(sound); i++)
Snack_SetSample(sound,0, i,
1000*dat.x[i]);

return TCL_OK;
}

/*
Initialize the square package and create a new sound
command 'square'.
The syntax is: sndName square
*/
EXPORT(int, Square_Init)(Tcl_Interp *interp)

{
#ifdef USE_TCL_STUBS
if (Tcl_InitStubs(interp, "8", 0) == NULL)
{
return TCL_ERROR;
}
#endif
#ifdef USE_TK_STUBS
if (Tk_InitStubs(interp, "8", 0) == NULL)
{
return TCL_ERROR;
}
#endif
#ifdef USE_SNACK_STUBS
if (Snack_InitStubs(interp, "2", 0) == NULL)
{
return TCL_ERROR;
}
#endif

if (Tcl_PkgProvide(interp, "square", "1.0") !=


TCL_OK)
{
88

return TCL_ERROR;
}
Snack_AddSubCmd(SNACK_SOUND_CMD, "C",
(Snack_CmdProc *) C, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "D",
(Snack_CmdProc *) D, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "E",
(Snack_CmdProc *) E, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "F",
(Snack_CmdProc *) F, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "G",
(Snack_CmdProc *) G, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "A",
(Snack_CmdProc *) A, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "B",
(Snack_CmdProc *) B, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "C1",
(Snack_CmdProc *) C1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "D1",
(Snack_CmdProc *) D1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "E1",
(Snack_CmdProc *) E1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "F1",
(Snack_CmdProc *) F1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "G1",
(Snack_CmdProc *) G1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "A1",
(Snack_CmdProc *) A1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "B1",
(Snack_CmdProc *) B1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "C2",
(Snack_CmdProc *) C2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "D2",
(Snack_CmdProc *) D2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "E2",
(Snack_CmdProc *) E2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "F2",
(Snack_CmdProc *) F2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "G2",
(Snack_CmdProc *) G2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "A2",
(Snack_CmdProc *) A2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "B2",
(Snack_CmdProc *) B2, NULL);
89

Snack_AddSubCmd(SNACK_SOUND_CMD, "C3",
(Snack_CmdProc *) C3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "D3",
(Snack_CmdProc *) D3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "E3",
(Snack_CmdProc *) E3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "F3",
(Snack_CmdProc *) F3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "G3",
(Snack_CmdProc *) G3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "A3",
(Snack_CmdProc *) A3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "B3",
(Snack_CmdProc *) B3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "C4",
(Snack_CmdProc *) C4, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Nol",
(Snack_CmdProc *) Nol, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Cis",
(Snack_CmdProc *) Cis, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Dis",
(Snack_CmdProc *) Dis, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Fis",
(Snack_CmdProc *) Fis, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Gis",
(Snack_CmdProc *) Gis, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Ais",
(Snack_CmdProc *) Ais, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Cis1",
(Snack_CmdProc *) Cis1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Dis1",
(Snack_CmdProc *) Dis1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Fis1",
(Snack_CmdProc *) Fis1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Gis1",
(Snack_CmdProc *) Gis1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Ais1",
(Snack_CmdProc *) Ais1, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Cis2",
(Snack_CmdProc *) Cis2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Dis2",
(Snack_CmdProc *) Dis2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Fis2",
(Snack_CmdProc *) Fis2, NULL);
90

Snack_AddSubCmd(SNACK_SOUND_CMD, "Gis2",
(Snack_CmdProc *) Gis2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Ais2",
(Snack_CmdProc *) Ais2, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Cis3",
(Snack_CmdProc *) Cis3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Dis3",
(Snack_CmdProc *) Dis3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Fis3",
(Snack_CmdProc *) Fis3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Gis3",
(Snack_CmdProc *) Gis3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Ais3",
(Snack_CmdProc *) Ais3, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "Cis4",
(Snack_CmdProc *) Cis4, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "gabung",
(Snack_CmdProc *) Gabung, NULL);
Snack_AddSubCmd(SNACK_SOUND_CMD, "baca",
(Snack_CmdProc *) Baca, NULL);
return TCL_OK;
}
LAMPIRAN B
Listing Program Pada Tcl/Tk

#/usr/local/bin/wish
# 'info sharedlibext' returns .dll on Windows and .so
on most Unix systems
load square

set f [snack::filter generator 440.0 30000 0.0 sine


5000]
snack::sound s
snack::sound u
wm resizable . 0 0
proc Beep {freq} {
$::f configure $freq
s stop
s play -filter $::f
}

pack [frame .a] -side left

u length 60000
button .agabungan -text Gabung -command {u gabung;u
baca;u write hasil.wav}
pack .agabungan -side bottom -pady 5

label .a1 -text "Created By DEVI DYAH PALUPI" -


foreground darkgoldenrod
pack .a1 -side bottom -before .agabungan -padx 5

label .a2 -text "7203.030.015" -foreground


darkgoldenrod
pack .a2 -side bottom -before .a1 -padx 5

label .a3 -text "Jurusan Telekomunikasi" -foreground


darkgoldenrod
pack .a3 -side bottom -before .a2 -padx 5

label .a4 -text "Poleteknik Elektronika Negeri


Surabaya (PENS)" -foreground darkgoldenrod
pack .a4 -side bottom -before .a3 -padx 5

91
92

label .a5 -text "Institut Teknolologi Sepuluh Nopember


(ITS)" -foreground darkgoldenrod
pack .a5 -side bottom -before .a4 -padx 5

label .a6 -text "Surabaya 2006" -foreground


darkgoldenrod
pack .a6 -side bottom -before .a5 -padx 5

pack [frame .b]

s length 10000
pack [button .b1 -text C -height 10 -width 3 -
background white -command {s C;s play}] -side left -
pady 10
pack [button .b2 -text D -height 10 -width 3 -
background white -command {s D;s play}] -side left -
pady 10
pack [button .b3 -text E -height 10 -width 3 -
background white -command {s E;s play}] -side left -
pady 10
pack [button .b4 -text F -height 10 -width 3 -
background white -command {s F;s play}] -side left -
pady 10
pack [button .b5 -text G -height 10 -width 3 -
background white -command {s G;s play}] -side left -
pady 10
pack [button .b6 -text A -height 10 -width 3 -
background white -command {s A;s play}] -side left -
pady 10
pack [button .b7 -text B -height 10 -width 3 -
background white -command {s B;s play}] -side left -
pady 10
pack [button .b8 -text C' -height 10 -width 3 -
background white -command {s C1;s play}] -side left -
pady 10
pack [button .b9 -text D' -height 10 -width 3 -
background white -command {s D1;s play}] -side left -
pady 10
pack [button .b10 -text E' -height 10 -width 3 -
background white -command {s E1;s play}] -side left -
pady 10
pack [button .b11 -text F' -height 10 -width 3 -
background white -command {s F1;s play}] -side left -
pady 10
93

pack [button .b12 -text G' -height 10 -width 3 -


background white -command {s G1;s play}] -side left -
pady 10
pack [button .b13 -text A' -height 10 -width 3 -
background white -command {s A1;s play}] -side left -
pady 10
pack [button .b14 -text B' -height 10 -width 3 -
background white -command {s B1;s play}] -side left -
pady 10
pack [button .b15 -text C'' -height 10 -width 3 -
background white -command {s C2;s play}] -side left -
pady 10
pack [button .b16 -text D'' -height 10 -width 3 -
background white -command {s D2;s play}] -side left -
pady 10
pack [button .b17 -text E'' -height 10 -width 3 -
background white -command {s E2;s play}] -side left -
pady 10
pack [button .b18 -text F'' -height 10 -width 3 -
background white -command {s F2;s play}] -side left -
pady 10
pack [button .b19 -text G'' -height 10 -width 3 -
background white -command {s G2;s play}] -side left -
pady 10
pack [button .b20 -text A'' -height 10 -width 3 -
background white -command {s A2;s play}] -side left -
pady 10
pack [button .b21 -text B'' -height 10 -width 3 -
background white -command {s B2;s play}] -side left -
pady 10
pack [button .b22 -text C''' -height 10 -width 3 -
background white -command {s C3;s play}] -side left -
pady 10
pack [button .b23 -text D''' -height 10 -width 3 -
background white -command {s D3;s play}] -side left -
pady 10
pack [button .b24 -text E''' -height 10 -width 3 -
background white -command {s E3;s play}] -side left -
pady 10
pack [button .b25 -text F''' -height 10 -width 3 -
background white -command {s F3;s play}] -side left -
pady 10
pack [button .b26 -text G''' -height 10 -width 3 -
background white -command {s G3;s play}] -side left -
pady 10
94

pack [button .b27 -text A''' -height 10 -width 3 -


background white -command {s A3;s play}] -side left -
pady 10
pack [button .b28 -text B''' -height 10 -width 3 -
background white -command {s B3;s play}] -side left -
pady 10
pack [button .b29 -text C'''' -height 10 -width 3 -
background white -command {s C4;s play}] -side left -
pady 10
pack [button .b52 -text nol -height 10 -width 3 -
background grey -command {s Nol;s play}] -side left -
pady 10

pack [button .b30 -text Cis -height 4 -width 1 -


background black -command {s Cis;s play}] -side left
-pady 10
pack [button .b31 -text Dis -height 4 -width 1 -
background black -command {s Dis;s play}] -side left
-pady 10
pack [button .b32 -text Fis -height 4 -width 1 -
background black -command {s Fis;s play}] -side left
-pady 10
pack [button .b33 -text Gis -height 4 -width 1 -
background black -command {s Gis;s play}] -side left
-pady 10
pack [button .b34 -text Ais -height 4 -width 1 -
background black -command {s Ais;s play}] -side left
-pady 10
pack [button .b35 -text Cis' -height 4 -width 1 -
background black -command {s Cis1;s play}] -side left
-pady 10
pack [button .b36 -text Dis' -height 4 -width 1 -
background black -command {s Dis1;s play}] -side left
-pady 10
pack [button .b37 -text Fis' -height 4 -width 1 -
background black -command {s Fis1;s play}] -side left
-pady 10
pack [button .b38 -text Gis' -height 4 -width 1 -
background black -command {s Gis1;s play}] -side left
-pady 10
pack [button .b39 -text Ais' -height 4 -width 1 -
background black -command {s Ais1;s play}] -side left
-pady 10
95

pack [button .b40 -text Cis'' -height 4 -width 1 -


background black -command {s Cis2;s play}] -side left
-pady 10
pack [button .b41 -text Dis'' -height 4 -width 1 -
background black -command {s Dis2;s play}] -side left
-pady 10
pack [button .b42 -text Fis'' -height 4 -width 1 -
background black -command {s Fis2;s play}] -side left
-pady 10
pack [button .b43 -text Gis'' -height 4 -width 1 -
background black -command {s Gis2;s play}] -side left
-pady 10
pack [button .b44 -text Ais'' -height 4 -width 1 -
background black -command {s Ais2;s play}] -side left
-pady 10
pack [button .b45 -text Cis''' -height 4 -width 1 -
background black -command {s Cis3;s play}] -side left
-pady 10
pack [button .b46 -text Dis''' -height 4 -width 1 -
background black -command {s Dis3;s play}] -side left
-pady 10
pack [button .b47 -text Fis''' -height 4 -width 1 -
background black -command {s Fis3;s play}] -side left
-pady 10
pack [button .b48 -text Gis''' -height 4 -width 1 -
background black -command {s Gis3;s play}] -side left
-pady 10
pack [button .b49 -text Ais''' -height 4 -width 1 -
background black -command {s Ais3;s play}] -side left
-pady 10
pack [button .b50 -text Cis'''' -height 4 -width 1 -
background black -command {s Cis4;s play}] -side left
-pady 10

place .b30 -relx 0.023 -rely 0.04


place .b31 -relx 0.056 -rely 0.04
place .b32 -relx 0.123 -rely 0.04
place .b33 -relx 0.156 -rely 0.04
place .b34 -relx 0.190 -rely 0.04
place .b35 -relx 0.255 -rely 0.04
place .b36 -relx 0.290 -rely 0.04
place .b37 -relx 0.355 -rely 0.04
place .b38 -relx 0.390 -rely 0.04
place .b39 -relx 0.423 -rely 0.04
place .b40 -relx 0.488 -rely 0.04
96

place .b41 -relx 0.523 -rely 0.04


place .b42 -relx 0.588 -rely 0.04
place .b43 -relx 0.623 -rely 0.04
place .b44 -relx 0.656 -rely 0.04
place .b45 -relx 0.723 -rely 0.04
place .b46 -relx 0.756 -rely 0.04
place .b47 -relx 0.822 -rely 0.04
place .b48 -relx 0.855 -rely 0.04
place .b49 -relx 0.888 -rely 0.04
place .b50 -relx 0.955 -rely 0.04
LAMPIRAN C
Tampilan :

97
98

*****Halaman ini sengaja dikosongkan*****


LAMPIRAN D

Nilai nada C’ dengan jumlah data 1000

0.000000 -4.381244 7.876726 -9.779760 9.705608


1.025367 -5.279869 8.466932 -9.942225 9.407485
2.039925 -6.122835 8.967884 -9.999883 9.010194
3.032980 -6.901258 9.374300 -9.952127 8.517920
3.994062 -7.606930 9.681896 -9.799460 7.935855
4.913040 -8.232414 9.887430 -9.543491 7.270133
5.780227 -8.771115 9.988735 -9.186919 6.527773
6.586482 -9.217354 9.984743 -8.733503 5.716599
7.323304 -9.566429 9.875496 -8.188022 4.845164
7.982928 -9.814658 9.662147 -7.556226 3.922653
8.558399 -9.959426 9.346943 -6.844776 2.958792
9.043651 -9.999206 8.933207 -6.061171 1.963740
9.433570 -9.933578 8.425302 -5.213672 0.947987
9.724043 -9.763235 7.828581 -4.311213 -0.077759
9.912010 -9.489972 7.149335 -3.363307 -1.102685
9.995489 -9.116671 6.394723 -2.379946 -2.115988
9.973600 -8.647265 5.572701 -1.371497 -3.106984
9.846574 -8.086704 4.691934 -0.348591 -4.065228
9.615749 -7.440896 3.761707 0.677991 -4.980618
9.283559 -6.716649 2.791826 1.697425 -5.843505
8.853506 -5.921599 1.792514 2.698966 -6.644792
8.330124 -5.064125 0.774306 3.672055 -7.376033
7.718929 -4.153268 -0.252064 4.606436 -8.029519
7.026364 -3.198629 -1.275777 5.492257 -8.598361
6.259730 -2.210272 -2.286041 6.320181 -9.076562
5.427110 -1.198614 -3.272206 7.081481 -9.459083
4.537279 -0.174322 -4.223878 7.768131 -9.741890
3.599618 0.851808 -5.131023 8.372892 -9.922003
2.624011 1.868959 -5.984080 8.889391 -9.997522
1.620743 2.866408 -6.774054 9.312181 -9.967652
0.600390 3.833641 -7.492620 9.636806 -9.832707
-0.426292 4.760461 -8.132202 9.859845 -9.594110
-1.448480 5.637098 -8.686057 9.978945 -9.254376
-2.455399 6.454312 -9.148349 9.992852 -8.817087
-3.436434 7.203487 -9.514202 9.901418 -8.286851

99
100

0.000000 -8.232414 9.346943 -2.379946 -6.644792


1.025367 -8.771115 8.933207 -1.371497 -7.376033
2.039925 -9.217354 8.425302 -0.348591 -8.029519
3.032980 -9.566429 7.828581 0.677991 -8.598361
3.994062 -9.814658 7.149335 1.697425 -9.076562
4.913040 -9.959426 6.394723 2.698966 -9.459083
5.780227 -9.999206 5.572701 3.672055 -9.741890
6.586482 -9.933578 4.691934 4.606436 -9.922003
7.323304 -9.763235 3.761707 5.492257 -9.997522
7.982928 -9.489972 2.791826 6.320181 -9.967652
8.558399 -9.116671 1.792514 7.081481 -9.832707
9.043651 -8.647265 0.774306 7.768131 -9.594110
9.433570 -8.086704 -0.252064 8.372892 -9.254376
9.724043 -7.440896 -1.275777 8.889391 -8.817087
9.912010 -6.716649 -2.286041 9.312181 -8.286851
9.995489 -5.921599 -3.272206 9.636806 7.310482
9.973600 -5.064125 -4.223878 9.859845 7.971585
9.846574 -4.153268 -5.131023 9.978945 8.548654
9.615749 -3.198629 -5.984080 9.992852 9.035608
9.283559 -2.210272 -6.774054 9.901418 9.427312
8.853506 -1.198614 -7.492620 9.705608 9.719637
8.330124 -0.174322 -8.132202 9.407485 9.909503
7.718929 0.851808 -8.686057 9.010194 9.994906
7.026364 1.868959 -9.148349 8.517920 9.974948
6.259730 2.866408 -9.514202 7.935855 9.849839
5.427110 3.833641 -9.779760 7.270133 9.620896
4.537279 4.760461 -9.942225 6.527773 9.290535
3.599618 5.637098 -9.999883 5.716599 8.862236
2.624011 6.454312 99
-9.952127 4.845164 8.340516
1.620743 7.203487 -9.799460 3.922653 7.730874
0.600390 7.876726 -9.543491 2.958792 7.039736
-0.426292 8.466932 -9.186919 1.963740 6.274389
-1.448480 8.967884 -8.733503 0.947987 5.442900
-2.455399 9.374300 -8.188022 -0.077759 4.554034
-3.436434 9.681896 -7.556226 -1.102685 3.617161
-4.381244 9.887430 -6.844776 -2.115988 2.642158
-5.279869 9.988735 -6.061171 -3.106984 1.639303
-6.122835 9.984743 -5.213672 -4.065228 0.619166
-6.901258 9.875496 -4.311213 -4.980618 -0.407497
-7.606930 9.662147 -3.363307 -5.843505 -1.429865
101

-2.437160 9.367734 -8.198806 -0.058949 8.265735


-3.418763 9.677172 -7.568534 -1.083987 8.799275
-4.364327 9.884598 -6.858477 -2.097599 9.240056
-5.263884 9.987825 -6.076122 -3.089099 9.583432
-6.107952 9.985764 -5.229715 -4.048035 9.825785
-6.887632 9.878438 -4.328178 -4.964298 9.964558
-7.594706 9.666978 -3.381016 -5.828230 9.998289
-8.221720 9.353613 -2.398212 -6.630723 9.926623
-8.762065 8.941646 -1.390128 -7.363318 9.750314
-9.210043 8.435420 -0.367389 -8.018292 9.471222
-9.560933 7.840272 0.659222 -8.588741 9.092289
-9.811036 7.162475 1.678884 -9.068651 8.617508
-9.957716 6.409174 2.680848 -9.452964 8.051886
-9.999425 5.588311 3.654552 -9.737627 7.401384
-9.935725 4.708538 4.589731 -9.919641 6.672860
-9.767287 3.779130 5.476527 -9.997086 5.873994
-9.495886 2.809884 6.305592 -9.969146 5.013207
-9.124385 1.811017 7.068187 -9.836116 4.099572
-8.656697 0.793059 7.756271 -9.599398 3.142722
-8.097755 -0.233258 8.362593 -9.261487 2.152743
-7.453450 -1.257117 8.880759 -8.825946 1.140070
-6.730574 -2.267724 9.305309 -8.297365 0.115379
-5.936747 -3.254425 9.631766 -7.681318 -0.910528
-5.080337 -4.206820 9.856689 -6.984297 -1.926837
-4.170373 -5.114868 9.977707 -6.213651 -2.922833
-3.216446 -5.968998 9.993545 -5.377503 -3.888019
-2.228613 -6.760205 9.904035 -4.484668 -4.812219
-1.217288 -7.480149 9.710121 -3.544558 -5.685690
-0.193129 -8.121240 9.413848 -2.567082 -6.499226
0.833064 -8.676721 9.018337 -1.562546 -7.244249
1.850477 -9.140736 8.527760 -0.541538 -7.912907
2.848382 -9.508393 7.947286 0.485179 -8.498151
3.816260 -9.775817 7.283036 1.506782 -8.993810
4.743910 -9.940189 6.542011 2.512500 -9.394661
5.621551 -9.999775 5.732023 3.491733 -9.696478
6.439933 -9.953948 4.861611 4.434158 -9.896078
7.190427 -9.803191 3.939950 5.329839 -9.991359
7.865123 -9.549093 2.976755 6.169336 -9.981314
8.456908 -9.194333 1.982181 6.943798 -9.866052
8.959545 -8.742650 0.966712 7.645062 -9.646785
102

-9.325827 2.322650 6.688729 -9.916920 4.570773


-8.906560 1.313082 7.415709 -9.732752 3.634692
-8.393403 0.289672 8.064515 -9.445985 2.660296
-7.791767 -0.736792 8.628309 -9.059643 1.657856
-7.107994 -1.755489 9.101146 -8.577798 0.637940
-6.349292 -2.755680 9.478044 -8.005530 -0.388701
-5.523658 -3.726822 9.755028 -7.348871 -1.411245
-4.639796 -4.658677 9.929179 -6.614743 -2.418912
-3.707023 -5.541423 9.998661 -5.810886 -3.401079
-2.735172 -6.365754 9.962741 -4.945773 -4.347394
-1.734489 -7.122979 9.821799 -4.028524 -5.247881
-0.715521 -7.805118 9.577319 -3.068808 -6.093047
0.310989 -8.404978 9.231880 -2.076742 -6.873983
1.334221 -8.916236 8.789122 -1.062783 -7.582456
2.343389 -9.333504 8.253713 -0.037622 -8.210998
3.327853 -9.652382 7.631297 0.987936 -8.752983
4.277236 -9.869508 6.928435 2.003080 -9.202699
5.181531 -9.982595 6.152537 2.997109 -9.555403
6.031205 -9.990449 5.311782 3.959543 -9.807379
6.817300 -9.892989 4.415032 4.880237 -9.955970
7.531530 -9.691241 3.471740 5.749486 -9.999609
8.166366 -9.387332 2.491852 6.558126 -9.937837
8.715116 -8.984466 1.485695 7.297634 -9.771304
9.171995 -8.486890 0.463876 7.960213 -9.501767
9.532186 -7.899849 -0.562832 8.538879 -9.132066
9.791894 -7.229531 -1.583607 9.027532 -8.666099
9.948380 -6.483003 -2.587689 9.421021 -8.108778
9.999994 -5.668133 -3.564492 9.715197 -7.465977
9.946193 -4.793513 -4.503720 9.906960 -6.744474
9.787544 -3.868361 -5.395472 9.994288 -5.951873
9.525718 -2.902431 -6.230347 9.976261 -5.096531
9.163477 -1.905905 -6.999545 9.853069 -4.187462
8.704638 -0.889287 -7.694956 9.626010 -3.234252
8.154038 0.136704 -8.309250 9.297477 -2.246947
7.517483 1.161255 -8.835952 8.870935 -1.235956
6.801681 2.173565 -9.269510 8.350879 -0.211937
6.014179 3.162961 -9.605352 7.742792 0.814317
5.163279 4.119015 -9.839939 7.053084 1.831987
4.257949 5.031649 -9.970797 6.289025 2.830345
3.307734 5.891240 -9.996548 5.458670 3.798866
103

4.727342 -9.938117 6.556227 2.494288 -9.388199


5.605984 -9.999631 5.747427 3.474100 -9.691861
6.425530 -9.955734 4.878041 4.417289 -9.893356
7.177341 -9.806887 3.957232 5.313913 -9.990559
7.853492 -9.554661 2.994708 6.154521 -9.982446
8.446855 -9.201714 2.000615 6.930250 -9.869103
8.951174 -8.751766 0.985433 7.632923 -9.651724
9.361134 -8.209561 -0.040138 8.255133 -9.332600
9.672414 -7.580815 -1.065285 8.790322 -8.915097
9.881731 -6.872155 -2.079203 9.232846 -8.403614
9.986879 -6.091052 -3.071202 9.578043 -7.803544
9.986750 -5.245739 -4.030827 9.822271 -7.121213
9.881345 -4.345128 -4.947960 9.962958 -6.363813
9.671775 -3.398713 -5.812934 9.998619 -5.539329
9.360249 -2.416470 -6.616630 9.928880 -4.656451
8.950052 -1.408754 -7.350577 9.754474 -3.724487
8.445508 -0.386187 -8.007037 9.477241 -2.753261
7.851934 0.640451 -8.579091 9.100103 -1.753012
7.175589 1.660337 -9.060708 8.627036 -0.734283
6.423602 2.662721 -9.446810 8.063027 0.292187
5.603900 3.637036 -9.733329 7.414021 1.315576
4.725125 4.573011 -9.917243 6.686859 2.325097
3.796539 5.460778 -9.996614 5.889207 3.310108
2.827932 6.290981 -9.970605 5.029474 4.260226
1.829514 7.054867 -9.839490 4.116723 5.165433
0.811810 7.744384 -9.604652 3.160574 6.016189
-0.214452 8.352263 -9.268566 2.171109 6.803526
-1.238453 8.872096 -8.834774 1.158756 7.519142
-2.249399 9.298403 -8.307850 0.134189 8.155495
-3.236633 9.626691 -7.693349 -0.891794 8.705876
-4.189747 9.853498 -6.997747 -1.908375 9.164484
-5.098695 9.976434 -6.228379 -2.904839 9.526483
-5.953895 9.994203 -5.393353 -3.870681 9.788059
-6.746331 9.906617 -4.501474 -4.795721 9.946453
-7.467651 9.714601 -3.562141 -5.670206 9.999997
-8.110250 9.420177 -2.585258 -6.484918 9.948124
-8.667354 9.026449 -1.581123 -7.231269 9.791383
-9.133091 8.537569 -0.560320 -7.901391 9.531426
-9.502551 7.958690 0.466390 -8.488221 9.170992
-9.771839 7.295913 1.488183 -8.985571 8.713882
104

*****Halaman ini sengaja dikosongkan*****


RIWAYAT HIDUP
Penyusun lahir di Tulungagung, pada tanggal 20
Desember 1984. Sebagai anak ketiga dari 3 bersaudara
dari seorang ayah bernama purnomo dan ibu bernama
Tri Kristiani. Saat ini bertempat tinggal di Kendal,
Gondang, Tulungagung.

Riwayat pendidikan formal yang pernah ditempuh:


• SD Negeri Karanganom III (1991-1997)
• SLTP Negeri 1 Gondang lulus tahun 2000 (1997-2000)
• SMU Negeri 1 Boyolangu lulus tahun 2003 (2000-2003)
ƒ D3 Jurusan Telekomunikasi, Politeknik
Elektronika Negeri Surabaya, Institut
Teknologi Sepuluh Nopember Surabaya (ITS) (2003-2006)

Pada tanggal 2 Agustus 2006 mengikuti Seminar Proyek Akhir sebagai


salah satu persyaratan untuk mendapatkan gelar Ahli Madya (A.Md.) di
Politeknik Elektronika Negeri Surabaya, Institut Teknologi Sepuluh
Nopember Surabaya (ITS).

Anda mungkin juga menyukai