JSON to Midi classes

This commit is contained in:
Joseph DiMaria 2026-01-30 22:48:28 -08:00
parent 3f7b409302
commit 413cefb933
30 changed files with 22881 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,6 @@
from pydantic import BaseModel, ConfigDict
class Header(BaseModel):
model_config = ConfigDict(extra='ignore')
name: str

View File

@ -0,0 +1,7 @@
from pydantic import BaseModel, ConfigDict
class Instrument(BaseModel):
model_config = ConfigDict(extra='ignore')
family: str
number: int

View File

@ -0,0 +1,9 @@
from pydantic import BaseModel, ConfigDict, Field
class Note(BaseModel):
model_config = ConfigDict(extra='ignore')
duration_ticks: int = Field(alias='durationTicks')
midi: int
name: str
ticks: int

View File

@ -0,0 +1,9 @@
from header import Header
from pydantic import BaseModel, ConfigDict
from track import Track
class Song(BaseModel):
model_config = ConfigDict(extra='ignore')
header: Header
tracks: list[Track]

View File

@ -0,0 +1,16 @@
import json
import os
from song import Song
def load_song(song_file: str) -> Song:
print("load song:", song_file)
cd = os.getcwd()
print("current directory", cd)
with open(song_file, 'r') as f:
return Song(**json.load(f))
if __name__ == "__main__":
song = load_song('assets/music/json/tetris.json')
print(song)
raise SystemExit(0)

View File

@ -0,0 +1,10 @@
from instrument import Instrument
from note import Note
from pydantic import BaseModel, ConfigDict
class Track(BaseModel):
model_config = ConfigDict(extra='ignore')
instrument: Instrument
name: str
notes: list[Note]

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +1,3 @@
raylib raylib
Box2D Box2D
pydantic