[Csnd] Browser based wave editor and transformer using WASM Csound

Hi,
I have developed a browser based sound editor using WASM Csound, which can be used to edit, create and transform sounds in various way. It's influenced by sound design tools like Cecilia, Mammut, Soundshaper and is geared towards working with fairly short sounds.

It is quite easy to add new effects/transforms with Csound and JSON, and I'd welcome any contributions of those. There is a basic introduction under the help menu, and I may make some walkthrough videos if anyone is interested. Grateful for any suggestions and feedback.

https://twist.1bpm.net/

Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
        GitHub · Where software is built
Discussions of bugs and features can be posted here

This is excellent Richard! Of course I had to set the theme to hacker straight away :slight_smile: I’m curious how you manage the different effects. Each one is a unique Csound instrument, with communication between it and the UI happening via JSON messages?

Hi Richard! Your editor looks amazing!! I’m looking forward to play with it a bit more when I find some time but in the meantime congrats!!

It’s really good, great sound design tool.
The only thing that it took me a while to figure out was the play vs audition vs commit actions, which makes
sense once you’ve done it once but at first I was looking at it thinking how can I generate a sine wave.

This should also be really useful in the classroom for the coding shy students.

Makes me wonder whether an integration of the Web IDE (which is also really successful) and this could be
designed.

Well done, it’s brilliant stuff.

I agree, imprssive work! I can imagine how much coding and designing hours went into it!
Are you planning to do also demo videos that open the possibilities maybe the best way?

Especially I some examples about extending Twist would be welcome.

Congratulations!
tarmo

Kontakt Victor Lazzarini (<000010b17ddd988e-dmarc-request@listserv.heanet.ie>) kirjutas kuupäeval T, 25. veebruar 2025 kell 11:45:

It’s really good, great sound design tool.
The only thing that it took me a while to figure out was the play vs audition vs commit actions, which makes
sense once you’ve done it once but at first I was looking at it thinking how can I generate a sine wave.

This should also be really useful in the classroom for the coding shy students.

Makes me wonder whether an integration of the Web IDE (which is also really successful) and this could be
designed.

Well done, it’s brilliant stuff.

Prof. Victor Lazzarini
Maynooth University
Ireland

WARNING This email originated from outside of Maynooth University’s Mail System. Do not reply, click links or open attachments unless you recognise the sender and know the content is safe.
Hi Richard! Your editor looks amazing!! I’m looking forward to play with it a bit more when I find some time but in the meantime congrats!!

This is excellent Richard! Of course I had to set the theme to hacker straight away :slight_smile: I’m curious how you manage the different effects. Each one is a unique Csound instrument, with communication between it and the UI happening via JSON messages?

Hi,
I have developed a browser based sound editor using WASM Csound, which
can be used to edit, create and transform sounds in various way. It’s
influenced by sound design tools like Cecilia, Mammut, Soundshaper and
is geared towards working with fairly short sounds.

It is quite easy to add new effects/transforms with Csound and JSON, and
I’d welcome any contributions of those. There is a basic introduction
under the help menu, and I may make some walkthrough videos if anyone is
interested. Grateful for any suggestions and feedback.

https://twist.1bpm.net/

Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here
Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports tohttps://github.com/csound/csound/issues Discussions of bugs and features can be posted here
Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports tohttps://github.com/csound/csound/issues Discussions of bugs and features can be posted here

Csound mailing list
Csound@listserv.heanet.ie
https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND
Send bugs reports to
https://github.com/csound/csound/issues
Discussions of bugs and features can be posted here

Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here

Thank you, glad to hear the themes are getting some use too! There are a couple of hints at retro-computing with the CP437 font on the hacker theme and the default which is the classic Mac OS font…

That’s exactly the fundament of it - each is a Csound instrument. When auditioning/previewing they are played in realtime and then when committing/applying they are run in a k-rate loop so can potentially perform faster than realtime - which is split into a maximum of 100 chunks in order to report percentage.
There are a bunch of helper opcodes for the instrument design. For example, some effects will want a-rate input, so an opcode provides that for the selected region. Then some (eg using sndwarp) need a ftable, so in those cases there is an opcode to provide the selected region as a table, sliced from the original table at init time.

Yes - communication happens with JSON. I use this method in a live performance setup with ctcsound, where outvalue/setOutputChannelCallback are used with a callback management type approach, so instruments providing a JSON response will be given an ID as p4, then the associated function can be executed when the host receives the return JSON. However, setOutputChannelCallback isn’t supported in the WASM API - and I’m a little uncomfortable with polling which I think would have to be at kr. So it feels kind of hacky, but the WASM API has a callback handler for messages - so the JSON strings are literally printed to the console prepended with an identifier, then the message handler callback deals with any strings having that identifier accordingly.

You can see some basic instruments here: https://twist.1bpm.net/udo/twist/transforms/frequency.udo
There are a lot of UDOs, but you can see the input audio signals are obtained from an opcode which also yields whether left/right/both channels are selected and to be processed, then an opcode to obtain parameters from the UI (which are defined in a JSON object) - then output stereo audio as usual. These are run via subinstr, and everything else is taken care of, so ideally it should be quite simple to write the instruments.
Developer documentation explains most of this - https://twist.1bpm.net/developer_documentation.html

Thanks, I appreciate it! Please feel free to let me know how you get on and if you have suggestions/find bugs etc.

Thank you for the feedback, appreciate it.
Yes, I did wonder if the terminology is a bit unusual and preview/apply might make more sense - or if there could be any other way to make it more obvious - perhaps just some more tips/hints on first run.

Those are really interesting points about the educational use and integration with Web IDE. I've been thinking how it could bridge code/visual more - it does have the developer console on the action menu where new instruments can be compiled, but I'd be interested to hear if you have any specific ideas that come to mind for Web IDE integration, and am definitely open to that.

Thanks! It’s been on my mind for a while, and is actually a side-project/distraction for a browser based Csound multitracker - which works, but not completely ready to release yet!

Yes I agree those would be good things to create demo videos for. I did make one but wasn’t too happy with it as it didn’t cover everything, so I’ll probably do a few different topics and post here when ready. Happy to hear you’d be interested to know about extending it and will definitely cover that in the videos - I’d be really interested to see what other people do with it in that regard.

I have created a walkthrough video for this which outlines the capabilities and gives a peek at how to extend it using Csound and JSON:

Hopefully will be of use to someone :slight_smile:

Richard,

Fantastic work! WOW. Loving it. And, especially appreciating your Overview Video!
I will be sharing it with my Csound and DSP students in the next few weeks - and I am confident that they will be as excited as I am about your fantastic work.

Thank you Dr. B!

That’s great to hear - a friend has been using it in the classroom too! Appreciate any feedback, suggestions and bug reports.

Hello Csounders,

As some of you know, for the past 4 years, I have been working with students at Berklee on making music with Rory Walsh’s amazing CsoundUnity API and inspired by the great work of Giovanni Beditti in CsoundUnity.

At the 2024 ICSC in Vienna, we performed and workshopped our latest version, developed by the brilliant Hung Vo (Strong Bear), called “CsoundMeta,” and premiered my latest composition - “Csound Dreams in the MetaVerse”.

We are planning to feature a new performance of the piece, workshopping the system, and then ClubJamming with the software at the 50th anniversary of the International Computer Music Conference in Boston this June 11,12.

I have been honored to be one of the three Keynote Speakers for ICMC 2025.

Here are a few links about the event and my plans for CsoundMeta there:

The event: https://icmc2025.sites.northeastern.edu/

My keynote (on June 11): https://icmc2025.sites.northeastern.edu/keynote-speakers/

Additionally, as part of ICMC 2025, I am doing a workshop on Csound in the METAverse on the morning of June 12 (in the Loft @ Berklee)

Finally, the workshop participants and (hopefully) many other ICMC attendees will gather in a local club (Kings) that evening to have a few drinks and join in a “Csound in the MetaVerse” Jam Session.

Whether you are coming to ICMC 2025 or not…

  • Would you like to try CsoundMeta?

  • Would you like to join the workshop from your studio, classroom, or home?

  • Would you, your students, your children, your colleagues & friends like to install a copy of “CsoundMeta” on your or their Quest2, 3, 3s, or Pro?

Strong Bear and I have been live-streaming this past week. In these recorded sessions, we have been helping students and colleagues get started with the system so that they could participate in the FlashMob at the end of my Keynote and Jam in the workshop and nightclub.

I would love you to join in the fun, too, and you can get the software up and running today.

Join our Discord channel to find the links to previous live streams and links on how to get, install, and run CsoundMeta: https://discord.gg/PaWJXZMt

Also, maybe you would like to join us on the Live Steams this week - Monday, April 14, and Thursday, April 17, from 1 pm to 3 pm EDT.

Here are the details.

April 14 Topics:

  • Introducing CsoundMeta
  • Dr. B & Strong Bear play a live Duet
  • Berklee students co-locate in and join the Duet
  • Overview of the system features
  • Demonstration on how to play the soundOrbs and how to assign immersive worlds in which to play,
  • Demonstration on how to design-customize csoundORBS, map controllers, create presets, and make preset palettes
  • Demonstration on how to save movements and structure compositions on the timeline.
  • We will be introducing our latest feature: live sound capture and processing
  • We will be helping more of you with your setups and answering your questions

If you can’t make the live stream, you will be able to watch the recordings of the sessions

Hoping that some of you get CsoundMeta installed on your Quests and that we might be jamming, composing, and performing together soon with Csound in the MetaVerse.

Best,

-dB