-
Notifications
You must be signed in to change notification settings - Fork 290
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add MusicXML Import #1152
base: master
Are you sure you want to change the base?
Add MusicXML Import #1152
Conversation
Each individual notes includes information under the Verified under MuseScore by examining the musicxml export under different key signatures. As such, keeping track of key signatures is unneeded. Also for reference: https://www.musicxml.com/publications/makemusic-recordare/notation-and-analysis/a-sample-musicxml-encoding/ |
There exists compressed musicxml following the zip compression method under the file format |
Addressing oxygendioxide's concern on character encoding, remember to check for it. Can see for an example: OpenUtau/OpenUtau.Core/Format/Midi.cs Line 32 in b969d52
Check the entire |
Regarding length of time, the Seems to be a viable way of interpreting note length. A paper published on 2021 provides details on the The |
Went with Importing a basic MusicXML with Using a sample MusicXML provided by NEUTRINO, importing into OpenUTAU, and rendering with Teto appears to match the result of the render from NEUTRINO with Zundamon |
Export compatibility is in context of NEUTRINO. MusicXML is actually only used as an intermediary format to be converted to HTS The utility appears to be derived from https://github.com/taroushirani/xml2lab which itself seems to draw from https://www.sinsy.jp/ Food for thought, perhaps it's possible to skip straight to the |
Able to have no elements under for full rest like |
89065a0
to
ec23a29
Compare
Order that elements occur in a measure seem to matter to NEUTRINO One would think generating One way to modify order on serialization is rearranging the order of the definitions themselves in whatever class within |
There might be some incompatibility between programs. OpenUTAU and pals allows time signature change basically anywhere. MuseScore only allows placement at the start of the measure and following from that I dunno whether this is acceptable in the MusicXML standard. Related to previous comment about order of elements mattering(?) |
For sake of simplicity, leaving out support for tempo and time signature changes in the middle of a measure. Future changes add it can probably rewrite/customization serialization behaviour to do stuff like target NEUTRINO |
Use Use dynamic programming to efficiently translate OpenUtau notes to optimal number of MusicXML notes. See coin change and/or knapsack problem for reference. Data structures and algorithms coming in handy out in the wild kinda surprising 🤔 |
c25f7d2
to
43f23ff
Compare
Splitting Import/Export into different PR's to reduce complexity and have Import for testing earlier. Export will be handled in another PR |
Could please you add some unit tests for this importer? |
Adding MusicXML capabilities may be the starting point for future support with NEUTRINO. This PR is for importing.
XmlSchemaClassGenerator used to generate MusicXML 4.0 schema for use with
XmlSerializer
. Most of new lines of code comes from it in:MusicXMLSchema.cs
Corresponding Discord Thread