日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在线查询CD

發(fā)布時(shí)間:2023/12/18 编程问答 103 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在线查询CD 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述

CDDB的全稱是CD database,翻譯過來就是“CD數(shù)據(jù)庫”。正如字面意思一樣,CDDB其實(shí)就是一個(gè)網(wǎng)絡(luò)數(shù)據(jù)庫,世界各地的音樂愛好者、CD出版商都可以通過網(wǎng)絡(luò)向這個(gè)數(shù)據(jù)庫提交CD信息,也可以通過網(wǎng)絡(luò)從這個(gè)數(shù)據(jù)庫查詢CD信息,包括CD的專輯(Album)名稱、演奏者(Artist)、出版年份(Year)、曲風(fēng)(Genre)、每條音軌的標(biāo)題(Title)等。

CDDB的作用包括,但是不限于:

  • 方便網(wǎng)絡(luò)音樂共享,甚至可以說CDDB是隨著網(wǎng)上音樂共享而發(fā)展起來的。想象一下,如果人人都去買CD來聽,CD封面上自然印刷有CD的全部信息(請不要用無良D商出的東西來反駁我的觀點(diǎn)!),還有必要上網(wǎng)查詢嗎?但是網(wǎng)絡(luò)共享音樂就不同了,不論通過P2P、FTP還是其它協(xié)議下載到一張CD的鏡像,如果共享者即忘記掃描CD封面,又忘記把CD信息敲進(jìn)一個(gè)文本文件里和鏡像文件一起共享,您會(huì)不會(huì)有點(diǎn)找不著北的感覺?這個(gè)時(shí)候有點(diǎn)動(dòng)手精神的人,自然就會(huì)想到上網(wǎng)搜一下。
  • 方便CD播放。在用電腦上的軟件播放CD時(shí),有些人并不僅僅是聽聽音樂就算,還希望在聽的同時(shí)能夠看到每一條音軌的標(biāo)題。foobar、Windows Media Player、Real Player等軟件在播放CD時(shí),都可以通過在線查詢CDDB顯示CD信息。
  • 方便MP3、WMA等音樂文件的制作、播放。抓軌以后的文件名如果都是Track01、Track02之類的無聊東西,多了以后恐怕管理就會(huì)有麻煩,所以EAC在抓軌的時(shí)候就會(huì)從CDDB查詢CD信息,然后自動(dòng)生成有意義的文件名,看著都爽。foobar也可以將從CDDB查詢到的信息寫入MP3,這樣單獨(dú)播放MP3文件時(shí),在MP3播放器(不論硬件還是軟件,支持ID3v1/2格式的MP3 tag就行)上就可以顯示出音樂標(biāo)題、專輯名稱、演唱者等信息。
  • 方便建立、管理自己的媒體庫。硬盤上收藏的媒體文件多了,管理是一個(gè)麻煩。如果每個(gè)鏡像、每首MP3都去手工錄入信息,至少我自己是絕對不會(huì)去干的。而如果能夠在線查詢、填寫相關(guān)信息,自然就會(huì)輕松許多。
  • 我寫這篇文章的目的,當(dāng)然不可能是希望促進(jìn)音樂D版事業(yè)的發(fā)展,只是希望通過對常見CDDB的介紹,讓大家對它們的特點(diǎn)及查詢方法有所了解,在需要的時(shí)候能夠及時(shí)從CDDB獲取有用的信息,當(dāng)然這些信息必須也只能用于合法的目的。

    二、常見CDDB

    1、freedb

    官方網(wǎng)站:http://www.freedb.org
    查詢頁面:http://www.freedb.org/freedb_search.php
    中文支持:很爛
    著名用戶:EAC(Exact Audio Copy),foobar

    freedb是一個(gè)非盈利性組織,該組織維護(hù)freedb網(wǎng)站及其CD數(shù)據(jù)庫,供大家免費(fèi)查詢CD信息。如果您發(fā)現(xiàn)freedb的CD數(shù)據(jù)庫里沒有的CD,也可以手工輸入信息提交給freedb,充實(shí)它的數(shù)據(jù)庫,體現(xiàn)“人人為我,我為人人”的原則。

    freedb不僅可以免費(fèi)查詢,而且它的所有查詢協(xié)議都是公開的,在其網(wǎng)站上有詳細(xì)的說明,因此使用freedb的免費(fèi)軟件很多,包括EAC、foobar在內(nèi)的一些軟件都用它查詢CD信息,所以人氣較旺。

    除了協(xié)議公開外,freedb甚至連數(shù)據(jù)庫內(nèi)容都公開了:從這里可以免費(fèi)下載到freedb的完整數(shù)據(jù)庫供離線查詢使用。這種事情大概只有以free開頭的網(wǎng)站才會(huì)做,.com網(wǎng)站是做不出來的。

    不過freedb這種完全靠音樂愛好者提交信息的運(yùn)行模式也給它的內(nèi)容帶來了一些限制。從我自己使用的情況看,freedb查詢國外版權(quán)的CD(包括國內(nèi)從國外引進(jìn)版權(quán)的CD)基本上問題不大,但是國內(nèi)版權(quán)的基本上就沒有了,可能和國內(nèi)音樂愛好者較少向freedb提供信息有關(guān)。

    另外我對它的中文支持評價(jià)為“很爛”,是指:

    • 在它的查詢頁面上,如果直接輸入中文作為關(guān)鍵字,什么也查不到。
    • 從它提供的開發(fā)文檔看,從CDDB Protocol Level 6開始支持UTF-8編碼,但是目前大多數(shù)軟件都采用CDDB Protocol Level 6以前版本的協(xié)議,所以目前支持中文關(guān)鍵字查詢freedb的軟件還沒看到。
    • 如果按照CDID(從CD各音軌起始位置、長度計(jì)算出來的CD標(biāo)識,相當(dāng)于CD的“指紋”,在CDDB里通常用來標(biāo)識每張CD)查詢,可以查詢出freedb里有的中文CD信息,但是由于計(jì)算CDID需要讀取光盤,因此這個(gè)只能在軟件里實(shí)現(xiàn)(如foobar等),在查詢網(wǎng)頁上很難做到。

    2、Gracenote

    官方網(wǎng)站:http://www.gracenote.com
    查詢頁面:http://www.gracenote.com/music/
    中文支持:很好
    著名用戶:Real Player

    Gracenote這個(gè)名字對某些人來說可能有點(diǎn)陌生,但是它的前身cddb.org卻是大名鼎鼎,號稱網(wǎng)上最早、最大、最全的CDDB。不過cddb.org代表的是充滿理想的免費(fèi)共享主義時(shí)代,現(xiàn)在已經(jīng)改成商業(yè)化運(yùn)營模式的.com,所以干脆連名字都改成專有的了。

    如果想在軟件中集成查詢Gracenote的CDDB功能,必須取得Gracenote的許可。免費(fèi)許可比較難申請,至少我的申請就沒有得到回應(yīng),所以Gracenote在免費(fèi)軟件中很少見,多用于商業(yè)軟件,如Real Player。

    Gracenote對中文的支持很好:

    • 通過網(wǎng)頁查詢時(shí),不僅支持中文關(guān)鍵字,而且輸入簡體關(guān)鍵字,連繁體CD信息都能查出來。
    • 在通過Gracenote提供的控件編程查詢某些歐洲發(fā)行的CD信息時(shí),如果遇到特殊西歐字符,Gracenote會(huì)自動(dòng)轉(zhuǎn)換成帶聲調(diào)的漢語拼音字符,方便在中文環(huán)境下顯示。這個(gè)功能似乎是Gracenote獨(dú)有,在其它地方我還沒有見過。后來俺在寫解決cue文件亂碼的軟件CueCode時(shí),把這招學(xué)了過來,嘿嘿……

    從我個(gè)人使用的情況看,Gracenote的數(shù)據(jù)量無疑超過freedb,和微軟的CDDB相比則各有千秋:國外的CD可能兩個(gè)都差不多,國內(nèi)的有時(shí)Gracenote查得出,微軟查不出,有時(shí)則相反。

    3、微軟CDDB

    官方網(wǎng)站:據(jù)說正在建設(shè)中,尚未正式公布,估計(jì)是http://metaservices.windowsmedia.com
    查詢頁面:未正式公布,下面URL是我從Windows Media Player里抓出來的,有效期不敢保證:
         http://metaservices.windowsmedia.com/CDWizard/CDWizard1.asp
    中文支持:很好
    著名用戶:Windows Media Player

    這個(gè)是微軟自己的CD數(shù)據(jù)庫,Windows Media Player就是從這上面查找CD信息的。有錢人做事畢竟不同,感覺微軟的數(shù)據(jù)庫比freedb全多了,而且時(shí)常可以查到CD的封面圖片,估計(jì)是直接從CD廠商獲取的數(shù)據(jù)。不過到目前為止,微軟尚未公布CD查詢的接口規(guī)范,也沒有說是否允許免費(fèi)使用,因此除了微軟自己的Windows Media Player外,還沒有見過哪個(gè)公開發(fā)表的軟件使用這個(gè)CDDB。

    在中文支持方面,微軟的CDDB也不錯(cuò):

    • 通過網(wǎng)頁查詢時(shí),不僅支持中文關(guān)鍵字,連頁面都是中文的,這點(diǎn)比Gracenote強(qiáng)。
    • 偶爾能查到中文CD的封面。

    三、編程相關(guān)

    上面說的都是直接通過IE查詢,但是有些查詢是不能通過IE進(jìn)行的,只能按照CDDB的查詢協(xié)議開發(fā)專門的查詢軟件。下面討論的就是這方面的技術(shù),僅供有興趣的人參考。

    1、查詢過程

    通常通過網(wǎng)頁查詢CDDB,都是先輸入某些關(guān)鍵字,如歌曲或?qū)]嬅Q、歌手或樂隊(duì)名稱等,然后點(diǎn)“查詢”,等待進(jìn)入查詢結(jié)果頁面后,再點(diǎn)擊列出的專輯名稱,查看專輯內(nèi)容。

    在編程實(shí)現(xiàn)CD查詢時(shí),按照上述關(guān)鍵字進(jìn)行查詢只是部分情況,大多數(shù)軟件是按照光盤本身的信息進(jìn)行查詢,如EAC、foobar、Real Player、Windows Media Player,都是在用戶將CD插入光驅(qū)后,自動(dòng)讀取光盤信息,組合成CDID,然后提交給CDDB進(jìn)行查詢,很少有需要用戶自己輸入關(guān)鍵字的時(shí)候。

    對于freedb和Gracenote來說,由于CD專輯信息都是網(wǎng)友自己上傳的(Gracenote商業(yè)化運(yùn)作后可能直接從CD出版商獲取數(shù)據(jù),但是免費(fèi)時(shí)代的底子應(yīng)該還有保留),難免會(huì)出現(xiàn)重復(fù),并且CDID算法本身也可能產(chǎn)生碰撞,因此在freedb和Gracenote的開發(fā)文檔中,都要求開發(fā)者必須處理“模糊(fuzzy)”——其實(shí)就是重復(fù)的查詢結(jié)果。通常的處理方式就是象EAC一樣,彈出一個(gè)列表讓用戶自己選。查詢freedb的軟件可能要自己寫這段代碼,Gracenote提供的控件本身就包含了對重復(fù)結(jié)果的選擇界面。

    對于微軟CDDB來說,我還沒有發(fā)現(xiàn)過有重復(fù)的現(xiàn)象。可能是因?yàn)槲④浿苯訌脑糃D出版商那里拿數(shù)據(jù),CDID算法也比較嚴(yán)格,所以查詢結(jié)果比較精確吧,Maybe……

    2、TOC和CDID

    前面說過,按照CD本身的信息查詢CDDB,需要讀取光盤信息,產(chǎn)生一個(gè)CDID(CD 的唯一標(biāo)識號),然后以此為關(guān)鍵字進(jìn)行查詢。

    在freedb的開發(fā)文檔中,CDID被稱為DISCID,在這里有詳細(xì)的算法說明。在看過這個(gè)算法后,我又分析過Gracenote、微軟CDDB的CDID算法,發(fā)現(xiàn)他們的算法都差不多:

  • 通過光驅(qū)讀取CD的TOC(table of contents,目錄表),從中獲取CD的音軌數(shù)、每條音軌的長度、音軌起始時(shí)間。
  • 循環(huán)TOC項(xiàng),從音軌長度、起始時(shí)間運(yùn)算出最終CDID。
  • 雖然算法大同小異,但是計(jì)算出來的結(jié)果不太一樣:freedb的CDID只有32位,Gracenote、微軟CDDB的都長達(dá)128位!俺曾經(jīng)懷疑這可能也是freedb的查詢結(jié)果重復(fù)率比較高、查詢結(jié)果不甚準(zhǔn)確的原因之一,不過很難證實(shí)。另外從TOC映射到CDID明顯是一個(gè)不對稱hash過程,難免有碰撞,因此也就需要允許模糊查詢。

    那么如果手上沒有CD,只有從CD抓出來的APE和cue文件,能不能計(jì)算CDID并且據(jù)此查詢CDDB呢?
    答案是:多數(shù)情況下可以,少數(shù)情況下不行。

    原因就在于按照目前cue文件格式的規(guī)定,cue文件中缺少兩樣關(guān)鍵的東西:

  • 第一條音軌的起始位置。在真正的CD中,第一條音軌不可能從00:00:00處開始,而在cue文件中(其實(shí)是在抓軌過程中),這些空白處都被跳過了,所以cue文件中第一條音軌永遠(yuǎn)從00:00:00開始。
  • 最后一條音軌的長度(精確到1/75秒)。其它音軌的長度都可以通過下一條音軌開始時(shí)間,減去本條音軌開始時(shí)間計(jì)算出來,最后一條音軌的長度就沒法這樣計(jì)算了。
  • 第一個(gè)不足會(huì)影響CD刻錄,兩個(gè)不足合起來則會(huì)影響CDID的計(jì)算,從而影響CDDB查詢。

    為了解決這個(gè)問題,通常的做法是:

  • 假設(shè)第一條音軌從2秒開始。
  • 從APE文件計(jì)算最后一條音軌長度。
  • 在做出這兩個(gè)假設(shè)后,大多數(shù)情況下就能按照APE+cue從CDDB查詢到CD信息,畢竟就算有點(diǎn)走樣,還有模糊查詢在支撐,但是少數(shù)情況下還是會(huì)出問題:

  • 雖然大多數(shù)CD的第一條音軌都是從2秒開始,但是并非所有CD都是如此,我手上有一張CD,就是第一軌的起始位置錯(cuò)了1/75秒,在微軟的CDDB上就已經(jīng)查不到了,但是手工輸入關(guān)鍵字查詢卻能查到。
  • 從APE計(jì)算最后一條音軌時(shí),如果APE已經(jīng)分軌,甚至轉(zhuǎn)換成MP3又轉(zhuǎn)換回來,往往造成計(jì)算結(jié)果不準(zhǔn)。比如我試了一下查詢10CD的“鄧麗君音樂手札”,沒有分軌、整張盤一個(gè)ape文件的查詢起來問題不大,除第9、10張外都查到了,而分軌的第1、3張就全查不到,估計(jì)是最后一軌的長度變了。
  • 所以在能夠生成、識別cue文件的軟件全面改進(jìn)以補(bǔ)全上面說的兩個(gè)信息之前,只能祈禱下載到的盤都是從2秒處開始,ape文件也是從真正的原盤,而不是轉(zhuǎn)換出來的刻錄盤上抓出來的(轉(zhuǎn)換刻盤可能改變最后一軌長度)。

    這個(gè)問題也可以這樣描述:假設(shè)您買到一張CD,把CD插進(jìn)光驅(qū)后如果能用Windows Media Player直接查到它的信息,俺不敢肯定這張CD是不是D出來的;但是如果從光盤直接查查不到,但是在Windows Media Player里輸入專輯名稱、演奏者、歌曲名稱等等卻能查到這張CD,那么俺敢和您打賭一分錢:這張CD十之八九是J商自己從APE,甚至MP3翻刻的。freedb、Gracenote由于有模糊查詢,不太精確的翻刻還有可能蒙混過去,微軟CDDB則很難混過去。

    關(guān)于cue文件的問題,我以前曾寫過一篇《cue文件的不足》,發(fā)布在伊美姬網(wǎng)怡紅快綠音樂論壇,不過似乎應(yīng)者寥寥。

    3、編程接口

    freedb的查詢協(xié)議是完全公開的,相關(guān)技術(shù)文檔見這里。已經(jīng)有很多人按照協(xié)議寫過相關(guān)的查詢代碼了,有些還開源,可以直接拿來用。如俺寫FreeMP3Tag時(shí),就用了PJ Naughter的MfcCDDB,不過對其中socket連接部分做了改進(jìn),以增加連接的成功率。

    Gracenote的編程接口更簡單:到這里申請一個(gè)Non-Commercial ID,即可下載一個(gè)ActiveX控件,并且附帶各種開發(fā)語言的使用例子,將這個(gè)控件嵌入您自己的運(yùn)用,再仿照例子調(diào)用一下查詢接口就可以了。麻煩的是在開發(fā)完成后,如果要正式發(fā)行您開發(fā)出來的軟件,還需要另外再申請正式的發(fā)行ID。不知道別人有沒有申請到,反正我的申請是一直沒有回音。

    微軟的查詢接口一直沒有公開,所以也沒有什么直接相關(guān)的文檔或代碼可供參考。不過對于任何一個(gè)能夠看懂HTML源代碼的人來說,只要看一下Windows Media Player和服務(wù)器的交互過程,要猜出來也不是很難。

    4、中文支持探討

    如果按CDID查詢CD,當(dāng)然不存在中文問題,因?yàn)镃DID只是從TOC計(jì)算出來的一堆數(shù)字。但是按照關(guān)鍵字(專輯名稱、歌曲名稱、演奏者等)查詢時(shí),如前所述,三個(gè)CDDB的支持程度有所不同。在這里我想探討一下其原因。

    我個(gè)人認(rèn)為中文問題的核心是編碼問題:用戶輸入的中文關(guān)鍵字必須發(fā)送給CDDB服務(wù)器,IE在發(fā)送中文關(guān)鍵字的時(shí)候,因?yàn)橹形木幋a的高位為1,因此必須先對中文進(jìn)行編碼,服務(wù)器收到查詢請求后,再對IE的編碼進(jìn)行解碼。這樣一個(gè)編碼->解碼的過程,要求解碼器必須確切知道編碼器所使用的代碼頁。很不幸的是,freedb在這方面做得并不好,所以解碼后就全亂套了。舉個(gè)簡單的例子,用戶輸入“鄧麗君”,IE按照簡體中文編碼成UTF8發(fā)送出去,但是freedb服務(wù)器在收到這個(gè)查詢請求后,并不知道這個(gè)UTF8字符串是從簡體中文編碼得來的,因此只能按照它自己設(shè)定的一個(gè)代碼頁進(jìn)行解碼,比如說按日語進(jìn)行解碼,解出來的還會(huì)是“鄧麗君”這三個(gè)字嗎?如果關(guān)鍵字錯(cuò)誤,自然查詢不到。

    下面是三個(gè)CDDB查詢“鄧麗君”的結(jié)果URL:

    http://www.freedb.org/freedb_search.php?words=%26%2337011%3B%26%2320029%3B%26%2321531%3B&allfields=NO&fields=artist&fields=title&allcats=YES&grouping=none

    http://www.gracenote.com/music/search-adv.html?q=&qartist=%E9%82%93%E4%B8%BD%E5%90%9B&qdisc=&qtrack=&n=10&x=49&y=15

    http://metaservices.windowsmedia.com/CDWizard/CDWizard2.asp?WMPFriendly=true&locale=804&SearchType=Artist&SearchString=-28525,20029,21531&MODE=DISPLAYARTISTALBUMS&AlbumID=&ArtistID={B50F45AB-1870-480A-B1E6-6C626B98709B}&Version=1.0&sVolume=1&sCDTOC=

    微軟SearchString中的內(nèi)容是“鄧麗君”三個(gè)字的十進(jìn)制unicode編碼,gracenote的qartist的內(nèi)容為“鄧麗君”的3字節(jié)UTF-8編碼,掩碼位為:
    U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx

    freedb的編碼就猜不出來了。

    其實(shí)通過網(wǎng)頁查詢的時(shí)候,IE在發(fā)送給CDDB服務(wù)器的HTTP請求頭中都會(huì)包含下面這一行:Accept-Language: zh-cn
    我猜微軟、gracenote就是據(jù)此判斷查詢請求來自簡體中文頁面,而freedb沒有做這個(gè)判斷。微軟在判斷出來后,干脆把簡體中文的LCID(804)放到URL的locale字段(簡體中文版Windows XP注冊表HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Nls/Language項(xiàng)下的Default值就是804)。

    總結(jié)

    以上是生活随笔為你收集整理的在线查询CD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。