greetings, i want to build a daw (digital audio workstation), but i have no idea where to even start. here are my needs and the options i’ve found:

my needs:

  • load and keep things (audio, midi) in memory
  • cross-platform compatibility is not a requirement

the options i’ve found:

  • flutter
  • gtk/qt
  • raylib (with zig)
  • webassembly (with zig)

[rejected] flutter: the first option that came to my mind was flutter. i thought it would give me a quick start in laying down the ui, but i don’t think it has the capability to fulfill my needs (please correct me if i’m wrong)

gtk/qt (with zig): i wonder if qt provide bindings for zig

raylib (with zig): it’s cool (my choice as of now)

[rejected] webassembly (with zig): it would be an ultimate comfort to build this way ig, but is it possible to make that web app into desktop one (like tauri or something)?

id really appreciate your opinions and advice

ps: i hope i’m clear. i got a headache searching about these. i’ll update this post for more clarity later

final note

Thank you guys for all your opinions and advises. Thanks for explaining the limitations with gtk, things with qt and flutter. That kotlin compose thing was cool too. Thanks for mentioning yabridge thats gonna be helpful. It might not seem like it, but I did listen to your thoughts, and stuck with zig and raylib. Thanks a lot

  • @LeFantome
    link
    328 days ago

    He said multi platform is not a requirement. But good low-level audio performance is.

    What were you thinking?

    • @[email protected]
      link
      fedilink
      1
      edit-2
      28 days ago

      I don’t see him mentioning low level audio performance is a requirement. And he listed flutter as something he had considered.

      Can you not process audio in the JVM?

      Edit: targeting JVM he could also use the JNI and do the low level stuff in c++ if needed. I don’t know how that’d cross to iOS but it’d work on all 4 other platforms.

      Edit: And he doesn’t need to target mobile either, he can just target the JVM, write it in Kotlin + Compose and if needed write native code if he needs more performance.