- Notifications
You must be signed in to change notification settings - Fork22
Python 2/3 music synthesizer scripts (old but still functional project)
mdoege/PySynth
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PySynth is no longer being actively developed by me and has therefore been removed from PyPI.
There is now a maintained fork of PySynth atg4brielvs/PySynth.
PySynth is a simple music synthesizer for Python 2 or 3. The goal is not to produce many different sounds, but to have scripts that can turn ABC notation or MIDI files into a WAV file without too much tinkering.
The current release of the synthesizer can only play one note at a time. (Although successive notes can overlap in PySynth B and S, but not A.) However, two output files can be mixed together to get stereo sound.
Synth | Synthesis method | Approximate timbre | Note decay | Needs NumPy? |
---|---|---|---|---|
A | additive (3 sine waves) | flute, organ, piano | variable (depends on note length) | no |
B | additive (5 sine waves) | acoustic piano | medium | yes |
C | subtractive (sawtooth wave) | bowed string, analog synth pad | none | no |
D | subtractive (square wave) | woodwind, analog synth lead | none | no |
E | FM/phase modulation (6 sine waves) | DX7 Rhodes piano | medium | yes |
P | subtractive (white noise) | untuned percussion hit | very fast | no |
S | Karplus-Strong (physical modeling) | plucked string, guitar, koto | fast | yes |
beeper | additive | Nokia phone ringtone | none | no |
samp | sampler | Salamander Grand Piano | medium | yes |
Clone the repository:
git clone git@github.com:mdoege/PySynth.git
or
git clone https://github.com/mdoege/PySynth.git
Enter the directory (cd PySynth
) and run
python3 setup.py install
Basic usage:
importpysynthaspstest= (('c',4), ('e',4), ('g',4),('c5',-2), ('e6',8), ('d#6',2))ps.make_wav(test,fn="test.wav")
More advanced usage:
importpysynth_baspsb# a, b, e, and s variants available''' (note, duration)Note name (a to g), then optionally a '#' for sharp or'b' for flat, then optionally the octave (defaults to 4).An asterisk at the end means to play the note a littlelouder. Duration: 4 is a quarter note, -4 is a dottedquarter note, etc.'''song= ( ('c',4), ('c*',4), ('eb',4), ('g#',4), ('g*',2), ('g5',4), ('g5*',4), ('r',4), ('e5',16), ('f5',16), ('e5',16), ('d5',16), ('e5*',4) )# Beats per minute (bpm) is really quarters per minute herepsb.make_wav(song,fn="danube.wav",leg_stac=.7,bpm=180)
Read ABC file and output WAV:
python3 read_abc.py straw.abc
More documentation and examples at thePySynth homepage.
About
Python 2/3 music synthesizer scripts (old but still functional project)
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors6
Uh oh!
There was an error while loading.Please reload this page.