No computer music system is complete without the ability to place notes into a score/timeline. Read and download today’s script here.
The mechanisms that schedule score events and print the results are still a bit wonky. So I’m going to omit the explanation for now, and instead just focus on how they’re used. The following is the __main__ from the script:
if __name__ == "__main__": @Instr def RingTine(dur, amp, freq_1, freq_2): return Sine(amp, freq_1) * Sine(amp, freq_2) * RiseFall(dur, 0) s = ScoreEvents() s.event(0, 0.25, RingTine(0.25, 1, 440, 44)) s.event(0.5, 0.125, RingTine(0.125, 0.333, 262, 44)) s.event(0.75, 0.25, RingTine(0.25, 0.25, 262, 44)) s.event(0.75, 0.25, RingTine(0.25, 0.5, 440, 44)) for frame in PrintSamples(s): pass
The first part of __main__ defines an instrument called RingTine that generates a percussive ring-modulated timbre. At least in theory; Still no sound output.
The next step creates a ScoreEvents() object. This is where events are scheduled. This is followed by 4 lines of code that schedule events for @Instr RingTine with the ScoreEvents class method event(). The method takes three arguments:
ScoreEvents.event(start_time, duration, UnitGenerator(*args))
The very last line prints the samples generates by the score with the PrintSamples() iterator. The implementation is seriously lame at the moment, but is perfectly acceptable for a crude prototype.