https://github.com/sjlongland/polyphonic-synthesizer
Embedded polyphonic synthesizer for microcontrollers
https://github.com/sjlongland/polyphonic-synthesizer
embedded microcontroller music synthesizer
Last synced: 11 days ago
JSON representation
Embedded polyphonic synthesizer for microcontrollers
- Host: GitHub
- URL: https://github.com/sjlongland/polyphonic-synthesizer
- Owner: sjlongland
- License: gpl-2.0
- Created: 2017-04-01T09:39:19.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-04-01T09:57:33.000Z (about 8 years ago)
- Last Synced: 2025-04-12T21:05:47.628Z (11 days ago)
- Topics: embedded, microcontroller, music, synthesizer
- Language: C
- Size: 17.6 KB
- Stars: 9
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Polyphonic Synthesizer
======================This project is intended to be a polyphonic synthesizer for use in
embedded microcontrollers. It features multi-voice synthesis for up to 16
channels, with channels outputting either a fixed DC offset, sinusoidal
output or whitenoise.The phase or amplitude of one channel may be modulated by the output of
another channel, allowing for various effects.Configuration
=============There are two ways to configure this library:
Using C preprocessor constants
------------------------------The following C preprocessor definitions should be defined in your project
`Makefile`.* `_POLY_NUM_CHANNELS`: The number of polyphonic channels (voices) that
you wish to instantiate. Each channel occupies 16 bytes.
* `_POLY_FREQ`: The output sample rate for the polyphonic synthesizer in
Hz.Using linker symbols
--------------------Alternatively, these things can be decided at run-time. Your application
should export the following symbols:* `const uint8_t poly_num_channels`: The number of polyphonic channels
currently configured.
* `const uint16_t poly_freq`: The output sample rate for the polyphonic
synthesizer in Hz.
* `const uint16_t poly_freq_max`: The maximum output frequency for the
polyphonic synthesizer. This should be set to `poly_freq/2` (the
nyquist frequency).
* `struct poly_voice_t poly_voice[]`: The array of voice channels.You may declare functions using these symbols, or you may use linker
aliasing to expose variables/structures with alternate names.Usage
=====Global structures
-----------------A global counter, `poly_remain`, counts down the number of audio samples
remaining before the next set of events are due to be loaded. When this
variable reaches 0, you should start calling `poly_load` with new data or
call `poly_reset` to stop playback.Functions
---------`poly_reset` clears the state of the polyphonic synthesizer, cancelling
any in-progress playback. This should be done as part of your program
initialisation.`poly_load` is used to load in the next event. Events are covered below.
`poly_next` returns the next audio sample, or `0` if there is no more
audio left to be played.Events
======The structure of the event system is loosely based on ideas from the MIDI
standard. Essentially, an "event" is a parameter change for a given
channel.Each event is represented by a 4-byte data structure, a `struct
poly_evt_t` which has two fields, `flags` and `value`. `poly.h` covers
each of the events. See the comments up the top of that file for detail.