Python bindings for the Surge Synth Team Tuning Library.
To install from PyPI:
$ pip install tuning-library
or to clone the repo and install from source:
$ git clone --recurse-submodules https://github.com/surge-synthesizer/tuning-library-python.git
$ cd tuning-library-python
$ python3 -m pip install .
Read scl file and find frequency of midi note 69
import tuning_library as tl
scale = tl.read_scl_file("scale.scl")
tuning = tl.Tuning(scale)
f = tuning.frequency_for_midi_note(69)
Read scl and kbm files and find frequency of midi note 69
import tuning_library as tl
scale = tl.read_scl_file("scale.scl")
mapping = tl.read_kbm_file("mapping.kbm")
tuning = tl.Tuning(scale, mapping)
f = tuning.frequency_for_midi_note(69)
There are some scripts which use tuning_library
in the examples directory in the repo.
The names in the C++ Tuning Library and this Python wrapper correspond as follows
C++ | Python |
---|---|
readSCLFile | read_scl_file |
parseSCLData | parse_scl_data |
evenTemperament12NoteScale | even_temperament_12_note_scale |
evenDivisionOfSpanByM | even_division_of_span_by_m |
evenDivisionOfCentsByM | even_division_of_cents_by_m |
readKBMFile | read_kbm_file |
parseKBMData | parse_kbm_data |
tuneA69To | tune_A69_to |
tuneNoteTo | tune_note_to |
startScaleOnAndTuneNoteTo | start_scale_on_and_tune_note_to |
Scale::name | Scale.name |
Scale::description | Scale.description |
Scale::rawText | Scale.raw_text |
Scale::count | Scale.count |
Scale::tones | Scale.tones |
KeyboardMapping::count | KeyboardMapping.count |
KeyboardMapping::firstMidi | KeyboardMapping.first_midi |
KeyboardMapping::lastMidi | KeyboardMapping.last_midi |
KeyboardMapping::middleNote | KeyboardMapping.middle_note |
KeyboardMapping::tuningConstantNote | KeyboardMapping.tuning_constant_note |
KeyboardMapping::tuningFrequency | KeyboardMapping.tuning_frequency |
KeyboardMapping::tuningPitch | KeyboardMapping.tuning_pitch |
KeyboardMapping::octaveDegrees | KeyboardMapping.octave_degrees |
KeyboardMapping::keys | KeyboardMapping.keys |
KeyboardMapping::rawText | KeyboardMapping.raw_text |
KeyboardMapping::name | KeyboardMapping.name |
Tuning::N | Tuning.N |
Tuning::withSkippedNotesInterpolated | Tuning.with_skipped_notes_interpolated |
Tuning::frequencyForMidiNote | Tuning.frequency_for_midi_note |
Tuning::frequencyForMidiNoteScaledByMidi0 | Tuning.frequency_for_midi_note_scaled_by_midi_0 |
Tuning::logScaledFrequencyForMidiNote | Tuning.log_scaled_frequency_for_midi_note |
Tuning::retuningFromEqualInCentsForMidiNote | Tuning.retuning_from_equal_in_cents_for_midi_note |
Tuning::retuningFromEqualInSemitonesForMidiNote | Tuning.retuning_from_equal_in_semitones_for_midi_note |
Tuning::scalePositionForMidiNote | Tuning.scale_position_for_midi_note |
Tuning::isMidiNoteMapped | Tuning.is_midi_note_mapped |
Tuning::scale | Tuning.scale |
Tuning::keyboardMapping | Tuning.keyboard_mapping |
Tone::type | Tone.type |
Tone::cents | Tone.cents |
Tone::ratio_d | Tone.ratio_d |
Tone::ratio_n | Tone.ratio_n |
Tone::stringRep | Tone.string_rep |
Tone::floatValue | Tone.float_value |
toneFromString | tone_from_string |
The tuning_library
Python package also includes a
scala_files_to_frequencies
convenience function which is not in the C++
library. It can be called as
import tuning_library as tl
frequencies = tl.scala_files_to_frequencies("scale.scl", "mapping.kbm")
or, using a default keyboard mapping,
frequencies = tl.scala_files_to_frequencies("scale.scl")
and returns a list of 128 frequencies in Hz, one for each each midi note.