{"id":20313264,"url":"https://github.com/copych/acidbox","last_synced_at":"2025-06-25T21:35:57.613Z","repository":{"id":65309938,"uuid":"573827563","full_name":"copych/AcidBox","owner":"copych","description":"ESP32 synth: all-in-one acid combo of two TB303's, a drum machine with fx chain, cd-quality","archived":false,"fork":false,"pushed_at":"2025-03-11T12:34:36.000Z","size":35137,"stargazers_count":148,"open_issues_count":0,"forks_count":14,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-19T16:11:46.090Z","etag":null,"topics":["303","808","acid","arduino","audio","drum-machine","dsp","esp32","groovebox","midi","roland","synth","synthesizer","tb303","tr808"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/copych.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-03T15:02:33.000Z","updated_at":"2025-05-18T02:04:40.000Z","dependencies_parsed_at":"2023-02-17T03:01:00.024Z","dependency_job_id":"c7530a7a-f8a6-481f-ad70-5b727ef5f52b","html_url":"https://github.com/copych/AcidBox","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/copych/AcidBox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/copych%2FAcidBox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/copych%2FAcidBox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/copych%2FAcidBox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/copych%2FAcidBox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/copych","download_url":"https://codeload.github.com/copych/AcidBox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/copych%2FAcidBox/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261958170,"owners_count":23236417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["303","808","acid","arduino","audio","drum-machine","dsp","esp32","groovebox","midi","roland","synth","synthesizer","tb303","tr808"],"created_at":"2024-11-14T18:10:13.278Z","updated_at":"2025-06-25T21:35:57.579Z","avatar_url":"https://github.com/copych.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cb\u003eAttention!\u003c/b\u003e ESP Arduino cores `v.3.1.2`, `3.1.3` and `3.2.0-RC1` have a bug that won't allow i2s driver to install when PSRAM is enabled, please, avoid using these versions!\n\n\nIf you have an ESP32-S3 board, then use the additional features. https://github.com/copych/AcidBox/tree/S3-regular extends capabilities, using faster OPI PSRAM, and hardware support for USB. \n\n\n# AcidBox\nESP32 headless acid combo of tb303 + tb303 + tr808 like synths. Filter cutoff, reso, env mod, accent, wavefolder, overdrive within each 303, per-instrument tunings, hi-pass/lo-pass filter and bitcrusher in drums, send to reverb, delay and master compression.\nAll MIDI driven. 44100, 16bit stereo I2S output to the external DAC or 8bit to the built-in DAC. No indication. Uses both cores of ESP32. Cheap ~$10.\nConsult with midi_config.h to find out and to set up MIDI continous control messages.\n\n# It can be a JukeBox\nIf you compile with #define JUKEBOX option in config.h, this becomes a stand-alone ACID-JUKE-BOX. You just listen.\nA modified version of http://tips.ibawizard.net/acid-banger/, initially taken from https://github.com/vitling/acid-banger included, there's no AI, but randomizing pattern algorithms.\n\n# YouTube Video\n[![Video](https://img.youtube.com/vi/mhCWuZB_Tos/maxresdefault.jpg)](https://www.youtube.com/watch?v=mhCWuZB_Tos)\n\n# MP3 Sound samples\n[demo4.mp3](https://github.com/copych/AcidBox/blob/main/media/acidjukebox4.mp3?raw=true) fully automated breaks and fills.\n\n[demo5.mp3](https://github.com/copych/AcidBox/blob/main/media/acidjukebox5.mp3?raw=true) 7 minutes of random fully automated acid.\n\n# To build the thing\nIdeally, you need an ESP32 or ESP32S3 with at least 4MB PSRAM (for example, ESP32 WROVER module). Also an external DAC, like PCM5102 is highly preferrable. \n\n\u003cb\u003eATTENTION! PSRAM handling requires up-to-date Arduino ESP32 core. Of what I have tested, versions 2.0.6 up to current 2.0.14 are working with both ESP32 and ESP32S3, while 2.0.0 is not working\u003c/b\u003e\n\nIn ArduinoIDE (I've used v.1.8.20) select: \n* board: ESP32 Dev Module (or ESP32S3 Dev Module if you use S3)\n* partition scheme: No OTA (1MB APP/ 3MB SPIFFS)\n* PSRAM: enabled (or the type of your PSRAM)\n\nAlso you will need to upload drum samples to the ESP32 flash (LittleFS). To do so follow the instructions:\n\nfor Arduino IDE 1.X.X https://github.com/lorol/LITTLEFS#arduino-esp32-littlefs-filesystem-upload-tool\n\nfor Arduino IDE 2.X.X https://github.com/earlephilhower/arduino-littlefs-upload and follow the instructions there.\n\nDon't forget to select the appropriate partitioning both for uploading app and fs image in the tools menu: No OTA 1mb app+3mb SPIFFS. Choose LittleFS while uploading.\n\n\n\nIf you don't upload samples, the app will use the default drum kit from the samples.h\n\n# Dependencies\n* MIDI Library https://github.com/FortySevenEffects/arduino_midi_library\n\n# What if you only have WROOM module (no PSRAM)\nYou can still compile and run the app, with NO_PSRAM option (line 11 in config.h). Note, that in this case you will get NO REVERB and just ONE SMALL DRUM KIT. \n\nIn ArduinoIDE (I used v.1.8.20) select: \n* board: ESP32 Dev Module\n* partition scheme: No OTA (1MB APP/ 3MB SPIFFS)\n* PSRAM: disabled\n\nAlso you will need to upload drum samples to the ESP32 flash (LittleFS). To do so follow the instructions: https://github.com/lorol/LITTLEFS#arduino-esp32-littlefs-filesystem-upload-tool\n\n# What if you don't have an external DAC module (PCM5102)\nYou can still compile and run the app, with USE_INTERNAL_DAC option (line 10 in config.h). BUT you should understand that sound output is 8-bit. You just get it form GPIO25 and GPIO26. Probably you can improve it a bit playing with the multipliers in i2s_output() method in general.ino file.\n\nIn ArduinoIDE (I used v.1.8.20) select:\n* board: ESP32 Dev Module\n* partition scheme: No OTA (1MB APP/ 3MB SPIFFS)\n\nAlso you will need to upload drum samples to the ESP32 flash (LittleFS). To do so follow the instructions: https://github.com/lorol/LITTLEFS#arduino-esp32-littlefs-filesystem-upload-tool\n\n\n# MIDI Control\nFor the time being the following list of MIDI continious controllers is available:\n\n    #define CC_303_PORTATIME    5   // affects gliding time\n    #define CC_303_VOLUME       7   // mix volume\n    #define CC_303_PORTAMENTO   65  // gliding on/off\n    #define CC_303_PAN          10  // pano\n    #define CC_303_WAVEFORM     70  // Blend between square and saw\n    #define CC_303_RESO         71\n    #define CC_303_CUTOFF       74\n    #define CC_303_ATTACK       73\n    #define CC_303_DECAY        72\n    #define CC_303_ENVMOD_LVL   75\n    #define CC_303_ACCENT_LVL   76\n    #define CC_303_REVERB_SEND  91\n    #define CC_303_DELAY_SEND   92\n    #define CC_303_DISTORTION   94\n    #define CC_303_OVERDRIVE    95\n\n    // 808 Drums MIDI CC\n    #define CC_808_VOLUME       7\n    #define CC_808_PAN          10\n    #define CC_808_RESO         71\n    #define CC_808_CUTOFF       74  // Note that this filter's behaviour differs from the 303's, 64-127 means HP-, and 0-63 LP-filtering. 'Untouched' is at ~64.  \n    #define CC_808_REVERB_SEND  91\n    #define CC_808_DELAY_SEND   92\n    #define CC_808_DISTORTION   94  // BitCrusher\n    #define CC_808_BD_TONE      21  // Bass Drum tone control\n    #define CC_808_BD_DECAY     23  // Bass Drum envelope decay\n    #define CC_808_BD_LEVEL     24  // Bass Drum mix level\n    #define CC_808_SD_TONE      25  // Snare Drum tone control\n    #define CC_808_SD_SNAP      26  // Snare Drum envelope decay\n    #define CC_808_SD_LEVEL     29  // Snare Drum mix level\n    #define CC_808_CH_TUNE      61  // Closed Hat tone control\n    #define CC_808_CH_LEVEL     63  // Closed Hat mix level\n    #define CC_808_OH_TUNE      80  // Open Hat tone control\n    #define CC_808_OH_DECAY     81  // Open Hat envelope decay\n    #define CC_808_OH_LEVEL     82  // Open Hat mix level\n\n    // Global \n    #define CC_ANY_COMPRESSOR   93\n    #define CC_ANY_DELAY_TIME   84  // delay time\n    #define CC_ANY_DELAY_FB     85  // delay feedback level\n    #define CC_ANY_DELAY_LVL    86  // delay mix level\n    #define CC_ANY_REVERB_TIME  87  // rebverb time\n    #define CC_ANY_REVERB_LVL   88  // reverb mix level\n    #define CC_ANY_RESET_CCS    121\n    #define CC_ANY_NOTES_OFF    123\n    #define CC_ANY_SOUND_OFF    120\n\n# Functional diagram \n\u003cimg src=\"https://github.com/copych/AcidBox/blob/main/media/2022-12-14_00-03-18.png\" width=100%\u003e\n(\"Acid Banger\" JukeBox actually calls midi functions as an external app would do)\n\n# Schematics and PCB\n[@streetuff](https://github.com/streetuff) has made such a great PCB and schematics! https://github.com/streetuff/AcidBox-PCB\n[![Schematics and PCB](https://github.com/streetuff/AcidBox-PCB/blob/main/3d-model.png)](https://github.com/streetuff/AcidBox-PCB)\n\n# Thanks go to\n* Marcel Licence https://github.com/marcel-licence : synth and DSP related code (delay, bi-filter, bitcrusher initially were taken from here)\n* Infrasonic Audio https://github.com/infrasonicaudio : i2s base code was initially taken from here\n* Seeduino Electro-Smith https://github.com/electro-smith/DaisySP : a lot of DSP and synth related code here \n* Erich Heinemann https://github.com/ErichHeinemann : forked Marcel Licence's sampler and initial set of drum samples were taken from here\n* Dimitri Diakopoulos https://github.com/ddiakopoulos/MoogLadders : a collection of c++ implementations of Moogladder filters\n* Open303 project https://sourceforge.net/projects/open303/, https://www.kvraudio.com/forum/viewtopic.php?t=262829 -- guys have done a lot of research, their filters combination is now the default one.\n\n# \n\u003cimg src=\"https://github.com/copych/AcidBox/blob/main/media/2022-12-13%2015-44-53.JPG\" width=100% \u003e ESP32 proto\n\n\n\u003cimg src=\"https://github.com/copych/AcidBox/blob/main/hardware/2023-03-28%20at%2009.19.49.jpeg\" width=100% \u003e ESP32s3 proto\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcopych%2Facidbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcopych%2Facidbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcopych%2Facidbox/lists"}