1
0
mirror of https://github.com/sjlongland/atinysynth.git synced 2025-09-13 10:03:15 +10:00
Commit Graph

8 Commits

Author SHA1 Message Date
Luciano Martorella
c19c6dddcb - Added sequencer from binary 'waveform' and ADSR data.
- Added waveform generic API to create waveforms, and use period instead of frequency in waveform (avoid division on MCUs)
- Introduced 'def' struct in ADSR API for reuse
- Multi-track MML parser and compilation
- Added some samples from https://electronicmusic.fandom.com/wiki/Music_Macro_Language
- Added scale.mml for testing
2021-05-18 20:18:29 +02:00
01a1bc8b70
Makefile: Make object list configurable.
Allow ports to insert their own object files to the list.
2017-05-01 17:36:56 +10:00
44e2d937d6
gensine: Add in sine wave generator.
I left this out because I thought the idea of modulus and division on a
MCU that lacks a hardware multiplier would be too much for it… and
indeed it was too much with my other project.

Thinking about it this afternoon, I had an idea.  If I have 2^N samples,
then the modulus can be optimised to:

```
	mod = sample & ((2**n)-1)
```

and the segment can be figured out by:

```
	segment = sample >> n
```

The segment is two bits.  A function that returns the scaled sine value
for a given scaled angle can be given as:

```
	int8_t fp_sine(uint8_t angle) {
		uint8_t segment = (angle >> POLY_SINE_SZ_BITS) & 3;
		uint8_t offset = angle & ((1 << POLY_SINE_SZ_BITS)-1);

		switch (segment) {
			case 0:
				return _poly_sine[offset];
			case 1:
				return _poly_sine[
					POLY_SINE_SZ - offset];
			case 2:
				return -_poly_sine[offset];
			case 3:
				return -_poly_sine[
					POLY_SINE_SZ - offset];
		}
	}
```

… or something like that.  If `POLY_SINE_SZ_BITS=6`, then `angle=255`
represents 360°.
2017-04-25 17:43:51 +10:00
38bf5a4261
Makefile: Remove .dep output definitions.
This confuses `make` and it winds up telling `gcc` to write the compiled
binary to the `.dep` output.
2017-04-09 09:09:53 +10:00
4bad2a4c91
Makefile: Re-work build system
Running `make PORT=...` should be all that's required to build one of
the ports.
2017-04-09 08:22:54 +10:00
30e11101c4
Makefile: Add LIBS, INCLUDES 2017-04-08 20:54:50 +10:00
35e7d5ed9a
Beginnings of separate ports. 2017-04-08 20:23:26 +10:00
84370bd932
ADSR-based synthesizer for microcontrollers
Initial check-in.
2017-04-08 18:57:37 +10:00