Bir önceki Ses (2) : Abracadabra yazısında sadece matematiksel fonksiyonları kullanarak herhangi bir enstrüman veya ses üreteci olmadan La sesini (4. oktavdaki A4 sesi) üretmiştik. Bir notayı üreten, bir çok notayı, o halde bir şarkıyı üretebilir. Şarkıyı üreten de Grammy ödülünü kapar.
Yiğitcan Akçelik’in ses ve müzik bilgisi ile yan yana gelince aşağıdaki tek sesli müzik üreteci yazılımı ortaya çıktı.
[python]
import numpy as np
import matplotlib.pyplot as plt
import wave
import struct
sample = int(48000/8)
sampling_rate = 48000.0
pi = 22/7
amplitude = 16000
channel = 1
data_size = 2
song_name = input(‘Şarkının adını giriniz: ‘)
song = input("Şarkının notalarını giriniz: ")
i = 0
x = len(song)
sound_file = wave.open(f'{song_name}.wav’, ‘w’)
sound_file.setparams(( channel,
data_size,
int(sampling_rate),
sample,
‘NONE’,
‘not compressed’ ))
frekans = {‘C’:65.41,’C#’:69.30,’D’:73.42,’D#’:77.78,’E’:82.41,’F’:87.31,’F#’:92.50,’G’:98.00,’G#’:103.83,’A’:110.00,’A#’:116.54,’B’:123.47}
while (i<x):
j=1
if song[i+1]==’#’:
note = song[i:i+2]
j=2
else:
note = song[i]
octave = 2**(int(song[i+j])-1)
beat = int(song[i+j+1])
print(note)
wave = [ np.sin( 2 * pi * octave*frekans[note] * x/sampling_rate) for x in range(12000*beat) ]
for s in wave:
sound_file.writeframes(struct.pack(‘h’, int(s * amplitude)))
i = i+j+2
sound_file.close()
[/python]