Resources - Quefumas/gensound GitHub Wiki
DSP
Learn about DSP, sampling, filters, etc. Also code samples for transforms we may wish to implement.
- https://dsp.stackexchange.com/
- https://dspguru.com/
- https://www.dspguide.com/
- https://ethanwiner.com/eq-dsp.htm
- "Understanding Digital Signal Processing" book
- Reaper JS effects
- https://wiki.python.org/moin/PythonInMusic
- http://t-filter.engineerjs.com/
- https://www.earlevel.com/main/2012/12/15/a-one-pole-filter/
- https://github.com/audacity/audacity
- https://ccrma.stanford.edu/~jos/sasp/
File I/O libraries to look at & support
- https://github.com/bastibe/SoundFile
- https://github.com/WarrenWeckesser/wavio
- https://github.com/hamiltron/py-simple-audio
- Comparison and list of various options: https://nbviewer.jupyter.org/github/mgeier/python-audio/blob/master/audio-files/index.ipynb
- https://docs.python.org/3/library/audioop.html Part of standard library
Specific details about file format implementation:
- https://stackoverflow.com/questions/24151973/reading-24-bit-samples-from-a-wav-file
- https://stackoverflow.com/questions/2062620/how-to-write-wav-file-with-32-bit-float-data
- https://stackoverflow.com/questions/16767248/how-do-i-write-a-24-bit-wav-file-in-python
- https://stackoverflow.com/questions/29761331/is-it-correct-to-assume-that-floating-point-samples-in-a-wav-or-aiff-file-will-b
WAV format info:
- http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html
- http://soundfile.sapp.org/doc/WaveFormat/
- https://wavefilegem.com/how_wave_files_work.html
Surprisingly, documentation is laconic about the actual representation of the sample info itself.
From what I've gathered, when wFormatTag==1
(WAVE_FORMAT_PCM), the samples are 8-,16-,24-, or 32-bit integers, stored as 2's complement signed little-endian, with the exception of 8-bit, which is unsigned (i.e. amplitude ranging 0-255).
For 32-bit float, need to specify wFormatTag=3
(WAVE_FORMAT_IEEE_FLOAT).