Comments (4)
A TON of work has been put into this thus far. Like literally weeks, full-time. But this remains very much a living and breathing in-progress effort. It's very close to reaching a point of satisfactory capability, stability, and accuracy. The goal now is to fine tune, work out some bugs, cover edge cases, and add unit testing to further improve its rigidity so it can be production-ready.
Currently, the parsing model is not complete (ie: does not implement 100% of the FCP XML 1.11 DTD). It may in future, but there is no compelling reason other than completeness. There exists a lot of ancillary elements possible in the DTD that are somewhat irrelevant to the main goal of DAWFileKit at present, which is markers extraction and interchange.
Also, the model is primarily designed to be read-only and is not yet capable of writing the model to disk as XML. That is a very possible addition to DAWFileKit in future, but will require a substantial refactor and is not a priority at this time.
DAWFileKit is currently capable of parsing and reasoning on:
- all resource types (asset, effect, format, locator, media, object-tracker, tracking-shape)
- all structure elements (library, event, project, sequence, spine)
- all story elements
- all clip types (asset, audio, audition, clip, gap, mc-clip, ref-clip, sync-clip, title, video)
- common annotations (markers, keywords, captions)
It's taken quite some time to start shaping the codebase and API into something more ergonomic and it's so much more effort than just writing an XML parser. FCPXML is a bit heady and labyrinthian, and takes time to get into to really understand and be able to reason on, and there's not a ton of great documentation out there.
Reasoning on the model to achieve things like this was challenging to get right:
- calculating accurate absolute timecode positions for clips and annotations, including those nested within clips
- interpolating information such as:
- what are the effective/inherited audio or video roles for any given element?
- is a clip or annotation out-of-bounds of its containing clip or or invisible due to the aggregate composite of all nested clips from the main timeline?
Multiple layers and references need to be considered and consulted to compile just one piece of reasoning datum such as these, and there are many ways to get it wrong. That's why it's taken so long to build and unit test.
from dawfilekit.
After a massive second-pass refactor, I'm getting close to stabilizing the API and getting a robust core feature set done.
- The model takes the form of lightweight strongly-typed
XMLElement
wrappers. - Careful protocolization and computed properties give read and write access to the XML without having to deal with the XML itself.
- No stored properties are utilized which allows for very performant XML traversal and data extraction.
- Advanced filtering methods and element extraction algorithms make it very easy to scrape data from the XML, such as extracting markers.
- Thorough support for calculating absolute time/timecode values for any element type from the standpoint of any parent container's timeline, including the main top-level timeline of course.
- Thorough support for extracting roles for elements including default roles and similar interpolations that Final Cut Pro itself makes but does not necessarily encode into the XML.
- Occlusion information is available for any element, reporting whether it is fully visible within its container, partially visible, or completely out of bounds. This can be calculated for the aggregate of multiple nested containers. This data can be used for filtering as well.
- Lots more improvements and features
- Improved scalability and maintainability
The goal is to have this pushed to a new release in the next week or so.
from dawfilekit.
The re-refactor is basically complete on fcpxml-refactor
branch.
- Unit tests are passing
- There are substantial performance improvements for element extraction
There should be a forthcoming merge to main and release soon.
from dawfilekit.
Merged PR to main.
from dawfilekit.
Related Issues (10)
- Cross-platform XML library
- MIDI File Support
- ProTools Session Info Text: TextEdit Character Encoding HOT 1
- ProTools Session Info Text: Handle New-line and tab characters HOT 1
- Cubase XML: Calculating event times when tempo ramp events are used
- MusicXML Support HOT 1
- Pro Tools 2023.6: Track Markers HOT 1
- Pro Tools 2023.12 New Markers Features HOT 3
- Final Cut Pro clipboard data read/write HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dawfilekit.