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ı.
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()