[![Build Status](https://github.com/Nikolay-Lysenko/sinethesizer/actions/workflows/main.yml/badge.svg)](https://github.com/Nikolay-Lysenko/sinethesizer/actions/workflows/main.yml)
[![codecov](https://codecov.io/gh/Nikolay-Lysenko/sinethesizer/branch/master/graph/badge.svg)](https://codecov.io/gh/Nikolay-Lysenko/sinethesizer)
[![Maintainability](https://api.codeclimate.com/v1/badges/a43618b5f9454d01186c/maintainability)](https://codeclimate.com/github/Nikolay-Lysenko/sinethesizer/maintainability)
[![PyPI version](https://badge.fury.io/py/sinethesizer.svg)](https://badge.fury.io/py/sinethesizer)
# [Sine]thesizer
## Overview
It is a digital synthesizer that is based on some design principles:
* Control via text files facilitates automation and boosts reproducibility, so GUI is absent.
* Although low-level and OS-specific dependencies improve performance, they reduce reliability, portability, and transparency, so they are avoided here. This standalone synth depends only on Python and some its packages.
* Since performance is not a merit of this synth, it is better to trade off speedups for sound quality. In particular, wavetables are not used at all and full waves are generated. Also, noise is generated from scratch every time it is needed.
The list of implemented and planned features is as follows:
- [x] Balance between freedom for user and simplicity of input formats
- [x] Support of additive synthesis, subtractive synthesis, and AM/PM synthesis
- [x] Sound effects (e.g., phaser, overdrive, reverb, etc)
- [x] Custom envelopes
- [x] Noises and drums
- [ ] Rich collection of presets
## Installation
To install a stable version, run:
```
pip install sinethesizer
```
## Usage
This synthesizer converts MIDI files and special text files to WAV files with resulting audio tracks.
For a MIDI file, it can be done with the following command:
```bash
python -m sinethesizer \
-i path/to/track.midi \
-p path/to/presets.yml \ # Or -p path/to/dir_with_presets
-m path/to/midi_config.yml \
-o path/to/output.wav
```
However, MIDI files are binary and, therefore, quite opaque. Also, integration between them and this synth is not complete: for example, control changes are ignored and event-level effects can not be applied. Here, TSV (Tab-Separated Values) files of special schema can be used as a native and more transparent alternative to MIDI. To process such a file, run:
```bash
python -m sinethesizer \
-i path/to/track.tsv \
-p path/to/presets.yml \ # Or -p path/to/dir_with_presets
-o path/to/output.wav
```
Below table provides links to detailed information about input files that are required from a user.
| Option | Description | Example |
|:--------------------------:|:------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------:|
| -i path/to/track.tsv | [Track definition](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/track_definition.md) | [Scale](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/scale.tsv) |
| -p path/to/presets.yml | [Instruments definition](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/instruments_creation.md) | [Demo instruments](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/instruments.yml) |
| -m path/to/midi_config.yml | Settings of MIDI file interpretation | [Demo MIDI config](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/midi_config.yml) |
If something is still unclear, you can read the source code — it is structured and has built-in documentation. Also, your questions are welcome.
## See also
To turn Jupyter notebook into a simple DAW, [PyMixer](https://github.com/Nikolay-Lysenko/pymixer) can be used. It is a Python library having good integration with [Sine]thesizer. Together they form a small ecosystem of audio tools which are oriented to text-based control.
Raw data
{
"_id": null,
"home_page": "",
"name": "sinethesizer",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "",
"keywords": "additive_synthesis,adsr_envelope,ahdsr,filter_envelope,modulation_index,pm_synthesis,reverb,sound_effects,subtractive_synthesis,synthesizer",
"author": "",
"author_email": "Nikolay Lysenko <nikolay-lysenco@yandex.ru>",
"download_url": "https://files.pythonhosted.org/packages/e6/6b/a5fb6f9188e414c90022f3d51fbdacc053ac17959d6b4a47817f771a26da/sinethesizer-0.6.2.tar.gz",
"platform": null,
"description": "[![Build Status](https://github.com/Nikolay-Lysenko/sinethesizer/actions/workflows/main.yml/badge.svg)](https://github.com/Nikolay-Lysenko/sinethesizer/actions/workflows/main.yml)\n[![codecov](https://codecov.io/gh/Nikolay-Lysenko/sinethesizer/branch/master/graph/badge.svg)](https://codecov.io/gh/Nikolay-Lysenko/sinethesizer)\n[![Maintainability](https://api.codeclimate.com/v1/badges/a43618b5f9454d01186c/maintainability)](https://codeclimate.com/github/Nikolay-Lysenko/sinethesizer/maintainability)\n[![PyPI version](https://badge.fury.io/py/sinethesizer.svg)](https://badge.fury.io/py/sinethesizer)\n\n# [Sine]thesizer\n\n## Overview\n\nIt is a digital synthesizer that is based on some design principles:\n* Control via text files facilitates automation and boosts reproducibility, so GUI is absent.\n* Although low-level and OS-specific dependencies improve performance, they reduce reliability, portability, and transparency, so they are avoided here. This standalone synth depends only on Python and some its packages.\n* Since performance is not a merit of this synth, it is better to trade off speedups for sound quality. In particular, wavetables are not used at all and full waves are generated. Also, noise is generated from scratch every time it is needed.\n\nThe list of implemented and planned features is as follows:\n- [x] Balance between freedom for user and simplicity of input formats\n- [x] Support of additive synthesis, subtractive synthesis, and AM/PM synthesis\n- [x] Sound effects (e.g., phaser, overdrive, reverb, etc)\n- [x] Custom envelopes\n- [x] Noises and drums\n- [ ] Rich collection of presets\n\n## Installation\n\nTo install a stable version, run:\n```\npip install sinethesizer\n```\n\n## Usage\n\nThis synthesizer converts MIDI files and special text files to WAV files with resulting audio tracks.\n\nFor a MIDI file, it can be done with the following command:\n```bash\npython -m sinethesizer \\\n -i path/to/track.midi \\\n -p path/to/presets.yml \\ # Or -p path/to/dir_with_presets\n -m path/to/midi_config.yml \\\n -o path/to/output.wav\n```\n\nHowever, MIDI files are binary and, therefore, quite opaque. Also, integration between them and this synth is not complete: for example, control changes are ignored and event-level effects can not be applied. Here, TSV (Tab-Separated Values) files of special schema can be used as a native and more transparent alternative to MIDI. To process such a file, run:\n```bash\npython -m sinethesizer \\\n -i path/to/track.tsv \\\n -p path/to/presets.yml \\ # Or -p path/to/dir_with_presets\n -o path/to/output.wav\n```\n\nBelow table provides links to detailed information about input files that are required from a user.\n\n| Option | Description | Example |\n|:--------------------------:|:------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------:|\n| -i path/to/track.tsv | [Track definition](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/track_definition.md) | [Scale](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/scale.tsv) |\n| -p path/to/presets.yml | [Instruments definition](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/instruments_creation.md) | [Demo instruments](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/instruments.yml) |\n| -m path/to/midi_config.yml | Settings of MIDI file interpretation | [Demo MIDI config](https://github.com/Nikolay-Lysenko/sinethesizer/blob/master/docs/examples/midi_config.yml) |\n\nIf something is still unclear, you can read the source code \u2014 it is structured and has built-in documentation. Also, your questions are welcome.\n\n## See also\n\nTo turn Jupyter notebook into a simple DAW, [PyMixer](https://github.com/Nikolay-Lysenko/pymixer) can be used. It is a Python library having good integration with [Sine]thesizer. Together they form a small ecosystem of audio tools which are oriented to text-based control.\n",
"bugtrack_url": null,
"license": "",
"summary": "A standalone synthesizer that is controlled through text files in an extendable way",
"version": "0.6.2",
"project_urls": {
"Homepage": "https://github.com/Nikolay-Lysenko/sinethesizer"
},
"split_keywords": [
"additive_synthesis",
"adsr_envelope",
"ahdsr",
"filter_envelope",
"modulation_index",
"pm_synthesis",
"reverb",
"sound_effects",
"subtractive_synthesis",
"synthesizer"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "16102588d3b319bc00e523f0311c9edb4887b91ca05dfc3fe5a34a9d34e7d3b9",
"md5": "d0cb10165b15606c34ef0499c2c47c58",
"sha256": "cd515740d553888fef034f19aba58483ab4c253ce6eb3792093dcb9e500d4444"
},
"downloads": -1,
"filename": "sinethesizer-0.6.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d0cb10165b15606c34ef0499c2c47c58",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 51234,
"upload_time": "2024-03-03T12:07:11",
"upload_time_iso_8601": "2024-03-03T12:07:11.914109Z",
"url": "https://files.pythonhosted.org/packages/16/10/2588d3b319bc00e523f0311c9edb4887b91ca05dfc3fe5a34a9d34e7d3b9/sinethesizer-0.6.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "e66ba5fb6f9188e414c90022f3d51fbdacc053ac17959d6b4a47817f771a26da",
"md5": "bbda641ffca6b738265133e2e9423002",
"sha256": "fb279589c20ba3825b96793b32f63c6786538d322926a0d4e159be382677cf39"
},
"downloads": -1,
"filename": "sinethesizer-0.6.2.tar.gz",
"has_sig": false,
"md5_digest": "bbda641ffca6b738265133e2e9423002",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 57356,
"upload_time": "2024-03-03T12:07:14",
"upload_time_iso_8601": "2024-03-03T12:07:14.163662Z",
"url": "https://files.pythonhosted.org/packages/e6/6b/a5fb6f9188e414c90022f3d51fbdacc053ac17959d6b4a47817f771a26da/sinethesizer-0.6.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-03 12:07:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Nikolay-Lysenko",
"github_project": "sinethesizer",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [],
"lcname": "sinethesizer"
}