mirror of
https://github.com/oliverschmidt/Stream-PDM.git
synced 2024-12-22 00:29:15 +00:00
Stream Pulse-Density-Modulation Sound on the Apple II
converter.c | ||
converter.exe | ||
LICENSE | ||
linenoise.c | ||
linenoise.h | ||
README.md | ||
stream-pdm.c | ||
stream-pdm.dsk | ||
stream.s | ||
The Ghost In Your Piano - Climb (Apple II).mp3 | ||
The Ghost In Your Piano - Climb (Original).mp3 | ||
The Ghost In Your Piano - Climb.a2stream | ||
w5100_http.c | ||
w5100_http.h | ||
w5100.c | ||
w5100.h |
Stream-PDM
Stream-PDM simultaneously receives Pulse-Density-Modulation Sound from any HTTP server and plays it through the stock Apple II speaker in a consistent 13 cycle loop resulting in a stable 78671.3Hz pulse frequency. Those 13 cycles are feasible through aggressive loop unrolling resulting in 32kB of code. Those 32kB aren't loaded from disk but are generated on the fly.
Hardware requirements:
- Enhanced //e or IIgs
- Uthernet II in any slot
To built Stream-PDM:
- Get cc65
- Get IP65 and place it in a subdirectory
ip65
- Enter
cl65 -t apple2enh -Or -I ip65 -D SINGLE_SOCKET stream-pdm.c stream.s w5100_http.c w5100.c linenoise.c ip65/ip65.lib ip65/ip65_apple2.lib
To create a PDM file:
- Create a headerless *.raw file with 78670Hz mono 32-bit-float PCM data (e.g. with Audacity)
- Convert the *.raw file into an *.a2stream file with converter.exe
To stream a PDM file:
- Put the *.a2stream file onto any HTTP server
- Run Stream-PDM and point it to the URL of the *.a2stream file
To config Stream-PDM:
- Put the Uthernet II in slot 3 or
- Create a file named ETHERNET.SLOT. Only the first byte of that file is relevant. This byte can either represent your Uthernet II slot as binary value (e.g. $04 for slot 4), as ASCII digit (e.g. $34 for slot 4) or as Apple TEXT digit (e.g. $B4 for slot 4).