CoreLib / CoreSync
multimedia database
CoreLib
CoreLib is an open-source and cross-platform database of all kind multimedia content (audio, video, subs).
CoreSync is a CoreLib client that allows the user to merge/compare/synchronise multimedia files between 2 folders, devices.
This project aims to become the central part of multimedia files accessing and tagging on each multimedia platform (Windows, Linux, OS X, BeOS). It is designed as a database storing the location of multimedia content and meta-informations for this content (tags, streams info). And it is similar to the MDDB project specified on HydrogenAudio but more ambitious.
The status of the project is currently : specification stage.
The system architecture would probably look like this :
SQL backend < -- > CoreLib < -- > Tag Input/Output Plugin < -- > Files
^
|
--- > 3rd party application to access the database (like CoreSync, Foobar2000, TCMP, CoreLibGUI, LAME, etc)
Here is a list of features that would be nice in CoreLib :
- All files in the database should be described as URI
- Support at least the common audio tags : ID3v1, ID3v2, APE, Matroska
- All the informations from these tag systems should have a place in the database
- Support ReplayGain informations
- Support meta-informations about the files like the file size, change date of the file, the length, bitrate for each track, track codec, language, etc
- Lightweight engine that can be extended with plugins
- The engine should be standalone to be able to be embedded inside applications instead of global to the system (could be useful for CoreSync)
- It should allow links to images, lyrics, websites for an artist/LP (local or URL)
- The database in XML is most probably not the most efficient thing (or maybe with everything in memory). I think it's better not to reinvent the wheel. There are projects like SQLlite or RDFDB (already mentioned) that will prevent us from writing a database engine from scratch.
- An SQL access would be best if you want a web access to the data, or at least a DB that can be accessed with PHP
- Allow easy backup of the DB and import/export to/from other systems (RDF, XML, SOAP, PLS, M3U, etc)
- Possibility to share a collection between computers/devices (like iTunes)
- It should be open, ie any application could have read/write access to it
- It should be cros-platform (Linux and OS X users will be thankful)
- The DB should be shared between local computers and maybe on the net
- It would be silly to have such a system and decide a design that wouldn't fit in a global database
- Some tags should only apply to a person like a personal genre (for example I have one called Dirty or another called Leftfield than noone but me would like) or maybe a group of persons
- Support local HDs sources, network/URL sources, CD/DVD sources, portable player sources
- Allow an item/track to have different sources (one in FLAC, one in 64kbps MP3 and one in 160kbps AAC for example) that way when you want to transcode.
- Allow multiple tracks in a file (different tracks or the same one with different encoders) like in Matroska
- There shouldn't be just one ID system but many, thus keeping FreeDB, Musicbrainz, etc compatibility
- It would be nice to have clips of a file also share this sytem.
- An identification system should be based on the PCM content, like a MD5 or PAR process (but it's subject to bit errors between 2 CDs)
- Resync the tags when a file has been updated by a non-MDDB-aware application
- What happens when you rename a file that is known inside MDDB ? (like "move file.mp3 data.mp3"). IMO it should be possible to hook on the OS as close as possible to avoid problems like this (like an antivirus hook).
CoreSync
CoreSync is an application like any file merger (Beyond Compare, Araxis Merge, diff/patch) except that it works with multimedia files. The goal is to be able to automate the filling of a portable device to the max with certain rules (today I want all new files of genre "Trip-Hop" with bitrate higher than 130kbps up to 510MB) or synchronise a desktop computer with a laptop full of multimedia data (again with max values for the size of the content).
It could work without a CoreLib on the system or making use of the system database. In the first case it will use it's own internal database to compare/merge files based on their tagging/naming. Otherwise it will use a database for each device defined.
Here is a list of features that would be nice in CoreSync :
- cross-platform
- open-source
- user friendly : an intuitive GUI (which is not easy to do) like Beyond Compare or Araxis Merge
- Allow merging folders without the need of a local CoreLib system
- Allow bitrate selection
- Allow retagging of files
- Allow device/folder properties with constraints like the max size allowed, formats supported, restrictions on bitrates/filenames
- Store the properties on the device/folder
- Access to the local/distant CoreLib if available
- based on a standalone CoreLib with all the tags plugins
- Allow reencoding/remuxing on the fly through plugins