-
Notifications
You must be signed in to change notification settings - Fork 5
/
Project.ts
102 lines (83 loc) · 2.32 KB
/
Project.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import type { DeviceType } from "@/utils/devices";
export interface ProjectDataSample {
/** Optionnal friendly name for this sample - because why not ?-? */
name?: string;
// TODO: Metadatas for the sample (audio and lightshow).
}
export interface ProjectData {
/** Global pages for the project. */
pages: {
/** Name of the page. */
name: string;
/** Samples of the page. */
samples: {
[pad_id: number]: ProjectDataSample;
}
}[];
files: {
[relativePath: string]: {
/** File name, extension isn't required. */
name: string;
/** Note: should always have a trailling slash ! */
path: string;
/** Note: not available when importing. */
data: ArrayBuffer;
/**
* MIME of the audio file.
* Required at export to recompose file names with
* proper extensions for them.
*/
mime: string;
}
}
/** Defaults at 120 BPM. */
global_bpm: number;
}
/**
* Content of a project that is stored in
* a `project.json` file or in localForage.
*/
export interface ProjectMetadata {
/**
* Version of lpadder supported for this project.
* It corresponds to the version on the home page `/`
* or to the "version" field in `package.json`.
*
* When a version don't match, we show a modal
* redirecting to the latest build of the version.
*/
version: string;
/** Project's name. */
name: string;
/** Author(s) of the music. */
authors: string[];
/** Creator(s) of the project. */
creators: string[];
/** Height of the preview canvas. */
canvasHeight: number;
/** Width of the preview canvas. */
canvasWidth: number;
/** View position of the preview canvas. */
defaultCanvasViewPosition: { x: number, y: number, scale: number };
/** Devices handling. */
devices: {
/** Friendly name of the device in the editor. */
name: string;
/** Device to use so we can use the good layout. */
type: DeviceType;
/** Device's `raw_name` linked to this device. */
device_linked?: string;
canvasX: number;
canvasY: number;
canvasScale: number;
}[];
}
/** Used when the projects' metadata are preloaded. */
export interface ProjectLoadedMetadata {
slug: string;
metadata: ProjectMetadata;
}
export interface ProjectStructure {
metadata: ProjectMetadata;
data: ProjectData;
}