Ben Collver <
bencollver@tilde.pink> quoted:
"It struck me that, at least in theory, organ pipes should generate
quite primitive sound waves. If so, how come a church organ doesn't
sound like a chip tune, which is also built up from simple waveforms?
Well, actually it will, if you remove the church. And if you connect a >Commodore 64 home computer to a loudspeaker in a large hall, it will
sound like an organ."
I have written a small Python program to illustrate this.
But it only runs on the Microsoft® Windows platform!
Start it, and it should begin to play after about one minute.
Then try it again, this time with "reverb = False" where it
now reads "reverb = True" near the start of the source code.
# requires:
# - Python 3.9
# - winsound (i.e., Windows)
# Created 2021-08/2021-09 # Stefan Ram
# Cleaned up 2021-12/2022-01/2022-05 # Stefan Ram
# You are hereby licensed to keep and execute this program but not
# to redistribute it. - Stefan Ram 2023-02-18T17:42:50+01:00
import io
import math
import wave
import winsound
import random
import array
import sys
import time
from math import sin
anti_click = True # there are still some clicks!
sine = False
hull_curve = True
intro = True
reverb = True
noise = False
randomness_intensities = True
instrument = 0
if noise:
strong_noise = lambda x:( random.random() - 0.5 )* x/2 + x
weak_noise = lambda x:( random.random() - 0.5 )* x/5 + x
else:
strong_noise = lambda x: x
weak_noise = lambda x: x
def initialize_frame_buffer():
estimated_duration_in_seconds = 140
frame_buffer_size = estimated_duration_in_seconds * frames_per_second
global frame_values
frame_values =[ 0 ]* frame_buffer_size
del frame_buffer_size
global write_position
write_position = 0
def initialize_reverb_buffers():
global reverb_buffer_size
reverb_buffer_size = 10000
global reverb_buffer
reverb_buffer =[ 0.0 ]* reverb_buffer_size
global primary_reverb_buffer_position
primary_reverb_buffer_position = 0
global size_of_the_second_reverb_buffer
size_of_the_second_reverb_buffer =22768
global second_reverb_buffer
second_reverb_buffer =[ 0.0 ]*size_of_the_second_reverb_buffer
global second_reverb_buffer_position
second_reverb_buffer_position = 0
def initialize():
global frames_per_second
frames_per_second = 48000
print( "Program might need about 1 GB of main memory.\nPlease "+
"be patient." )
initialize_frame_buffer()
initialize_reverb_buffers()
record_signal_for_reverb( 0 )
global number_of_tones_or_pauses_inserted
number_of_tones_or_pauses_inserted = 0
def record_signal_for_reverb( signal ):
global reverb_buffer_is_initialized
global primary_reverb_buffer_position
global second_reverb_buffer_position
reverb_buffer[ primary_reverb_buffer_position ]= signal
primary_reverb_buffer_position += 1
primary_reverb_buffer_position %= reverb_buffer_size
second_reverb_buffer[ second_reverb_buffer_position ]= signal
second_reverb_buffer_position += 1
second_reverb_buffer_position %= size_of_the_second_reverb_buffer
return signal
def some_reverb():
return reverb_buffer[ primary_reverb_buffer_position ]* 0.3 +\
second_reverb_buffer[ second_reverb_buffer_position ]* 0.1
def free_reverb_buffer_memory():
global reverb_buffer
reverb_buffer = None
del reverb_buffer
global second_reverb_buffer
second_reverb_buffer = None
del second_reverb_buffer
def show_progress():
global number_of_tones_or_pauses_inserted
text = "Please stand by while I'm filling the buffer!"
if number_of_tones_or_pauses_inserted % 20 == 0:
cd = 545 + 69 - number_of_tones_or_pauses_inserted
cdp = int( cd / 620 * 100 )
print( "About "+ str( cdp )+" % to go. " + text )
number_of_tones_or_pauses_inserted += 1
def integral_duration_of( duration ):
"convert from duration in milliseconds to duration in frames"
return round( duration * frames_per_second / 1000 )
def hull_curve_of( frame_number, integral_duration ):
'''
preconditions:
frame_number <= integral_duration
integral_duration > -1
/`-.
ADSR
attack-decay-sustain-release curve
attack: rise to maximum_intensity until end_of_attack,
decay: then fall to 1 until end_of_decay,
sustain: then, sustain the value of 1 until
integral_duration - initial_duration,
release: finally, fall to 0 until integral_duration
'''
initial_duration = 600
maximum_intensity = 1.2
end_of_attack = maximum_intensity * initial_duration
end_of_decay = end_of_attack +( maximum_intensity - 1 )*\
initial_duration
if frame_number < end_of_attack: # A - attack from 0 to
# maximum_intensity, reaching 1 at initial_duration
hull_curve = frame_number / initial_duration
elif frame_number < end_of_decay:
# D - decay from maximum_intensity to 1
width_of_decay = end_of_decay - end_of_attack
goes_from_0_to_1 =( frame_number - end_of_attack )\
/width_of_decay
goes_from_maximum_intensity_to_0 = maximum_intensity *\
( end_of_decay - frame_number )/ width_of_decay
hull_curve = goes_from_0_to_1 +\
goes_from_maximum_intensity_to_0
elif integral_duration - initial_duration < frame_number:
# R release
hull_curve =( integral_duration - frame_number )\
/ initial_duration
else: # S - sustain at 1
hull_curve = 1
return hull_curve
def accompanying_hull_curve_of\
( frame_number, frequency_multiplier,
attack_duration, attack_duration_ ):
'''
/\
AD
attack-decay curve
attack: rise to maximum_intensity until ...
decay: then fall to 0 until ...
'''
if frame_number - frequency_multiplier < attack_duration_:
if frame_number < attack_duration:
# A - attack
hull_curve_for_accompanying_sound = \
frame_number / attack_duration
else:
# D - decay
hull_curve_for_accompanying_sound = \
1 -( frame_number - attack_duration )/attack_duration_
else:
hull_curve_for_accompanying_sound = 0
return hull_curve_for_accompanying_sound
def record_instrument_value( instrument_value ):
global write_position
frame_value = instrument_value
if reverb:
frame_value += some_reverb()
record_signal_for_reverb( frame_value )
frame_values[ write_position ]= round( 32767/3 * frame_value )
write_position+=1
class instrument0:
halftone_step = 2**( 1/12 )
base_duration = 4
attack_duration = base_duration * 60
release_duration = base_duration * 100
frequency_factor = 5 * halftone_step
base_duration_1 = 5
attack_duration_1 = base_duration_1 * 100
release_duration_1 = base_duration_1 * 240
frequency_factor_1 =( 12 + 5 )* halftone_step
frequency_multiplier = 0
def instrument_of( self, frame_number ):
current_angle = self.frequency_multiplier * frame_number
hull_curve = \
hull_curve_of( frame_number, self.integral_duration )
if sine:
if hull_curve:
frame_value = hull_curve *( sin( current_angle ) )
else:
frame_value = sin( current_angle )
else:
if hull_curve:
frame_value = \
hull_curve *\
( sin( current_angle )+
sin( 2 * current_angle )/3 +
sin( 4 * current_angle )/6 +
sin( 8 * current_angle )/12 )
if intro:
hull_curve_for_accompanying_sound = \
accompanying_hull_curve_of\
( frame_number, self.frequency_multiplier,
self.attack_duration, self.release_duration )
if hull_curve_for_accompanying_sound:
frame_value += \
strong_noise\
( self.intensity_of_first_accompanying_sound *
hull_curve_for_accompanying_sound *
sin( self.frequency_factor * current_angle ))
hull_curve_for_second_accompanying_sound = \
accompanying_hull_curve_of\
( frame_number, self.frequency_multiplier,
self.attack_duration_1, self.release_duration_1 )
if hull_curve_for_second_accompanying_sound:
frame_value += \
strong_noise\
( self.intensity_of_second_accompanying_sound * \
hull_curve_for_second_accompanying_sound * \
sin( self.frequency_factor_1 * current_angle ))
else:
frame_value =\
( sin( current_angle )+
sin( 2 * current_angle )/3 +
sin( 4 * current_angle )/6 +
sin( 8 * current_angle )/12 )
return weak_noise( frame_value )
class instrument1:
base_duration = 4
halftone_step = 2**( 1/12 )
attack_duration = base_duration * 10
release_duration = base_duration * 2400
frequency_factor = 5 * halftone_step
attack_duration_1 = base_duration * 100
release_duration_1 = base_duration * 240
attack_duration_2 = base_duration * 400
release_duration_2 = base_duration * 4800
halftone_step = 2**( 1/12 )
def instrument_of( self, frame_number ):
current_angle = self.frequency_multiplier * frame_number
hull_curve = \
accompanying_hull_curve_of\
( frame_number, self.frequency_multiplier,
self.attack_duration, self.release_duration )
hull_curve_1 = \
accompanying_hull_curve_of\
( frame_number, self.frequency_multiplier,
self.attack_duration_1, self.release_duration_1 )
hull_curve_2 = \
accompanying_hull_curve_of\
( frame_number, self.frequency_multiplier,\
self.attack_duration_2, self.release_duration_2 )
if hull_curve or hull_curve_1 or hull_curve_2:
frame_value =\
hull_curve *\
( sin( 1 * current_angle )+
sin( 1.4 * current_angle )/3 +
sin( 1.8 * current_angle )/6 +
sin( 2.1 * current_angle )/12 )
frame_value +=\
0.5 * hull_curve_1 *\
( sin( 1 * current_angle )+
sin( current_angle * self.halftone_step )/2+
sin( current_angle * 2 )/3 )
frame_value +=\
0.1 * hull_curve_2 *\
( sin( 2 * current_angle )+
sin( 2 * current_angle * self.halftone_step )/2+
sin( 2 * current_angle * 2 )/3 )
else:
frame_value = 0
return frame_value
instrument =[ instrument0, instrument1 ][ instrument ]
def append_note_to_frame_buffer( i, frequency, duration ):
frequency *= 0.75
show_progress()
i.frequency_multiplier = 2 * math.pi * frequency / frames_per_second
i.integral_duration = integral_duration_of( duration )
if randomness_intensities:
i.intensity_of_first_accompanying_sound = \
0.05 *( 1 + random.random() )/ 6
i.intensity_of_second_accompanying_sound = \
0.05 *( 1 + random.random() )/ 7
else:
i.intensity_of_first_accompanying_sound = \
0.05 *( 1 + .5 )/ 6
i.intensity_of_second_accompanying_sound = \
0.05 *( 1 + .5 )/ 7
for frame_number in range( i.integral_duration ):
instrument_value = i.instrument_of( frame_number )
record_instrument_value( instrument_value )
signum = 1 if instrument_value > 0 else -1
while instrument_value != 0 and anti_click:
# anti click - get near zero with the frame_value
# before quitting this tone
frame_number += 1
instrument_value = i.instrument_of( frame_number )
new_signum = 1 if instrument_value > 0 else -1
if new_signum != signum: break
record_instrument_value( instrument_value )
def append_silence_to_frame_buffer( duration_in_seconds ):
duration_in_milliseconds = duration_in_seconds * 1000
show_progress()
integral_duration = integral_duration_of( duration_in_milliseconds )
for _ in range( integral_duration ):
record_instrument_value( 0 )
def clear_screen():
print( "\n" * 200 )
def play_the_recording():
global frame_values
clear_screen()
free_reverb_buffer_memory()
stream = io.BytesIO()
writer = wave.Wave_write( stream )
writer.setnchannels( 1 )
writer.setsampwidth( 2 )
writer.setframerate( frames_per_second )
writer.writeframes( array.array( 'h', frame_values ).tobytes() )
frame_values = None
del frame_values
writer.close()
writer = None
del writer
winsound.PlaySound( stream.getbuffer(), winsound.SND_MEMORY )
stream = None
del stream
def play_BWV_846():
i = instrument()
append_note_to_frame_buffer( i, 392, 191 )
append_note_to_frame_buffer( i, 494, 198 )
append_note_to_frame_buffer( i, 587, 180 )
append_note_to_frame_buffer( i, 784, 179 )
append_note_to_frame_buffer( i, 988, 186 )
append_note_to_frame_buffer( i, 587, 185 )
append_note_to_frame_buffer( i, 784, 184 )
append_note_to_frame_buffer( i, 988, 177 )
append_silence_to_frame_buffer( 0.001374 )
append_note_to_frame_buffer( i, 392, 208 )
append_note_to_frame_buffer( i, 494, 179 )
append_note_to_frame_buffer( i, 587, 176 )
append_note_to_frame_buffer( i, 784, 180 )
append_note_to_frame_buffer( i, 988, 177 )
append_note_to_frame_buffer( i, 587, 177 )
append_note_to_frame_buffer( i, 784, 187 )
append_note_to_frame_buffer( i, 988, 181 )
append_silence_to_frame_buffer( 0.000381 )
append_note_to_frame_buffer( i, 392, 176 )
append_note_to_frame_buffer( i, 440, 193 )
append_note_to_frame_buffer( i, 660, 182 )
append_note_to_frame_buffer( i, 880, 183 )
append_note_to_frame_buffer( i, 1047, 183 )
append_note_to_frame_buffer( i, 660, 178 )
append_note_to_frame_buffer( i, 880, 184 )
append_note_to_frame_buffer( i, 1047, 181 )
append_silence_to_frame_buffer( 0.001690 )
append_note_to_frame_buffer( i, 392, 206 )
append_note_to_frame_buffer( i, 440, 205 )
append_note_to_frame_buffer( i, 660, 182 )
append_note_to_frame_buffer( i, 880, 180 )
append_note_to_frame_buffer( i, 1047, 187 )
append_note_to_frame_buffer( i, 660, 185 )
append_note_to_frame_buffer( i, 880, 188 )
append_note_to_frame_buffer( i, 1047, 187 )
append_silence_to_frame_buffer( 0.003452 )
append_note_to_frame_buffer( i, 370, 200 )
append_note_to_frame_buffer( i, 440, 200 )
append_note_to_frame_buffer( i, 587, 179 )
append_note_to_frame_buffer( i, 880, 186 )
append_note_to_frame_buffer( i, 1047, 187 )
append_note_to_frame_buffer( i, 587, 188 )
append_note_to_frame_buffer( i, 880, 189 )
append_note_to_frame_buffer( i, 1047, 184 )
append_silence_to_frame_buffer( 0.003140 )
append_note_to_frame_buffer( i, 370, 194 )
append_note_to_frame_buffer( i, 440, 187 )
append_note_to_frame_buffer( i, 587, 181 )
append_note_to_frame_buffer( i, 880, 178 )
append_note_to_frame_buffer( i, 1047, 185 )
append_note_to_frame_buffer( i, 587, 178 )
append_note_to_frame_buffer( i, 880, 177 )
append_note_to_frame_buffer( i, 1047, 188 )
append_silence_to_frame_buffer( 0.002649 )
append_note_to_frame_buffer( i, 392, 209 )
append_note_to_frame_buffer( i, 494, 206 )
append_note_to_frame_buffer( i, 587, 186 )
append_note_to_frame_buffer( i, 784, 183 )
append_note_to_frame_buffer( i, 988, 180 )
append_note_to_frame_buffer( i, 587, 186 )
append_note_to_frame_buffer( i, 784, 183 )
append_note_to_frame_buffer( i, 988, 183 )
append_silence_to_frame_buffer( 0.010631 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 494, 194 )
append_note_to_frame_buffer( i, 587, 186 )
append_note_to_frame_buffer( i, 784, 185 )
append_note_to_frame_buffer( i, 988, 185 )
append_note_to_frame_buffer( i, 587, 182 )
append_note_to_frame_buffer( i, 784, 180 )
append_note_to_frame_buffer( i, 988, 181 )
append_silence_to_frame_buffer( 0.005442 )
append_note_to_frame_buffer( i, 392, 212 )
append_note_to_frame_buffer( i, 494, 208 )
append_note_to_frame_buffer( i, 660, 182 )
append_note_to_frame_buffer( i, 988, 180 )
append_note_to_frame_buffer( i, 1320, 186 )
append_note_to_frame_buffer( i, 660, 184 )
append_note_to_frame_buffer( i, 988, 179 )
append_note_to_frame_buffer( i, 1320, 187 )
append_silence_to_frame_buffer( 0.007269 )
append_note_to_frame_buffer( i, 392, 226 )
append_note_to_frame_buffer( i, 494, 202 )
append_note_to_frame_buffer( i, 660, 187 )
append_note_to_frame_buffer( i, 988, 182 )
append_note_to_frame_buffer( i, 1320, 184 )
append_note_to_frame_buffer( i, 660, 179 )
append_note_to_frame_buffer( i, 988, 190 )
append_note_to_frame_buffer( i, 1320, 187 )
append_silence_to_frame_buffer( 0.002452 )
append_note_to_frame_buffer( i, 392, 229 )
append_note_to_frame_buffer( i, 440, 190 )
append_note_to_frame_buffer( i, 554, 181 )
append_note_to_frame_buffer( i, 660, 189 )
append_note_to_frame_buffer( i, 880, 185 )
append_note_to_frame_buffer( i, 554, 181 )
append_note_to_frame_buffer( i, 660, 185 )
append_note_to_frame_buffer( i, 880, 188 )
append_silence_to_frame_buffer( 0.007138 )
append_note_to_frame_buffer( i, 392, 210 )
append_note_to_frame_buffer( i, 440, 206 )
append_note_to_frame_buffer( i, 554, 188 )
append_note_to_frame_buffer( i, 660, 185 )
append_note_to_frame_buffer( i, 880, 181 )
append_note_to_frame_buffer( i, 554, 184 )
append_note_to_frame_buffer( i, 660, 190 )
append_note_to_frame_buffer( i, 880, 180 )
append_silence_to_frame_buffer( 0.009927 )
append_note_to_frame_buffer( i, 370, 208 )
append_note_to_frame_buffer( i, 440, 204 )
append_note_to_frame_buffer( i, 587, 191 )
append_note_to_frame_buffer( i, 880, 186 )
append_note_to_frame_buffer( i, 1175, 184 )
append_note_to_frame_buffer( i, 587, 186 )
append_note_to_frame_buffer( i, 880, 184 )
append_note_to_frame_buffer( i, 1175, 190 )
append_silence_to_frame_buffer( 0.006591 )
append_note_to_frame_buffer( i, 370, 199 )
append_note_to_frame_buffer( i, 440, 199 )
append_note_to_frame_buffer( i, 587, 189 )
append_note_to_frame_buffer( i, 880, 187 )
append_note_to_frame_buffer( i, 1175, 183 )
append_note_to_frame_buffer( i, 587, 190 )
append_note_to_frame_buffer( i, 880, 190 )
append_note_to_frame_buffer( i, 1175, 185 )
append_silence_to_frame_buffer( 0.011220 )
append_note_to_frame_buffer( i, 370, 193 )
append_note_to_frame_buffer( i, 392, 206 )
append_note_to_frame_buffer( i, 494, 181 )
append_note_to_frame_buffer( i, 587, 187 )
append_note_to_frame_buffer( i, 784, 183 )
append_note_to_frame_buffer( i, 494, 191 )
append_note_to_frame_buffer( i, 587, 188 )
append_note_to_frame_buffer( i, 784, 189 )
append_silence_to_frame_buffer( 0.004748 )
append_note_to_frame_buffer( i, 370, 197 )
append_note_to_frame_buffer( i, 392, 200 )
append_note_to_frame_buffer( i, 494, 185 )
append_note_to_frame_buffer( i, 587, 192 )
append_note_to_frame_buffer( i, 784, 185 )
append_note_to_frame_buffer( i, 494, 185 )
append_note_to_frame_buffer( i, 587, 183 )
append_note_to_frame_buffer( i, 784, 190 )
append_silence_to_frame_buffer( 0.021366 )
append_note_to_frame_buffer( i, 330, 219 )
append_note_to_frame_buffer( i, 392, 196 )
append_note_to_frame_buffer( i, 494, 183 )
append_note_to_frame_buffer( i, 587, 182 )
append_note_to_frame_buffer( i, 784, 182 )
append_note_to_frame_buffer( i, 494, 191 )
append_note_to_frame_buffer( i, 587, 192 )
append_note_to_frame_buffer( i, 784, 184 )
append_silence_to_frame_buffer( 0.003144 )
append_note_to_frame_buffer( i, 330, 189 )
append_note_to_frame_buffer( i, 392, 194 )
append_note_to_frame_buffer( i, 494, 191 )
append_note_to_frame_buffer( i, 587, 190 )
append_note_to_frame_buffer( i, 784, 189 )
append_note_to_frame_buffer( i, 494, 183 )
append_note_to_frame_buffer( i, 587, 187 )
append_note_to_frame_buffer( i, 784, 185 )
append_silence_to_frame_buffer( 0.020051 )
append_note_to_frame_buffer( i, 220, 207 )
append_note_to_frame_buffer( i, 330, 199 )
append_note_to_frame_buffer( i, 440, 189 )
append_note_to_frame_buffer( i, 554, 190 )
append_note_to_frame_buffer( i, 784, 184 )
append_note_to_frame_buffer( i, 440, 189 )
append_note_to_frame_buffer( i, 554, 194 )
append_note_to_frame_buffer( i, 784, 191 )
append_silence_to_frame_buffer( 0.028114 )
append_note_to_frame_buffer( i, 220, 201 )
append_note_to_frame_buffer( i, 330, 209 )
append_note_to_frame_buffer( i, 440, 188 )
append_note_to_frame_buffer( i, 554, 195 )
append_note_to_frame_buffer( i, 784, 184 )
append_note_to_frame_buffer( i, 440, 190 )
append_note_to_frame_buffer( i, 554, 184 )
append_note_to_frame_buffer( i, 784, 188 )
append_silence_to_frame_buffer( 0.029809 )
append_note_to_frame_buffer( i, 293, 227 )
append_note_to_frame_buffer( i, 370, 192 )
append_note_to_frame_buffer( i, 440, 192 )
append_note_to_frame_buffer( i, 587, 188 )
append_note_to_frame_buffer( i, 740, 186 )
append_note_to_frame_buffer( i, 440, 191 )
append_note_to_frame_buffer( i, 587, 191 )
append_note_to_frame_buffer( i, 740, 189 )
append_silence_to_frame_buffer( 0.015669 )
append_note_to_frame_buffer( i, 293, 221 )
append_note_to_frame_buffer( i, 370, 214 )
append_note_to_frame_buffer( i, 440, 191 )
append_note_to_frame_buffer( i, 587, 192 )
append_note_to_frame_buffer( i, 740, 191 )
append_note_to_frame_buffer( i, 440, 188 )
append_note_to_frame_buffer( i, 587, 186 )
append_note_to_frame_buffer( i, 740, 193 )
append_silence_to_frame_buffer( 0.019541 )
append_note_to_frame_buffer( i, 293, 207 )
append_note_to_frame_buffer( i, 349, 201 )
append_note_to_frame_buffer( i, 494, 193 )
append_note_to_frame_buffer( i, 587, 191 )
append_note_to_frame_buffer( i, 831, 188 )
append_note_to_frame_buffer( i, 494, 190 )
append_note_to_frame_buffer( i, 587, 185 )
append_note_to_frame_buffer( i, 831, 193 )
append_silence_to_frame_buffer( 0.022523 )
append_note_to_frame_buffer( i, 293, 225 )
append_note_to_frame_buffer( i, 349, 198 )
append_note_to_frame_buffer( i, 494, 192 )
append_note_to_frame_buffer( i, 587, 195 )
append_note_to_frame_buffer( i, 831, 196 )
append_note_to_frame_buffer( i, 494, 192 )
append_note_to_frame_buffer( i, 587, 194 )
append_note_to_frame_buffer( i, 831, 185 )
append_silence_to_frame_buffer( 0.025643 )
append_note_to_frame_buffer( i, 261, 212 )
append_note_to_frame_buffer( i, 330, 199 )
append_note_to_frame_buffer( i, 440, 187 )
append_note_to_frame_buffer( i, 660, 186 )
append_note_to_frame_buffer( i, 880, 196 )
append_note_to_frame_buffer( i, 440, 195 )
append_note_to_frame_buffer( i, 660, 194 )
append_note_to_frame_buffer( i, 880, 187 )
append_silence_to_frame_buffer( 0.013077 )
append_note_to_frame_buffer( i, 261, 190 )
append_note_to_frame_buffer( i, 330, 213 )
append_note_to_frame_buffer( i, 440, 192 )
append_note_to_frame_buffer( i, 660, 191 )
append_note_to_frame_buffer( i, 880, 191 )
append_note_to_frame_buffer( i, 440, 189 )
append_note_to_frame_buffer( i, 660, 191 )
append_note_to_frame_buffer( i, 880, 192 )
append_silence_to_frame_buffer( 0.006350 )
append_note_to_frame_buffer( i, 261, 225 )
append_note_to_frame_buffer( i, 311, 209 )
append_note_to_frame_buffer( i, 440, 197 )
append_note_to_frame_buffer( i, 523, 196 )
append_note_to_frame_buffer( i, 740, 195 )
append_note_to_frame_buffer( i, 440, 190 )
append_note_to_frame_buffer( i, 523, 197 )
append_note_to_frame_buffer( i, 740, 188 )
append_silence_to_frame_buffer( 0.002840 )
append_note_to_frame_buffer( i, 261, 221 )
append_note_to_frame_buffer( i, 311, 217 )
append_note_to_frame_buffer( i, 440, 187 )
append_note_to_frame_buffer( i, 523, 197 )
append_note_to_frame_buffer( i, 740, 194 )
append_note_to_frame_buffer( i, 440, 190 )
append_note_to_frame_buffer( i, 523, 188 )
append_note_to_frame_buffer( i, 740, 193 )
append_silence_to_frame_buffer( 0.010174 )
append_note_to_frame_buffer( i, 247, 234 )
append_note_to_frame_buffer( i, 293, 209 )
append_note_to_frame_buffer( i, 392, 188 )
append_note_to_frame_buffer( i, 587, 193 )
append_note_to_frame_buffer( i, 784, 191 )
append_note_to_frame_buffer( i, 392, 193 )
append_note_to_frame_buffer( i, 587, 197 )
append_note_to_frame_buffer( i, 784, 193 )
append_silence_to_frame_buffer( 0.017742 )
append_note_to_frame_buffer( i, 247, 221 )
append_note_to_frame_buffer( i, 293, 204 )
append_note_to_frame_buffer( i, 392, 187 )
append_note_to_frame_buffer( i, 587, 196 )
append_note_to_frame_buffer( i, 784, 189 )
append_note_to_frame_buffer( i, 392, 195 )
append_note_to_frame_buffer( i, 587, 198 )
append_note_to_frame_buffer( i, 784, 193 )
append_silence_to_frame_buffer( 0.035872 )
append_note_to_frame_buffer( i, 247, 212 )
append_note_to_frame_buffer( i, 261, 210 )
append_note_to_frame_buffer( i, 330, 192 )
append_note_to_frame_buffer( i, 392, 199 )
append_note_to_frame_buffer( i, 523, 195 )
append_note_to_frame_buffer( i, 330, 190 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 523, 190 )
append_silence_to_frame_buffer( 0.036867 )
append_note_to_frame_buffer( i, 247, 229 )
append_note_to_frame_buffer( i, 261, 196 )
append_note_to_frame_buffer( i, 330, 189 )
append_note_to_frame_buffer( i, 392, 196 )
append_note_to_frame_buffer( i, 523, 190 )
append_note_to_frame_buffer( i, 330, 199 )
append_note_to_frame_buffer( i, 392, 199 )
append_note_to_frame_buffer( i, 523, 196 )
append_silence_to_frame_buffer( 0.036948 )
append_note_to_frame_buffer( i, 220, 199 )
append_note_to_frame_buffer( i, 261, 207 )
append_note_to_frame_buffer( i, 330, 196 )
append_note_to_frame_buffer( i, 392, 191 )
append_note_to_frame_buffer( i, 523, 190 )
append_note_to_frame_buffer( i, 330, 191 )
append_note_to_frame_buffer( i, 392, 196 )
append_note_to_frame_buffer( i, 523, 193 )
append_silence_to_frame_buffer( 0.016865 )
append_note_to_frame_buffer( i, 220, 225 )
append_note_to_frame_buffer( i, 261, 218 )
append_note_to_frame_buffer( i, 330, 195 )
append_note_to_frame_buffer( i, 392, 196 )
append_note_to_frame_buffer( i, 523, 199 )
append_note_to_frame_buffer( i, 330, 200 )
append_note_to_frame_buffer( i, 392, 191 )
append_note_to_frame_buffer( i, 523, 197 )
append_silence_to_frame_buffer( 0.021891 )
append_note_to_frame_buffer( i, 146, 199 )
append_note_to_frame_buffer( i, 220, 201 )
append_note_to_frame_buffer( i, 293, 195 )
append_note_to_frame_buffer( i, 370, 196 )
append_note_to_frame_buffer( i, 523, 193 )
append_note_to_frame_buffer( i, 293, 196 )
append_note_to_frame_buffer( i, 370, 192 )
append_note_to_frame_buffer( i, 523, 194 )
append_silence_to_frame_buffer( 0.006195 )
append_note_to_frame_buffer( i, 146, 206 )
append_note_to_frame_buffer( i, 220, 212 )
append_note_to_frame_buffer( i, 293, 201 )
append_note_to_frame_buffer( i, 370, 200 )
append_note_to_frame_buffer( i, 523, 199 )
append_note_to_frame_buffer( i, 293, 198 )
append_note_to_frame_buffer( i, 370, 195 )
append_note_to_frame_buffer( i, 523, 201 )
append_silence_to_frame_buffer( 0.013161 )
append_note_to_frame_buffer( i, 196, 212 )
append_note_to_frame_buffer( i, 247, 206 )
append_note_to_frame_buffer( i, 293, 202 )
append_note_to_frame_buffer( i, 392, 191 )
append_note_to_frame_buffer( i, 494, 192 )
append_note_to_frame_buffer( i, 293, 197 )
append_note_to_frame_buffer( i, 392, 196 )
append_note_to_frame_buffer( i, 494, 192 )
append_silence_to_frame_buffer( 0.015321 )
append_note_to_frame_buffer( i, 196, 213 )
append_note_to_frame_buffer( i, 247, 196 )
append_note_to_frame_buffer( i, 293, 202 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 494, 192 )
append_note_to_frame_buffer( i, 293, 192 )
append_note_to_frame_buffer( i, 392, 195 )
append_note_to_frame_buffer( i, 494, 202 )
append_silence_to_frame_buffer( 0.024235 )
append_note_to_frame_buffer( i, 196, 242 )
append_note_to_frame_buffer( i, 293, 214 )
append_note_to_frame_buffer( i, 349, 201 )
append_note_to_frame_buffer( i, 392, 200 )
append_note_to_frame_buffer( i, 494, 196 )
append_note_to_frame_buffer( i, 349, 195 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 494, 198 )
append_silence_to_frame_buffer( 0.059580 )
append_note_to_frame_buffer( i, 196, 208 )
append_note_to_frame_buffer( i, 293, 205 )
append_note_to_frame_buffer( i, 349, 200 )
append_note_to_frame_buffer( i, 392, 203 )
append_note_to_frame_buffer( i, 494, 197 )
append_note_to_frame_buffer( i, 349, 203 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 494, 203 )
append_silence_to_frame_buffer( 0.038499 )
append_note_to_frame_buffer( i, 130, 229 )
append_note_to_frame_buffer( i, 261, 199 )
append_note_to_frame_buffer( i, 330, 197 )
append_note_to_frame_buffer( i, 392, 192 )
append_note_to_frame_buffer( i, 494, 197 )
append_note_to_frame_buffer( i, 330, 193 )
append_note_to_frame_buffer( i, 392, 200 )
append_note_to_frame_buffer( i, 494, 203 )
append_silence_to_frame_buffer( 0.004254 )
append_note_to_frame_buffer( i, 130, 234 )
append_note_to_frame_buffer( i, 261, 220 )
append_note_to_frame_buffer( i, 330, 199 )
append_note_to_frame_buffer( i, 392, 201 )
append_note_to_frame_buffer( i, 494, 195 )
append_note_to_frame_buffer( i, 330, 201 )
append_note_to_frame_buffer( i, 392, 202 )
append_note_to_frame_buffer( i, 494, 202 )
append_silence_to_frame_buffer( 0.002088 )
append_note_to_frame_buffer( i, 138, 234 )
append_note_to_frame_buffer( i, 196, 204 )
append_note_to_frame_buffer( i, 330, 200 )
append_note_to_frame_buffer( i, 392, 205 )
append_note_to_frame_buffer( i, 466, 194 )
append_note_to_frame_buffer( i, 330, 197 )
append_note_to_frame_buffer( i, 392, 195 )
append_note_to_frame_buffer( i, 466, 205 )
append_silence_to_frame_buffer( 0.042655 )
[continued in next message]
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)