Controlled "uneven" playback

I need to play back an audio file in a controllably “uneven” way (kind of like a record player where you can sometimes slow the record back a bit or speed it up a bit). To control this wobble I have a list of time code locations where the “playback head” should be in at a given point of actual playback time. These time code locations follow the correct playback time but have a slight “wobble” built which I want to EXACTLY reproduce. Does anyone know if Audacity can do this (perhaps with some plugin or script) or if there’s some other audio software that can do this?

There is specialist software for this called “Capstan” by Celemony, but it has the rather high price tag of €3790 (

In Audacity you could try using a “Time track”, though you will not be able to make the changes exact.
Probably the best job (though extremely tedious work), would be to make successive approximations using the “Sliding Time Stretch / Pitch Shift” and / or “Change Speed” effects:

Thanks. Looks like Capstan has a 5-day rental option for $199 which is more reasonable (I emailed them asking if Capstan would do what I need). As far as the “Time Track” in Audacity, is there any way to read in the points for the “Time Track” curve from a file, rather than creating the curve by hand? I can format my custom time code list any way I want, if only Audacity can read it in somehow.

There is no ‘official’ way to do that, but it would be possible to hack the AUP file.

For an overview of Audacity’s “project” format, see:

Here is a very simple project, just one 10 second audio track with a Time Track and 3 control points in the Time Track:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE project PUBLIC "-//audacityproject-1.3.0//DTD//EN" "" >
<project xmlns="" projname="timetrack_data" version="1.3.0" audacityversion="2.2.0-beta-Sep 25 2017" sel0="0.0000000000" sel1="10.0000000000" vpos="0" h="0.0000000000" zoom="88.3500000000" rate="44100.0" snapto="off" selectionformat="hh:mm:ss + samples" frequencyformat="Hz" bandwidthformat="octaves">
	<timetrack name="Time Track" height="100" minimized="0" rangelower="0.900000000000" rangeupper="1.100000000000" displaylog="0" interpolatelog="1">
		<envelope numpoints="3">
			<controlpoint t="0.000000000000" val="1.000000000000"/>
			<controlpoint t="5.019807583475" val="1.100000023842"/>
			<controlpoint t="9.977362761743" val="0.997826099396"/>
	<wavetrack name="Audio Track" channel="2" linked="0" mute="0" solo="0" height="150" minimized="0" isSelected="0" rate="44100" gain="1.0" pan="0.0">
		<waveclip offset="0.00000000">
			<sequence maxsamples="262144" sampleformat="262159" numsamples="441000">
				<waveblock start="0">
					<simpleblockfile filename="" len="262144" min="-0.8" max="0.8" rms="0.565686"/>
				<waveblock start="262144">
					<simpleblockfile filename="" len="178856" min="-0.8" max="0.8" rms="0.565685"/>
			<envelope numpoints="0"/>

Another possibility would be to modify / extend this “slied-speed” Nyquist plug-in:

Thanks, will give this XML file a try.