Αφαιρετική Σύνθεση (Subtractive synthesis)
Ένα αλγόριθμος-πρόγραμμα που κάνει την δουλειά, δηλ. μετατροπή τόνου σε ήχο οργάνου εκτίθεται παρακάτω (σε γλώσσα MATLAB):
% Subtractive synthesis example MB 11/17/04
clear
f = 150; % fundamental frequency of synthesized tone
R = 22050; % sampling rate
tmax = 2; % time duration of sound
NFFT = 4096; % data for spectral analysis
NOVERLAP = 0;
Window = hamming(NFFT);
t = 0:1/R:tmax; % define the time vector
rawsound = zeros(1:tmax/R+1); % It's wise to set up an arrayof zeros for the sound array
for j = 1:30 % Create the harmonic rich starting sound
rawsound = rawsound + sin(2*pi*j*f*t);
end
low = 0.03; % Set the low and high frequency cutoffs of the bandpass filter
high = 0.1; % These are expressed as a fraction of the Nyquist frequency
order = 4; % define the order of the filter ? determines sharpness
[B,A] = butter(order,[low high]); % band pass Butterworth filter,
filtsound = filter(B,A,rawsound); % this does the filtering
soundsc(rawsound,R); % listen to the starting sound
pause(3)
soundsc(filtsound,R); % listen to the processed sound
% Compute spectrograms and plot
[B1,F,T] = specgram(rawsound,NFFT, R, Window, NOVERLAP);
subplot(211)
plot(F, abs(B1(:,1)))
axis([0 3000 0 1200])
[B2,F,T] = specgram(filtsound,NFFT, R, Window, NOVERLAP);
subplot(212)
plot(F,abs(B2(:,1)))
axis([0 3000 0 1200])
και το βρήκα στο:
http://66.102.7.104/search?q=cache:nPJ8USyNCvAJ:www.ece.rochester.edu:8080/courses/ECE140/ECE140_Labs/m_files/subsyn.m+subsyn.m&hl=el&client=firefox-a
και είναι από τον καθηγητή Mark F. Bocko: http://www.ece.rochester.edu/people/faculty/MBocko.php.
Εν περιλήψει το πρόγραμμα αυτό:
α. δημιουργεί σήμα από άθροισμα ημιτονοειδών κυματομορφών με συχνότητες πολλαπλάσιες της θεμελιώδους (η οποία δίνεται ως παράμετρος)
β. το παραπάνω σήμα περνάει από ένα ζωνοπερατό φίλτρο με κατάλληλες συχνότητες αποκοπής (που εξαρτώνται από τον ήχο του οργάνου που θέλεις να προσομοιώσεις).
Σχετική πληροφορία δίνεται στο:
http://66.102.7.104/search?q=cache:Fgt6E7XI594J:www.ece.rochester.edu:8080/courses/ECE140/ECE140_Labs/Lab9.html+matlab+%22subtractive+synthesis%22&hl=el&client=firefox-a
όπου τα βήματα για την παραγωγή του ήχου, σε μεγαλύτερη λεπτομέρεια είναι:
α. Προσδιόρισε το περίγραμμα του πλάτους του ήχου
β. Προσδιόρισε το χρονο-εξαρτώμενο φίλτρο
γ. Δημιούργησε κυματομορφή πλούσια σε αρμονικές
δ. Φιλτράρισε την κυματομορφή με το σχεδιασμένο φίλτρο.
Το (α) μάλλον ενδιαφέρει αν θέλεις να προσομοιώσεις ακριβώς το "attack" κτλ. όπως ανέφερε προηγουμένως ο Δημήτρης.
Για αυτό περισσότερες πληροφορίες εδώ:
http://www.harmony-central.com/MIDI/Doc/tutorial.html#tech
Επειδή δεν είμαι ειδικός (στην μουσικη σύνθεση), αν θέλετε προσαυξήστε ή διορθώστε τυχόν λανθασμένη πληροφορία.
Παναγιώτης
[ Το μήνυμα τροποποιήθηκε από τον/την : analogion στις 29-10-2005 23:52 ]