feat: added MIDI CC recording and list event table operation support.
This commit is contained in:
@@ -7,6 +7,7 @@ import { upgradeToV5 } from './upgradeToV5';
|
||||
import { upgradeToV6 } from './upgradeToV6';
|
||||
import { upgradeToV7 } from './upgradeToV7';
|
||||
import { upgradeToV8 } from './upgradeToV8';
|
||||
import { upgradeToV9 } from './upgradeToV9';
|
||||
|
||||
/**
|
||||
* Upgrade the given project to the latest structure version, one version at a time.
|
||||
@@ -58,6 +59,10 @@ export function upgradeProjectToLatest(project: KGProject): KGProject {
|
||||
workingProject = upgradeToV8(workingProject);
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
workingProject = upgradeToV9(workingProject);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
// If an upgrader is missing, throw to prevent loading incompatible structures
|
||||
throw new Error(`No upgrader found for project structure version ${nextVersion}`);
|
||||
|
||||
@@ -57,7 +57,8 @@ describe('upgradeToV8', () => {
|
||||
|
||||
const upgraded = upgradeProjectToLatest(project);
|
||||
|
||||
expect(upgraded.getProjectStructureVersion()).toBe(8);
|
||||
expect(upgraded.getProjectStructureVersion()).toBe(9);
|
||||
expect((upgraded.getTracks()[0].getRegions()[0] as KGMidiRegion).getPitchBends()).toEqual([]);
|
||||
expect((upgraded.getTracks()[0].getRegions()[0] as KGMidiRegion).getControllerEventsByType()).toHaveLength(128);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
import { KGProject } from '../KGProject';
|
||||
import { KGMidiRegion } from '../region/KGMidiRegion';
|
||||
|
||||
export function upgradeToV9(project: KGProject): KGProject {
|
||||
try {
|
||||
for (const track of project.getTracks()) {
|
||||
for (const region of track.getRegions()) {
|
||||
if (region instanceof KGMidiRegion) {
|
||||
const candidate = (region as unknown as { controllerEventsByType?: unknown }).controllerEventsByType;
|
||||
if (!Array.isArray(candidate) || candidate.length !== 128) {
|
||||
region.setControllerEventsByType([]);
|
||||
} else {
|
||||
region.setControllerEventsByType(candidate as never);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
project.setProjectStructureVersion(9);
|
||||
}
|
||||
|
||||
return project;
|
||||
}
|
||||
Reference in New Issue
Block a user