Dosen Pembimbing :
Oleh:
Devi Dyah Palupi
7203 030 015
Disetujui Oleh :
3. Ari Wijayanti, ST
NIP. 132 303 877
Mengetahui
Ketua Jurusan Tekomunikasi
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.
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.
iv
KATA PENGANTAR
Assalamu’alaikum WR.Wb.
Wassalamu’alaikum Wr.Wb.
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
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
viii
3.3.5. Penyimpanan Gabungan Nada-nada dalam WAV . 22
3.3.6. Pembuatan Tampilan .............................................. 23
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
2
1.2 TUJUAN
1.5 METODOLOGI
1. BAB I PENDAHULUAN
Bab ini berisi tentang latar belakang, tujuan, perumusan
masalah, batasan masalah, metodologi, dan sistematika
pembahasan.
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.
5
6
Syntax
Menciptakan Button
% button .b –text “Push Me”
• .b
% pack .b
Hasilnya adalah :
Packing Widgets
% button .b1 –text play
% button .b2 –text record
% button .b3 –text exit
% pack .b1 .b2 .b3 –side left
Hasilnya adalah :
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 :
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).
Frequency [ Hz ] = 440 × 2 n / 12
Dimana :
11
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
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
13
14
Gambar 3.3 Spesifikasi lokasi dari file Snack dan Tcl include
5. Spesifikasi librari dari Snack dan Tcl (Link tab, Category: Input,
Object/library modules) tclstub83.lib tkstub83.lib
16
7. Membangun Ekstensi
8. Menjalankan Ekstensi menggunakan script. Untuk lebih jelasnya
telah dipaparkan dalam teori penunjang pada bab sebelumnya.
#include "snack.h"
#include "math.h"
struct data
{
float x[50000];
};
frek=130.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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
frek=130.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
//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);
#/usr/local/bin/wish
# 'info sharedlibext' returns .dll on Windows and
.so on most Unix systems
load square
s length 5000
pack [button .b1 -text C -height 10 -width 3 -
background white -command {s C;s play}] -side left
-pady 10
nada yang dituliskan pada Visual C++. Misalnya, pada Visual C++
dituliskan int C maka pemanggilan pada Tcl/Tk juga harus sama
yaitu s C.
FILE *gabung;
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 :
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;
}
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;
}
u
button .agabungan -text Gabung -command {u gabung;u
baca}
pack .agabungan -side bottom -pady 5
u length 60000
button .agabungan -text Gabung -command {u gabung;u
baca;u write hasil.wav}
pack .agabungan -side bottom -pady 5
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
15
10
5
Amplitudo
0
0 500 1000 1500 2000 2500
-5
-10
-15
Jumlah Data
10
5
Amplitudo
0
0 1000 2000 3000 4000
-5
-10
-15
Jumlah Data
15
10
Amplitudo
0
0 1000 2000 3000 4000 5000
-5
-10
-15
Jumlah Data
15
10
5
Amplitudo
0
0 1000 2000 3000 4000 5000 6000
-5
-10
-15
Jumlah Data
15
10
5
Amplitudo
0
0 2000 4000 6000 8000
-5
-10
-15
Jumlah Data
15
10
5
Amplitudo
0
0 2000 4000 6000 8000
-5
-10
-15
Jumlah Data
15
10
5
Amplitudo
0
0 2000 4000 6000 8000 10000
-5
-10
-15
Jumlah Data
15
10
5
Amplitudo
0
0 2000 4000 6000 8000 10000
-5
-10
-15
Jumlah Data
15
10
Amplitudo
0
0 2000 4000 6000 8000 10000 12000
-5
-10
-15
Jumlah Data
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
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
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
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
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
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
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
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
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
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
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
15
10
5
plitudo
0
m
-5
-10
-15
Jumla h Da ta
Gambar 4.15 Sinyal lagu Gugur Bunga dengan jumlah data 10000
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
47
48
49
50
#include "snack.h"
#include "math.h"
struct data
{
float x[50000];
};
frek=130.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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
frek=146.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=164.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
53
gabung=fopen("gabungan.txt","a");
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;
}
frek=174.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=196.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=220.0;
55
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=246.9;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=261.7;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=293.7;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=329.7;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=349.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
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");
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;
}
frek=440.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=493.9;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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
frek=523.3;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=587.4;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
62
gabung=fopen("gabungan.txt","a");
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;
}
frek=659.3;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=698.5;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=784.0;
64
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=880.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=987.7;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1046.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1174.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1318.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
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");
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;
}
frek=1568.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1760.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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
frek=1975.5;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=2093.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
71
gabung=fopen("gabungan.txt","a");
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;
}
frek=0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=138.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=155.6;
73
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=185.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=207.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=233.1;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=277.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=311.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
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");
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;
}
frek=415.3;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=466.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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
frek=554.4;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=622.3;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
80
gabung=fopen("gabungan.txt","a");
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;
}
frek=740.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=830.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=932.3;
82
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1108.8;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1244.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1480.0;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1661.2;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
frek=1864.6;
if(fopen("gabungan.txt","r")==NULL)
gabung=fopen("gabungan.txt","w");
else
gabung=fopen("gabungan.txt","a");
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;
}
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");
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;
}
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
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
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
u length 60000
button .agabungan -text Gabung -command {u gabung;u
baca;u write hasil.wav}
pack .agabungan -side bottom -pady 5
91
92
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
97
98
99
100