NOTICE
Since Huawei just officially announced system support for MIDI devices in API24, I recon Huawei is likely building their own DAW. So I decided to halt the development of this project and disclose it for anyone's reference who is still falling down this rabit hole. Good luck to y'all and hopefully I can get my hands on the first "GarageBand" on HarmonyOS soon (without having to give up my own one-hour-after-work)!
doh is a DAW (Digital Audio Workstation) for HarmonyOS Next. It is intended to be a musical software covering casual music creation, software synthsizer, transcription utility to semi-professional music production, providing low-latency playback, native MIDI support and an easy-to-use interface, just like GarageBand for i-devices.
NOTE
This project is currently in its very early stage, close to proof-of-concept, far from a minimal viable product. Expect bugs, crashes, limited audio file format support (currently only 48k 16bit WAV is supported) and breaking changes.
dohis expected to take advantage of the Huawei Nearlink technology to provide professional grade low-latency wireless audio solution for everyone wanting to freely express their music without towing a cable nor spending a fortunedohwill possiblly support AI content generation for the less musical folks, pushing music creation to those with taste but less agile fingers
This project is expected to be agent-friendly as it provides an AGENTS.md and an AI-generated repo wiki. Happy vibing!
Special thanks to:
Design goals
Renaming should be trivial, it should not invalidate in-memory metadata or handlers.
==> Always prefer UUID over legible names.
Treat assets and resources as archives, never invalidate any original information unless the user tell us to do so.
<project_name>.doh-proj # project workspace folder
| # project name cannot be changed once created
|
|-- project.json # entry manifest file to index all project files
|
|-- imported/ # imported resources
| |-- <an_imported_audio_clip>.wav # files are imported as is
| `-- <an_imported_midi_clip>.mid
|
|-- tracks/ # tracks stored by their uuid
| |
| |-- xxxx-xxxx/ # example sound sample track
| | |-- track.json # manifest for a track
|
|-- pipelines/ # processing / routing pipelines
|
|-- cache/ # everything in the cache folder should be rebuildable
| `-- xxxx-xxxx.wav # e.g. resampled imported clip as pcm-based sound file
|
...