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
[editovat]Ale 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
[editovat]Utility pro práci s databází CDDB
[editovat]Distribuce Debian
[editovat]libkcddb1
[editovat]CDDB 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
[editovat]Uvedená 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 ;