i want duplicate event in script, like context menu “duplicate” , then only replace audio asset in event
You can duplicate an event via script by selecting your event and calling
studio.window.triggerAction(studio.window.actions.Duplicate);. To select an event from a script, you can get an array of all events using
studio.project.model.Event.findInstances(), get your event from that list, and then use
studio.window.navigateTo(yourEventhere) to select the event in the Event Browser.
However, I definitely feel like there should be a way to do this via the Scripting API that doesn’t explicitly require you to select an event in the Event Browser, so I’ve flagged this in our internal feature/improvement tracker.
As for replacing audio assets, you’ll need two things: the instrument’s underlying
ManagedObject:SingleSound object, and the
ManagedObject:AudioFile of the audio asset you want the instrument to use. From there, you can access either
AudioFile.relationships.sounds, and use
ManagedRelationship.add() on either while passing the opposite
ManagedObject as an argument. This will replace the existing relationship between the instrument and the old audio asset with a new relationship between the instrument and the new audio asset.
A simple example of changing the audio asset of a Single Instrument on a timeline by script is the following:
// get the first instrument (single instrument) on the selected event's timeline var singleSound = studio.window.browserCurrent().timeline.modules; // get the audio asset you want the instrument to use var newAudioAsset = studio.project.workspace.masterAssetFolder.getAsset("newAudio.wav"); // do one of the below: // either add a relationship via the instrument singleSound.relationships.audioFile.add(newAudioAsset); // or add a relationship via the audio asset newAudioAsset.relationships.sounds.add(singleSound);
If your event has instruments on parameter sheets or an action sheet, then you can access those sheets via the
parameters property on your event. It’s also worth noting that with instruments that contain a playlist of multiple instruments (i.e. a Multi Instrument), you should be able to access their underlying single instruments via the
sounds property. In general, you can see the properties and functions of an entity using the
Hope that helps!