We’ve got a new Beta with some major new audio enhancements for sample accurate audio looping. We’d like to get your feedback on it before these features make it into the main build. (Latest stable build: VDMX6 1.3.8 Update )
As always, if you run into any bugs, please use the built in Help menu > Report Bug.
Major movie player overhaul: Faster triggering, sample accurate audio looping, and DJ-style audio scratching.
Audio waveform for movies draws on the time slider.
Adds support for .caf and .flac files.
Adds preference for switching between vari-speed and pitch correction algorithms when playing movies at a non-1x rate. Scratching always uses vari-speed style.
Fixes:
Fixed an issue with smoothing on the time slider.
The Endless MIDI mode option now appears for dedicated MIDI sources.
Dedicated MIDI sources now work correctly with echo mode.
Better recovery when a movie fails to load / when movie triggering is overloaded.
Various other minor bug fixes and optimizations.
You can adjust the waveform color in the theme settings:
This sounds great. I can’t play with it at the moment. But, it is very hard to find software which handles realtime audio with a high level of precision. In my tests of a few softwares, it was common for either the audio or video to play from partway in, losing the first instant of content. Permit me to list my ideal behaviour:
triggering an audio+video file:
always plays video from the first frame
always plays audio from the first sample
preserves sync of audio and video
if the audio or video is slow to prepare, then it is expected the latency from the trigger event will increase (the audio might wait for the video to be ready so it can be played in sync from sample 0)
For anyone doing live audio and video mixes, you’ll want to use optimized performance video codecs such as HAP for faster seeking (and ensure they are pulling from internal or external drives/ssds with enough speed and bandwidth to meet your needs).
There are some options in the preferences for changing how VDMX handles audio.
You can pre-load the media in the media bin if you’d like to access more clips faster, but be aware this uses up more memory when loading your media bin pages.
VDMX6 new project, dropped in a HAP test file with first frame cyan remaining frames blue. Audio is a short hat layered over a long kick.
Triggering results: Fairly solid. Sound never missed the leading edge of the waveform. The cyan first frame is nearly always played. I used a plugin to remove the blue channel, leaving a green frame followed by black, and in a bunch of manual testing there were only a few instances where the first frame seemed to be skipped. Using Movie Recorder plugin, one trigger is missing the first cyan frame, but I’m not certain whether that is a recording artifact. Overall, nearly perfect results, at least in a test project with no load.
Looping results: clearly misses the start of the audio when looping (see attached waveform image; the first two are clean triggers the next few are front-truncated loops). The first video frame was definitely missed 2% of the time.
Other findings:
stopping playback (using eject button) causes a pop in the audio because the waveform is truncated. In the audio world, a cut is always implemented with a tiny fade to avoid this.
using Layer 1 src to set rate to 0 and scratch around the beginning of the file, the playback position sometimes wrapped around to the very end of the file. On vinyl there is always empty space before the start of a sample, but the intent seems to be to restrict the playhead to within the range of valid frames, having it glitch from frame 0 to the last frame looks like a rounding error type of bug. Similarly, scratching around the end of the file (which is silent) would glitch to frame 0 and play snippets of sound from the start of the file.
Just submitted a bug report referencing this thread, thanks.
In my ideal world, handling of latency vs sync vs completeness would be a policy enforced by code. Or multiple policies, some of which might be selectable - “always play all of the requested content in sync, at the expense of latency” or “honor the timing of the trigger, at the expense of possibly pre-truncating or still-framing media”. Media being on SSD vs external drive, in a specific codec or container, system load, etc would be expected to impact the performance (the expense paid in latency or lost content) but the policy would hold. Looping is a case where the future is known, so it might reasonable to expect the implementation to be both complete and time-accurate.
If completeness was a policy at the app, project, or src level, then I would put my large files intended for linear playback in a space-saving format with lots of interframes, although I wouldn’t expect to be able to scratch the src performantly.
Completeness happens to be the requirement I had for a specific project, and tested a handful of video-forward software without finding a perfect solution. For a different use case, “keep everything in sync with this wall-clock BPM and honor the timing of the trigger” would be a reasonable user wish.
VDMX works really well. I don’t know if the implementation is implicitly or explicitly prioritizing timing, latency, or media completeness across the various codepaths and features, so I’m not sure what is considered a bug.
Thank you for sharing your files. I tested it on my M3 Max MBP and I’m not having the same issues with the recording varispeed. I believe the difference you are seeing with your audio being cut short is because you have pitch correction enabled. If you switch to Varispeed you should see the full audio file. (Perhaps pitch correction will be fixed in a future update)
Note: These are being exported as H.264 files. Real-time encoding and decoding performance depends on your computer’s processing power. I believe you have an M1 Max, so perhaps the recording will be different for you.