Update Ableton export to use dedicated arrangement time signature ID generation
This commit is contained in:
@@ -1102,22 +1102,40 @@ function getTimeSignatureId(timeSignature: { numerator: number; denominator: num
|
||||
);
|
||||
}
|
||||
|
||||
function getArrangementTimeSignatureId(timeSignature: {
|
||||
numerator: number;
|
||||
denominator: number;
|
||||
}) {
|
||||
const signature = `${timeSignature.numerator}/${timeSignature.denominator}`;
|
||||
const timeSignatureId = TIME_SIGNATURES[signature];
|
||||
if (timeSignatureId === undefined) {
|
||||
throw new Error(
|
||||
`Arrangement export has no verified Ableton Live time-signature ID for ${signature}`,
|
||||
);
|
||||
}
|
||||
return timeSignatureId;
|
||||
}
|
||||
|
||||
function buildArrangementTimeSignatureEvents(
|
||||
sections: AblArrangementSection[],
|
||||
fallbackTimeSignature: { numerator: number; denominator: number },
|
||||
) {
|
||||
const initialTimeSignature = sections[0]?.timeSignature || fallbackTimeSignature;
|
||||
const initialTimeSignatureId =
|
||||
sections.length > 0
|
||||
? getArrangementTimeSignatureId(initialTimeSignature)
|
||||
: getTimeSignatureId(initialTimeSignature);
|
||||
const events = [
|
||||
{
|
||||
'@Id': 0,
|
||||
'@Time': -63072000,
|
||||
'@Value': getTimeSignatureId(initialTimeSignature),
|
||||
'@Value': initialTimeSignatureId,
|
||||
},
|
||||
];
|
||||
let previousTimeSignatureId = getTimeSignatureId(initialTimeSignature);
|
||||
let previousTimeSignatureId = initialTimeSignatureId;
|
||||
|
||||
sections.forEach((section, index) => {
|
||||
const timeSignatureId = getTimeSignatureId(section.timeSignature);
|
||||
const timeSignatureId = getArrangementTimeSignatureId(section.timeSignature);
|
||||
if (index === 0 || timeSignatureId === previousTimeSignatureId) {
|
||||
previousTimeSignatureId = timeSignatureId;
|
||||
return;
|
||||
@@ -1162,7 +1180,9 @@ export async function buildProject(projectData: ProjectRawData, exporterParams:
|
||||
transformedData.arrangementSections[0]?.timeSignature ||
|
||||
projectData.scenesSettings.timeSignature;
|
||||
(project.Ableton.LiveSet.MasterTrack.DeviceChain.Mixer as any).TimeSignature.Manual['@Value'] =
|
||||
getTimeSignatureId(initialTimeSignature);
|
||||
transformedData.arrangementSections.length > 0
|
||||
? getArrangementTimeSignatureId(initialTimeSignature)
|
||||
: getTimeSignatureId(initialTimeSignature);
|
||||
project.Ableton.LiveSet.MasterTrack.AutomationEnvelopes.Envelopes.AutomationEnvelope[0].Automation.Events.EnumEvent =
|
||||
buildArrangementTimeSignatureEvents(
|
||||
transformedData.arrangementSections,
|
||||
|
||||
Reference in New Issue
Block a user