CDDB
CDDB = Compact Disk DataBase
Databáze kompaktních disků, která se nachází na serveru http://www.freedb.org/
Vyhledávání v databázi
editovatAle moc to na nic není, viz FAQ: 1.9. Is it possible to search the online freedb database?: Unfortunately not, we will release a new online search soon.
Formát dat xmcd
editovatUtility pro práci s databází CDDB
editovatDistribuce Debian
editovatlibkcddb1
editovatCDDB knihovna pro KDE
- /usr/lib/libkcddb.so.1.0.0
libcddb-get-perl
editovat- /usr/share/perl5/CDDB_get.pm - perlovský modul: spočte identifikační záznam na CD, dotáže se databáze freedb.org a vrátí xmcd záznam
- /usr/share/perl5/cddb.pl
- /usr/bin/cddbget - jednoduchý skript, využívající modul CDDB_get.pm
cddb
editovat- /usr/bin/cddbcmd - podobná utilita, napsaná v C
- /var/lib/cddb - adresář, kam se ukládají databázové soubory xmcd
python-cddb
editovat- /usr/lib/python-support/python-cddb/python2.3/cdrom.so - C knihovna pro binární čtení stop na CD
- /usr/lib/python-support/python-cddb/python2.4/cdrom.so - dtto pro python2.4
- /usr/share/python-support/python-cddb/DiscID.py - modul, volá cdrom.so
- /usr/share/python-support/python-cddb/CDDB.py - modul, který posílá dotaz na CDDB server
- /usr/share/doc/python-cddb/examples/cddb-info.py - jednoduchá utilita, příklad využití obou modulů
- /usr/share/doc/python-cddb/README.gz - dokumentace
digitaldj
editovat- http://nostatic.org/ddj/ddj.html
- http://freshmeat.net/projects/digitaldj/?branch_id=1900
- archiv diskuse: http://sourceforge.net/mailarchive/forum.php?forum_name=ddj-users (zaspamovaný, prakticky nepoužitelný)
- autor: Mike Oliphant
- program: ddj
Struktura databáze
editovat-- Databáze: 'ddj_mp3' -- -------------------------------------------------------- -- Struktura tabulky 'artist' CREATE TABLE artist ( id int(11) NOT NULL auto_increment, artist varchar(80), num_plays int(11), last_play datetime, date_added date, PRIMARY KEY (id) ); -- -------------------------------------------------------- -- Struktura tabulky 'db_info' CREATE TABLE db_info ( db_version int(10) unsigned ); -- -------------------------------------------------------- -- Struktura tabulky 'disc' CREATE TABLE disc ( id int(11) NOT NULL auto_increment, title varchar(80), artistid int(11), num_plays int(11), last_play datetime, genre varchar(20), `year` int(11), date_added date, gain_adjustment int(11), PRIMARY KEY (id), KEY artistid (artistid) ); -- -------------------------------------------------------- -- Struktura tabulky 'playlist_data' CREATE TABLE playlist_data ( id int(10) unsigned NOT NULL auto_increment, `name` varchar(255), `type` enum('SONG','ARTIST','DISC','GENRE') default 'SONG', size int(10) unsigned, PRIMARY KEY (id), UNIQUE KEY `name` (`name`) ); -- -------------------------------------------------------- -- Struktura tabulky 'playlist_items' CREATE TABLE playlist_items ( playlist_id int(10) unsigned, item_id int(10) unsigned, position int(10) unsigned, ); -- -------------------------------------------------------- -- Struktura tabulky 'song' CREATE TABLE song ( id int(11) NOT NULL auto_increment, filename varchar(255), title varchar(80), artistid int(11), discid int(11), genre varchar(20), track_num int(11), start_frame int(11), num_frames int(11), play_time varchar(5), bpm int(11), num_plays int(11), last_play datetime, `year` int(11), date_added date, gain_adjustment int(11), PRIMARY KEY (id), KEY artistid (artistid), KEY discid (discid) )
cdsql
editovatUvedená databáze je pro serióznější potřeby málo podrobná. Pokusíme se ji proto rozšířit tak, abychom zachovali zpětnou kompatibilitu a mohli upravenou databázi používat se zaběhanými utilitami. Nejdříve si (pro jistotu) naši databázi překopírujeme:
Je dobré mít název skupiny krátký a případný přídomek uvádět zvlášť. Na něj připojíme další sloupec:
ALTER TABLE `artist` ADD `to-name` VARCHAR( 80 ) NULL DEFAULT NULL ;
Důležitým údajem jsou členové skupiny a kdo na co hraje nebo zpívá. Uvádět všechny tyto údaje do sloupce artist je trochu těžkopádné, i když je pole dimenzováno na 80 znaků. Do pole `artist` tedy budeme uvádět jen krátký název orchestru nebo hudební skupiny a další údaje (prozatím) uvedeme do pole `members`:
ALTER TABLE `artist` ADD `members` VARCHAR( 160 ) NULL DEFAULT NULL ;
Podobně zpřesníme tabulku CD:
ALTER TABLE `disc` ADD `subname` VARCHAR( 80 ) NULL DEFAULT NULL ;
Pokud se jedná o album, pak potřebujeme sloupec pro pořadí CD:
ALTER TABLE `disc` ADD `cd` INT NULL DEFAULT NULL ;
Zavedenou identifikací disku je jeho DISCID, použivené v xmcd:
ALTER TABLE `disc` ADD `discid` INT NULL DEFAULT NULL ;
Dobré je také uvést vydavatele:
ALTER TABLE `disc` ADD `publisher` VARCHAR( 15 ) NULL DEFAULT NULL ;
a kód:
ALTER TABLE `disc` ADD `code` VARCHAR( 15 ) NULL DEFAULT NULL ;
Případné další info najdeme také u internetových prodejců, tak (aniž bychom chtěli dělat někomu příliš velkou reklamu) je užitečné tam takový nějaký údaj uvést:
ALTER TABLE `disc` ADD `seller` VARCHAR( 20 ) NULL DEFAULT NULL ;
a jeho kód:
ALTER TABLE `disc` ADD `seller-code` VARCHAR( 20 ) NULL DEFAULT NULL ;
a příslušné URL:
ALTER TABLE `disc` ADD `url` VARCHAR( 200 ) NULL DEFAULT NULL ;
a URL obrázku obalu:
ALTER TABLE `disc` ADD `cover` VARCHAR( 200 ) NULL DEFAULT NULL ;
Takže dohromady shrnuto pošleme:
ALTER TABLE `artist` ADD `to-name` VARCHAR( 80 ) NULL DEFAULT NULL ; ALTER TABLE `artist` ADD `members` VARCHAR( 160 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `subtitle` VARCHAR( 80 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `cd` INT NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `discid` INT NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `publisher` VARCHAR( 15 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `code` VARCHAR( 15 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `seller` VARCHAR( 20 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `seller-code` VARCHAR( 20 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `url` VARCHAR( 200 ) NULL DEFAULT NULL ; ALTER TABLE `disc` ADD `cover` VARCHAR( 200 ) NULL DEFAULT NULL ;
Výsledkem tedy budou tabulky:
CREATE TABLE artist ( id int(11) NOT NULL auto_increment, artist varchar(80) default NULL, num_plays int(11) default NULL, last_play datetime default NULL, date_added date default NULL, `to-name` varchar(80) default NULL, members varchar(160) default NULL, PRIMARY KEY (id) );
CREATE TABLE disc ( id int(11) NOT NULL auto_increment, title varchar(80)default NULL, artistid int(11) default NULL, num_plays int(11) default NULL, last_play datetime default NULL, genre varchar(20)default NULL, `year` int(11) default NULL, date_added date default NULL, gain_adjustment int(11) default NULL, `subtitle` varchar(80) default NULL, cd int(11) default NULL, publisher varchar(15) default NULL, `code` varchar(15) default NULL, seller varchar(20) default NULL, `seller-code` varchar(20) default NULL, url varchar(200) default NULL, cover varchar(200) default NULL, PRIMARY KEY (id), KEY artistid (artistid) );
Teď půjde o to, co nejjednoduššeji rozdělit původní pole do nově vytvořených. Asi to budeme muset udělat ručně, např. v rozhraní phpmyadmin. Je ale zbytečné komplikovat si při této editaci tabulky takovými sloupci, jako jsou položky playlistu či nastavení zesílení. A dále, každé CD se odkazuje na nějaký záznam v tabulce artist a disc. Proto bude pro editaci asi výhodné vytvořit si pohled, ve kterém obě tabulky spojíme operací JOIN.
Operaci JOIN můžeme v zásadě použít buď tradičním způsobem v klauzuli WHERE anebo novějším způsobem (dle standardu ANSI-92) v klauzuli FROM. Zde se budeme držet standardu ANSI-92.
Každý záznam v tabulce disc má nějaký odkaz do tabulkuy artist. Lze si ale představit, že budeme mít (napč. dopředu připravený) záznam v tabulce artist (tj. záznam o skupině, o které ještě nemáme v databázi žádné CD). Proto použijeme spojení LEFT JOIN:
SELECT A.artist, A.`to-name`, A.members, D.title, D.subtitle, D.cd, D.discid, D.genre, D.year, D.publisher, D.code, D.seller, D.`seller-code`, D.url, D.cover FROM artist as A LEFT JOIN disc as D ON A.id = D.artistid ;