scamp.playback_implementations.MIDIStreamPlaybackImplementation

class scamp.playback_implementations.MIDIStreamPlaybackImplementation(midi_output_device: str = 'default', num_channels=8, midi_output_name: Optional[str] = None, max_pitch_bend: int = 'default', note_on_and_off_only: bool = False, start_channel=0)[source]

Bases: _MIDIPlaybackImplementation

Playback implementation that sends an outgoing MIDI stream to an external synthesizer / program

Parameters:
  • midi_output_device – name or port number of the midi output device to use.

  • num_channels – How many MIDI channels to use for this instrument. Where channel-wide messages (such as pitch-bend messages) are involved, it is essential to have several channels at our disposal.

  • midi_output_name – name to use when sending messages

  • max_pitch_bend – max pitch bend allowed on this instrument. Defaults to the one defined in playback_settings.default_max_streaming_midi_pitch_bend.

  • note_on_and_off_only – This enforces a rule of no dynamic pitch bends, expression (volume) changes, or other cc messages. Valuable when using start_note instead of play_note in music that doesn’t do any dynamic pitch/volume/parameter changes. Without this flag, notes will all be placed on separate MIDI channels, since they could potentially change pitch or volume; with this flags, we know they won’t, so they can share the same MIDI channels, only using an extra one due to microtonality.

Methods

cc(chan, cc_number, value_from_0_to_1)

Sends an arbitrary midi CC message

expression(chan, expression_from_0_to_1)

Sends a midi expression message

note_off(chan, pitch)

Sends a note_off MIDI message

note_on(chan, pitch, velocity_from_0_to_1)

Sends a note_on MIDI message

pitch_bend(chan, bend_in_semitones)

Sends a MIDI pitch bend message

set_max_pitch_bend(max_bend_in_semitones)

Sets the max pitch bend for this MIDI device

Inherited Methods

change_note_parameter(note_id, ...)

Method that implements the change of a parameter other than pitch or volume

change_note_pitch(note_id, new_pitch)

Method that implements the change of a note's pitch

change_note_volume(note_id, new_volume)

Method that implements the change of a note's volume

duplicate()

Returns a copy of this object by serializing to and from JSON.

end_note(note_id)

Method that implements the end of a note

json_dumps()

Dump this object as a JSON string.

json_loads(s)

Load this object from a JSON string.

load_from_json(file_path)

Load this object from a JSON file with the given path.

save_to_json(file_path)

Save this object to a JSON file using the given path.

start_note(note_id, pitch, volume, ...)

Method that implements the start of a note

note_on(chan: int, pitch: int, velocity_from_0_to_1: float)[source]

Sends a note_on MIDI message

Parameters:
  • chan – channel to send message on

  • pitch – integer MIDI pitch value

  • velocity_from_0_to_1 – velocity to send (NB: scaled from 0 to 1)

note_off(chan: int, pitch: int)[source]

Sends a note_off MIDI message

Parameters:
  • chan – channel to send message on

  • pitch – integer MIDI pitch value

pitch_bend(chan: int, bend_in_semitones: float)[source]

Sends a MIDI pitch bend message

Parameters:
  • chan – channel to send message on

  • bend_in_semitones – the pitch bend amount (in semitones!)

set_max_pitch_bend(max_bend_in_semitones: int)[source]

Sets the max pitch bend for this MIDI device

Parameters:

max_bend_in_semitones – value to set as maximum pitch bend

expression(chan: int, expression_from_0_to_1: float)[source]

Sends a midi expression message

Parameters:
  • chan – channel to send message on

  • expression_from_0_to_1 – expression to send (NB: scaled from 0 to 1)

Returns:

cc(chan: int, cc_number: int, value_from_0_to_1: float)[source]

Sends an arbitrary midi CC message

Parameters:
  • chan – channel to send the message on

  • cc_number – number representing the type of the control change message

  • value_from_0_to_1 – value to send (NB: scaled from 0 to 1)

change_note_parameter(note_id, parameter_name, new_value)

Method that implements the change of a parameter other than pitch or volume

Parameters:
  • note_id – unique identifier of the note to effect

  • parameter_name – name of the parameter to change

  • new_value – new floating-point value of that parameter

change_note_pitch(note_id, new_pitch)

Method that implements the change of a note’s pitch

Parameters:
  • note_id – unique identifier of the note whose pitch to change

  • new_pitch – new (floating-point) MIDI pitch value

change_note_volume(note_id, new_volume)

Method that implements the change of a note’s volume

Parameters:
  • note_id – unique identifier of the note whose volume to change

  • new_volume – new floating point volume value from 0 to 1

duplicate() T

Returns a copy of this object by serializing to and from JSON.

end_note(note_id)

Method that implements the end of a note

Parameters:

note_id – unique identifier of the note to end

json_dumps() str

Dump this object as a JSON string. This uses a custom encoder that recognizes and appropriately converts any attributes that are object inheriting from SavesToJSON.

classmethod json_loads(s: str) T

Load this object from a JSON string. This uses a custom decoder that looks for a “_type” key in any object/dictionary being parsed and converts it to the class specified (assuming it a subclass of SavesToJSON).

Parameters:

s – a string representing this object in JSON format

classmethod load_from_json(file_path: str) T

Load this object from a JSON file with the given path. This uses a custom decoder that looks for a “_type” key in any object/dictionary being parsed and converts it to the class specified (assuming it a subclass of SavesToJSON).

Parameters:

file_path – path for loading the file

save_to_json(file_path: str) None

Save this object to a JSON file using the given path. This uses a custom encoder that recognizes and appropriately converts any attributes that are object inheriting from SavesToJSON.

Parameters:

file_path – path for saving the file

start_note(note_id, pitch, volume, properties, note_info_dict)

Method that implements the start of a note

Parameters:
  • note_id – unique identifier for the note we are starting

  • pitch – floating-point MIDI pitch value

  • volume – floating-point volume value (from 0 to 1)

  • properties – a NotePropertiesDictionary

  • other_parameter_values – dictionary mapping parameter name to parameter value for parameters other than pitch and volume. (This information was extracted from the properties dictionary.)

  • note_info_dict – dictionary with auxiliary info about this note (e.g. the clock it’s running on, time stamp, various flags)