music.Sequencer

class music.Sequencer(sample_rate=44100, events=<factory>)[source]

Bases: object

Schedules notes and renders them as audio.

Attributes:
sample_rateinteger

The sampling frequency in Hertz, used for every note rendered and for turning each event’s start time into a sample offset.

eventslist of NoteEvent

The scheduled notes. Normally built with add_note() rather than passed in, and rendered in order of their start times rather than the order they were added.

Raises:
ValueError

If sample_rate is not positive. At zero every note rendered as no samples, and the sequence as silence of no length.

Parameters:
  • sample_rate (int)

  • events (List[NoteEvent])

See also

music.StimulationSession

phases in sequence rather than notes at offsets, for stimulation protocols.

Examples

>>> seq = Sequencer()
>>> for i, freq in enumerate([440, 550, 660]):
...     seq.add_note(freq, start=i * 0.25, duration=1.0)
>>> len(seq.events)
3
>>> seq.write("chord.wav")
__init__(sample_rate=44100, events=<factory>)
Parameters:
  • sample_rate (int)

  • events (List[NoteEvent])

Return type:

None

Methods

__init__([sample_rate, events])

add_note(freq, start, duration[, ...])

Add a note event to the sequencer.

render()

Render all scheduled events and return the audio array.

write(filename[, bit_depth])

Write the rendered audio to a WAV file.

Attributes

sample_rate: int = 44100
events: List[NoteEvent]
add_note(freq, start, duration, vibrato_freq=0.0, max_pitch_dev=0.0, adsr_params=None, spatial=None)[source]

Add a note event to the sequencer.

Parameters:
freqscalar

The note’s frequency in Hertz.

startscalar

When it starts, in seconds from the start of the sequence.

durationscalar

How long it lasts, in seconds.

vibrato_freqscalar

The rate of a vibrato in Hertz. With max_pitch_dev, both nonzero, the note is rendered by note_with_vibrato().

max_pitch_devscalar

The depth of that vibrato.

adsr_paramsdict, optional

Arguments for adsr(), applied to the note.

spatialdict, optional

Arguments for localize(), which makes the note stereo.

Raises:
ValueError

If start is negative or not finite, or adsr_params or spatial names sonic_vector or sample_rate, which the sequencer supplies itself. A negative start was placed at a negative sample offset and failed with a broadcasting error, NaN and infinity failed in round() when rendering, and a second sample_rate as a TypeError there.

Parameters:
Return type:

None

render()[source]

Render all scheduled events and return the audio array.

Return type:

ndarray

write(filename, bit_depth=16)[source]

Write the rendered audio to a WAV file.

Raises:
ValueError

If there are no notes to write. The empty render reached the normalization, which blamed a duration computed as zero.

Parameters:
  • filename (str)

  • bit_depth (int)

Return type:

None