I would take a look at the Treeview widget source:
https://github.com/livecode/livecode/tr ... s/treeview
That will show examples of passing arrays to/from a widget. You don’t usually call handlers directly in the widget from LCS. You may be able to use do in widget though.
AudioWaveform
Moderators: Klaus, FourthWorld, heatherlaine, kevinmiller, robinmiller
Re: AudioWaveform
Hi,
Thank you for the directions!
Learned a whole lot about widgets that differs much from Libraries and also about inline documentation from TreeView.
Now I am on a good track!
Google Gemini fooled me a lot about "dispatch" and "send" usage in widgets!
Regards,
Peter
Thank you for the directions!
Learned a whole lot about widgets that differs much from Libraries and also about inline documentation from TreeView.
Now I am on a good track!
Google Gemini fooled me a lot about "dispatch" and "send" usage in widgets!
Regards,
Peter
Re: AudioWaveform
Hello,
I (Appic) have today released the FREE widget "MixPlay". MixPlay is a 64-track audio player for MP3, WAV, or FLAC files.
Use MixPlay to play, up to 64 stems in sample perfect syncronization.

MixPlay supports adjusting "Mute," "Volume," and "Pan" for individual tracks, as well as modifying the pitch and playback rate of the mixed master channel in real time during playback. MixPlay also provides amplitude peaks during playback, allowing for the visualization of VU meters.
The widget has been tested in Livecode Create 1.0 (DP12) Classic Mode in macOS Golden Gate and Windows 11.
Please refer to the included demo stack, "MixPlay_demo.livecode" (shown in the image above) and the dictionary documentation.
If you find bugs or have suggestion for features, please contact mailto:contact@Appic.se
Download the Widget at https://appic.se/livecode/mixplay_widget_1.0.1.zip. Please read the ReadMe.txt file in the zip-file.
Visit https://appic.se/livecode/livecode.html for other Livecode Widgets.
THANKS FOR YOUR SUPPORT!
Best Regards,
Peter (Appic)
I (Appic) have today released the FREE widget "MixPlay". MixPlay is a 64-track audio player for MP3, WAV, or FLAC files.
Use MixPlay to play, up to 64 stems in sample perfect syncronization.

MixPlay supports adjusting "Mute," "Volume," and "Pan" for individual tracks, as well as modifying the pitch and playback rate of the mixed master channel in real time during playback. MixPlay also provides amplitude peaks during playback, allowing for the visualization of VU meters.
The widget has been tested in Livecode Create 1.0 (DP12) Classic Mode in macOS Golden Gate and Windows 11.
Please refer to the included demo stack, "MixPlay_demo.livecode" (shown in the image above) and the dictionary documentation.
If you find bugs or have suggestion for features, please contact mailto:contact@Appic.se
Download the Widget at https://appic.se/livecode/mixplay_widget_1.0.1.zip. Please read the ReadMe.txt file in the zip-file.
Visit https://appic.se/livecode/livecode.html for other Livecode Widgets.
THANKS FOR YOUR SUPPORT!
Best Regards,
Peter (Appic)
Last edited by pklum on Sun Nov 01, 2026 11:54 pm, edited 4 times in total.
Re: AudioWaveform
Hi,
Updated the MixPlay Widget to 1.0.1 with some bug fixes and changes
Version 1.0.0 released 2026-10-29
Regards,
Peter
Updated the MixPlay Widget to 1.0.1 with some bug fixes and changes
Version 1.0.0 released 2026-10-29
- Initial Release
- BUGFIX: Now handles filenames with international characters (åäö, etc).
Regards,
Peter
Last edited by pklum on Sun Nov 01, 2026 11:55 pm, edited 3 times in total.
Re: AudioWaveform
Hi,
Updated the Waveform Widget to 1.0.3 with some bug fixes and changes
Version 1.0.1
Regards,
Peter
Updated the Waveform Widget to 1.0.3 with some bug fixes and changes
Version 1.0.1
- BUGFIX: LabelColor is now saved
- BUGFIX: Orphan message timeClicked removed. It is named clickedSample.
- CHANGE: Changed some Property Names (audioPath to filename, audioFrames to duration, audioSampleRate to timeScale), to match the property names used in the Player Object.
- NEW: When setting filename the existence of the file is checked. If the file does not exist, the filename property is set to empty.
- UPDATE: Documentation updated.
- BUGFIX: Now handles filenames with international characters (åäö, etc).
- BUGFIX: To clear the waveform with 'set the filename of <widget> to empty' now works.
- CHANGE: Track data are now buffered in LCB minimizing C++ calls. Improved performance with objects overlapping the waveform widget.
- CHANGE: Documentation changes. "Snapshot" example to optimize rendering furthermore using a static waveform when objects overlap.
- CHANGE: Changed title to "Waveform"
Regards,
Peter
Last edited by pklum on Sun Nov 01, 2026 11:51 pm, edited 2 times in total.
-
PaulDaMacMan
- Posts: 690
- Joined: Wed Apr 24, 2013 4:53 pm
- Contact:
Re: AudioWaveform
Excellent! Then this indeed is a really nice gift to the community.pklum wrote: Mon Oct 19, 2026 2:36 pm I have no idea about licensing issues. In `waveform_core.dylib` and `.dll`, only `dr_libs` (dr_flac, dr_wav, dr_mp3) are used. According to the `dr_libs` documentation it is public domain or MIT-0.
I am not imposing any other license requirements on the Waveform widget.
Thanks again for sharing your work. It's very nicely done.
Widgets aren't meant to have functions and commands, they're strictly meant for UI controls, so only uses property setters commands and property getters functions to exchange info with the scripting side. If it's all commands and functions and no on card UI needed then that typically would go in an Extension Library, not Extension Widget.pklum wrote: Mon Oct 19, 2026 5:57 pm My Questions:
In the Waveform widget all setting and getting are handled via properties, which after some Google Gemini support got sorted out.
In MixPlay I have tried to execute public handlers using (Google Gemini suggestion) with no success using dispatch (it becomes unhandled).
- Could you show me some best practice examples on how to call LCB Widget functions and commands from LCS?
- How should I communicate arrays from LCS to LCB?
- Do you recommend any internet link?
However, You could, as I've done for a similar need, implement your own custom parser to enable 'do <sometext> in widget' in you Builder code.
To do that your widget needs to contain a handler OnDo( in pSomeTextToParse as String )
and then have code that processes a string of commands contained in the passed in string.
I use that to enable syntax like:
'do "keyDown" & pChar in widget "My OnScreen Keyboard"
See source here: https://github.com/OpenXTalk-org/OpenXT ... enKeyboard
Re: AudioWaveform
Hi PaulDaMacMan,
Thank you for the info and Thanks!
My first implementing of MixPlay was a Library and got it to work fine. But the "problem" is that the Library needed a persistant pointer to the audio engine and I wanted to have the ability to have many (not that many) MixPlay players in a stack. My solution was to convert the Library to a widget where each widget holds its own pointer to each own audio engine. Maybe that could be solved with a Library as well. But I am a newbie at LCB so that was my solution. Developing a Widget was more painful then implementing a Library.
I have updated the Waveform Widget with performance updates.
Best Regards,
Peter
Thank you for the info and Thanks!
My first implementing of MixPlay was a Library and got it to work fine. But the "problem" is that the Library needed a persistant pointer to the audio engine and I wanted to have the ability to have many (not that many) MixPlay players in a stack. My solution was to convert the Library to a widget where each widget holds its own pointer to each own audio engine. Maybe that could be solved with a Library as well. But I am a newbie at LCB so that was my solution. Developing a Widget was more painful then implementing a Library.
I have updated the Waveform Widget with performance updates.
Best Regards,
Peter