Do you have a timestretch algorithm enabled by way of config flags?
Yes, SoundTouch is enabled. (At first, before I had any timestretch algorithm enabled, the rendered audio files contained really strange garbage )
Are you trying to do this synchronously?
No, I just load a file into a clip and place warp markers and later start playback. The audio that is played back matches the content of the rendered audio file (i.e. the content of the rendered audio file is also bad).
I presume yours is similar? The only marker I added explicitly was the middle one. I think the end ones get added automatically.
The only thing I can think of is that SoundTouch isn’t behaving itself. I’ve actually refactored this code over the past couple of days which might improve SoundTouch performance, I just need to get the final tweaks finished up…
Hi @erikronstrom and @dave96
Might it be possible to get a bit more information on what’s happening here please?
I tried following @erikronstrom’s steps but when I get to the clip->updateSourceFile() I get silence on playback. I’m a bit confused as to what updateSourceFile() does as to me it implies that it destructively modifies the source audio played by the clip. That can’t be right/I must be confused!
How do we define the temp audio file that gets written when the warptime gets rendered? Or is that not the intention of how this is supposed to work?
With the setUsesProxy(true) as above, there seems to be no change to the file on disk. I used a DBG to see if it was actually writing a temp file somewhere else but it wasn’t as far as I could see. Much like @erikronstrom I get the audio re-starting each time a marker is hit.
setUsesProxy(false) and removing updateSourceFile() resulted in the unaltered source audio playing back.
I’m definitely missing something (or multiple things), but I can’t figure out what.
I’m using 2d566dcd1b6 from Dec 21, 2022, which is a little old. I’m going to see about grabbing the latest Develop commit later today.
I thought I’d take a look at tracktion Waveform Free to see if that gave me any clues. I couldn’t see how to export an XML unfortunately but I did note that Waveform uses a WarpTime clip effect. Does a beautiful job of the warping too btw. Anyway tried using a clip effect as welZ again nothing promising yet.
I’m also having problems with warp markers.
I figured out how to create/destroy and change the warp time of a warp marker and it seems that the engine underneath reacts well.
My settings are.
WarpTime = true
AutoPitch & AutoTime = false
proxyAllowed = true
I find myself with two issues :
I am in “proxy” mode and when I change the position of a warp marker it triggers the assert in the “deleteFile”.
Ah yes. I saw that file but my Mac was reporting it as 0 byte length. On saving refreshing etc it is indeed the XML I was hoping for - thanks for that!
Copying and pasting the XML from that into my app/edit got the same audible result which was a delight! However I did notice that Waveform has all of the warping stuff under EFFECTS>EFFECT Type=“warpTime”>WARPTIME etc. The code I was testing to this point was setting up the WARPTIME block as a sibling to the LOOPINFO block, with no mention of the EFFECTS block at all - and indeed didn’t work.
Which is the right approach? Are they both correct?
Thanks for this suggestions. To confirm, setAutoTempo(true) seems mandatory for warping. Now it works well and without messing with clip effects. Additionally the ‘repeating from start’ issue seems isolated to using setUsesProxy(true).
However I would prefer not have to use autoTempo as it seems to interfere with loopStart. You hinted that it might be possible to get rid of that dependency. Is that something I might be able to test at my end?