scamp.playback_implementations.SoundfontPlaybackImplementation¶
-
class
scamp.playback_implementations.
SoundfontPlaybackImplementation
(*args, **kwargs)[source]¶ Bases:
scamp.playback_implementations._MIDIPlaybackImplementation
Playback implementation that does Soundfont playback, via the MIDI protocol.
- Parameters
host_instrument – The ScampInstrument that will use this playback implementation for playback. When this PlaybackImplementation is constructed, it is automatically added to the list of PlaybackImplementations that the host instrument uses.
bank_and_preset – The bank and preset within the given soundfont to use for playback
soundfont – String representing the soundfont to use for playback. Defaults to the one defined in playback_settings.default_soundfont
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.
audio_driver – name of the audio_driver to use. Defaults to the one defined in playback_settings.default_audio_driver
max_pitch_bend – max pitch bend allowed on this instrument. Defaults to the one defined in playback_settings.default_max_soundfont_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 ofplay_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
(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
Returns a copy of this object by serializing to and from JSON.
end_note
(note_id)Method that implements the end of a note
get_shared_resource
(key)Gets the shared resource for this type of playback implementation under the given key.
has_shared_resource
(key)Checks whether there is a shared resource for this type of playback implementation under the given key.
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.
set_host_instrument
(host_instrument)Sets the host instrument for this PlaybackImplementation.
set_shared_resource
(key, value)Sets a shared resource for this type of playback implementation under the given key.
start_note
(note_id, pitch, volume, properties)Method that implements the start of a note
Attributes
Dictionary of shared resources for this type of playback implementation.
-
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
(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
Gets the shared resource for this type of playback implementation under the given key.
- Parameters
key – key name for this resource
Checks whether there is a shared resource for this type of playback implementation under the given key.
- Parameters
key – key name for this resource
-
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
-
property
resource_dictionary
¶ Dictionary of shared resources for this type of playback implementation. For instance, SoundfontPlaybackImplementation uses this to store an instance of SoundfontHost. Only one instance of fluidsynth (and therefore SoundfontHost) needs to be running for all instruments in the ensemble, so this is a way of pooling that resource.
-
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
-
set_host_instrument
(host_instrument: scamp.instruments.ScampInstrument)¶ Sets the host instrument for this PlaybackImplementation. Ordinarily, the host instrument is supplied as an argument to the __init__ method, which then automatically calls this method. However, it is also possible to pass the value None to the host instrument argument initially and later set it with this method.
- Parameters
host_instrument – The
ScampInstrument
that will use this playback implementation for playback. This PlaybackImplementation will be added to the host instrument’s playback_implementations attribute.
Sets a shared resource for this type of playback implementation under the given key.
- Parameters
key – key name for this resource
value – value to set for that key
-
start_note
(note_id, pitch, volume, properties, other_parameter_values: dict = None)¶ 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.)