{"id":34248109,"url":"https://github.com/hi-squeaky-things/little-weirdo","last_synced_at":"2025-12-16T08:04:08.952Z","repository":{"id":320433215,"uuid":"720351334","full_name":"hi-squeaky-things/little-weirdo","owner":"hi-squeaky-things","description":"Rust #no-std optimized wave table synthesizer for embedded devices.","archived":false,"fork":false,"pushed_at":"2025-10-23T19:10:13.000Z","size":270,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-23T20:26:15.015Z","etag":null,"topics":["embedded","esp32","no-std-alloc","rust","synthesizer","wavetable"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/hi-squeaky-things.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-18T07:56:55.000Z","updated_at":"2025-10-23T19:21:46.000Z","dependencies_parsed_at":"2025-10-23T20:26:41.588Z","dependency_job_id":"479f8f25-6b1e-4ae0-92c4-6750a5a41d18","html_url":"https://github.com/hi-squeaky-things/little-weirdo","commit_stats":null,"previous_names":["hi-squeaky-things/little-weirdo"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/hi-squeaky-things/little-weirdo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-squeaky-things%2Flittle-weirdo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-squeaky-things%2Flittle-weirdo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-squeaky-things%2Flittle-weirdo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-squeaky-things%2Flittle-weirdo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hi-squeaky-things","download_url":"https://codeload.github.com/hi-squeaky-things/little-weirdo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hi-squeaky-things%2Flittle-weirdo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27761229,"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","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["embedded","esp32","no-std-alloc","rust","synthesizer","wavetable"],"created_at":"2025-12-16T08:04:07.981Z","updated_at":"2025-12-16T08:04:08.947Z","avatar_url":"https://github.com/hi-squeaky-things.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n ⡇ ⡇⢹⠁⢹⠁⡇ ⣏⡉ ⡇⢸⣏⡉⡇⣏⡱⡏⢱⡎⢱\n ⠧⠤⠇⠸ ⠸ ⠧⠤⠧⠤ ⠟⠻⠧⠤⠇⠇⠱⠧⠜⠣⠜\n```\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/hi-squeaky-things/little-weirdo/rust.yml?branch=main)\n![GitHub License](https://img.shields.io/github/license/hi-squeaky-things/little-weirdo)\n![Deps.rs Crate Dependencies (specific version)](https://img.shields.io/deps-rs/little_weirdo/0.1.1)\n![docs.rs (with version)](https://img.shields.io/docsrs/little_weirdo/0.1.1?style=flat)\n\n\nA Rust #no-std optimized wave table synthesizer for embedded devices.\n\n\u003e [!CAUTION]\n\u003e This project is actively being developed with frequent breaking changes. APIs may shift, features are incomplete, and stability is not guaranteed. Use at your own risk and expect regular updates that might require code adjustments. Have fun!\n\n\u003e [!IMPORTANT]\n\u003e **Hi Squeaky Things** can happen at any time. _Little Weirdo_ is ready to squeak, squuuueak, squeeeeeaak, squeaaaaaaaaak!\n\n## How to use it\n\nGet the library!\n```\n$ cargo add little_weirdo\n```\n\nStart using it in your own code:\n\n``` rust\nuse little_weirdo::synth::{\n    self,\n    data::wavetables::{BoxedWavetable, BoxedWavetables},\n};\n \n use std::{\n    fs,\n    sync::Arc,\n};\n\n const SAMPLE_RATE: u16 = 44_100; // Audio sample rate in Hz\n \n fn main() {\n     // Create a collection of wavetables and load them from files\n    let mut wt_on_heap = BoxedWavetables::new();\n    for id in 0..10 {\n        let filename = format!(\"examples/soundbank/soundbank_pure_elektro/src/wav{}.raw\", id);\n        let contents = fs::read(filename).unwrap();\n        let bytes: \u0026[u8] = \u0026contents;\n        wt_on_heap.add(BoxedWavetable::new(bytes));\n    }\n    // Wrap wavetables in an Arc for thread-safe sharing\n    let wt = Arc::new(wt_on_heap);\n    \n    // Load a synth patch from a JSON file\n    let patch = serde_json::from_slice(include_bytes!(\"patches/bass.json\")).unwrap();\n\n    // Create a new synthesizer instance with specified parameters\n    let mut synth: synth::Synth = synth::Synth::new(SAMPLE_RATE as u16, \u0026patch, Arc::clone(\u0026wt));\n\n    // Trigger a note\n    synth.note_on(60, 100);\n\n    loop {\n        let _sample:[i16;2] = synth.clock_and_output();\n        // do something with the sample, stream it to a audio device for example\n        break;\n    }\n    \n }\n```\n\nRun Little Weirdo as a MIDI device while outputting to a local Audio Output, check out [Little Weirdo Streaming Audio With MIDI](examples/little_weirdo_streaming_audio_with_midi.rs)\n\nIf you just want to play with a patch for Little Weirdo, check out [Little Weirdo Patch Tester](examples/little_weirdo_patch_tester.rs)\n\nTo generate you own Soundbank, download some Wavetable samples from AKWF and run [Little Weirdo Generate Soundbank](examples/little_weirdo_generate_soundbanks.rs)\n\n## Performance\n\nThe performance tests on real embedded hardware can be found here [Little Weirdo ESP32](https://github.com/hi-squeaky-things/little-weirdo-esp32)\n\n## Patches\n\nPatches can be fully programmed in Rust or loaded using JSON (Testing) or Postcard (Embedded Devices).  Checkout the [patches](examples/patches/)\n\n🎹 Listen to the Ebass patch (unmute the audio 🔇 ➡️ 🔊) :\n\nhttps://github.com/user-attachments/assets/56b9666d-ab76-4716-8fe9-58ffc7642058\n\n🎹 SuperSaw with 4 oscillators enabled :\n\nhttps://github.com/user-attachments/assets/149d2a91-86f8-4a7f-bbc5-ff8ae06aa395\n\n## Credits\n\n- [Small Braille ASCII Font](https://patorjk.com/software/taag/#p=display\u0026f=Small+Braille\u0026t=LITTLE+WEIRDO\u0026x=rainbow1\u0026v=1\u0026h=1\u0026w=80\u0026we=false)\n- [Wavetable samples by Adventure Kid Waveforms ](https://github.com/KristofferKarlAxelEkstrand/AKWF-FREE)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhi-squeaky-things%2Flittle-weirdo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhi-squeaky-things%2Flittle-weirdo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhi-squeaky-things%2Flittle-weirdo/lists"}