• 沒有找到結果。

網際網路上的MP3 內涵式搜尋引擎之設計與實作

N/A
N/A
Protected

Academic year: 2021

Share "網際網路上的MP3 內涵式搜尋引擎之設計與實作"

Copied!
12
0
0

加載中.... (立即查看全文)

全文

(1)網際網路上的 MP3 內涵式搜尋引擎之設計與實作 王俊淵,陳信修,姚邦佳,葉億真,陳孟森,蔡伯俊,劉志俊 中華大學資訊工程系 新竹市東香里東香 30 號 ccliu@chu.edu.tw 摘要 由於人類文明的快速進步及使用者需求 的多元化,造就了多媒體應用與網際網路的快 速蓬勃發展,因此每一個使用者皆可以透過網 際網路去獲取更多的音訊、視訊及影像等多媒 體的相關資料,使得多媒體資訊變的隨手可 得。為了讓使用者能方便地在大量的多媒體資 料中,擷取到自己所喜愛的資訊,必須提供使 用者以一定的查詢條件來過濾出所想要的多 媒體資料,並提供更有效的多媒體資料儲存管 理功能。因此多媒體資料庫的相關研究探討成 了學術界與產業界研究的焦點之一。 本文最主要的部分就是完成一個在網際 網路上使用之 MP3 音樂資料庫和搜尋引擎的 設計與實作。我們首先建立一 6000 首 MP3 歌 曲的 MP3 音樂資料庫並提供傳統的的關鍵字 查詢和分類查詢。此外,我們根據之前所提出 的 MP3 內涵式查詢理論[1],在視窗環境下, 以 C++語言實作一 MP3 搜尋引擎。在文中, 我們詳述了系統的架構,包含查詢樣本錄製、 壓縮、特徵值擷取、MP3 索引建立、相似性比 對程式等的設計與實作方式。 關鍵詞:MP3 音樂資料庫. 一、簡介 電腦數位音樂大致上分為二類,一為將原 本的類比信號經由取樣後忠實的將其聲音記 錄下來的方式,例如:Wav 檔便是其中一種。 另 一 為 MIDI(Musical Instrument Digital Interface)格式,它是將歌曲音符的音階記錄下 來,再透過電腦內部的音源產生器將歌曲合成 還原出來。其中 Wav 的儲存空間大小與我們 所使用的取樣頻率和取樣解析度有密切的關 本論文研究為國科會補助之研究成果。計畫編號 NSC-90-2213-E-216-010. 係:取樣頻率越大,所需的儲存空間越大;取 樣解析度越大;所需的空間也越大。由於其所 需耗費的儲存空間太多,為了要解決這個問 題,MP3 數位音樂檔案格式便因應而生。 在電腦中最常見的聲波格式資料就屬於 Wave 資料,其一般以*.wave 檔儲存,但是 wave 檔格式所需要的儲存空間以一分鐘的聲波資 料就將近需要 10 幾 MB 的儲存空間大小,相當 消耗儲存空間,為了解決此問題故有 MP3 的產 生,因 MP3 是一種經過壓縮的 wave 檔,須要 下載撥放器及 MP3 檔案才能夠撥放。 這種壓縮的技術其實是一種失真壓縮,但 由於 586 的 CPU 與軟體相互支援配合下,使音 色幾乎可以和 CD 的音色相媲美,收聽者最好 有 586 級、16MB 記憶體以上的電腦,若您是 486 級電腦使用者,在聆聽時儘量不要打開其 它們何的軟體,以免作業系統無法負荷而當 機。 MP3 是利用 MPEG Audio Layer 3 的技術, 將聲音以 1:10 甚至 1:12 的壓縮率,變成容量 較小的檔案,不過在人耳聽起來,卻沒有什麼 不同。MP3 勢將原有的聲波資料經過壓縮成 MP3 的檔案格式,經由此特殊的方法壓縮可以 將一個將近 50 到 60MB 的 Wave 資料,轉變成 只需要 4MB 多的資料而且音質幾乎和 CD 音樂 音效一樣,將近相差十倍的資料儲存空間,所 以一片 MP3 的音樂光碟可以將十幾片的 CD 音 樂放到裡面,若以一片 CD 音樂專輯可以播放 60 分鐘來算,一片 MP3 的音樂 CD 就將近可以 放入 10 幾小時的音樂資料,就像一個小型的 音樂櫃一樣。當然這是一種失真壓縮(就像圖 形檔 JPG 一樣),而經過壓縮程序之後,所壓 成的資料也就更多了。 MP3 音樂資料的出現,不僅只有縮短了 下載 Audio 檔案的傳輸時間,也因此擴大了音 訊應用方面的領域,如現在最流行的網路廣播 (Internet Radio)、網路虛擬唱片公司及網路點 歌(Audio on demand)等。又 MP3 的製作及撥 放工具方面,已經有越來越多的免費軟體出現 且有的都支援各種平台。 如 WinAmp 等都助 長了 MP3 快速發展的原因之一。此外,也有 許多廠商紛紛推出了 MP3 數位隨身聽,有此.

(2) 可以得知 MP3 對於整個音訊領域的影響有多 大,未來勢必有更多的 MP3 應用將會出現。 MP3 音訊資料最主要的取得管道就是透 過網際網路的方式取得,但就目前而言,所有 的 MP3 網站並沒有提供完整的 MP3 音樂資料 的搜尋,且其搜尋採用傳統方式,將要找的資 訊以輸入關鍵字的方式到資料庫中去搜尋,系 統將使用者所想要找的資料加以分類,如男歌 手、女歌手、團體類型等,之後在繼續將各類 型往下依歌手姓氏或團體名稱作分類,最後才 將該歌手或團體所出過的專輯資料放在該歌 手或團體的目錄之下。 此次最主要的部分就是完成一個 MP3 音 樂資料庫和搜尋引擎,除了將現有的搜尋引擎 的關鍵字查詢和分類查詢外,另外還要研究如 何撰寫一個 MP3 Query Tool,將使用者所哼的 聲音樣本至資料庫中和 MP3 音樂作比對,比 對方面得用到的技術就是擷取 MP3 音樂的特 徵值去和使用者所哼的聲音之特徵值去做比 對,這部分可能是我們得多花心思去研究的地 方。 在本文中試著對 MP3 的內涵作分析,找 出 MP3 的特徵值並對其做索引,並根據 MP3 特徵值建立 MP3 資料庫,最後可讓使用者輸 入查詢範例,依據使用者查詢範例和 MP3 資 料庫裡的資料作相似性的比對,找出使用者想 要的 MP3 物件出來。另外,本論文報告所提 出 的 方 法 也 可 以 應 用 在 隨 選 音 樂 (Music On-Demand)上:MP3 搜尋引擎,以及網路點 歌等。. 圖 1 顯示 MPEG 1 音訊編碼的流程共有 4 個模組(Block): 濾波器組(Filter Bank)可以將 輸入的數位信號分割成許多不同子頻帶 (Subband)的信號,此時原本輸入的數位信號也 同 時 輸 入 至 心 裡 聽 覺 模 型 (Psychoacoustic Model)這個模組,心理聽覺模型會根據人類聽 覺 的一 些特性 決定哪 一些 資料是 可以 不要 的,之後便將這樣的資訊傳給位元/雜訊配置 (Bit/Noise Allocation)模組,位元/雜訊配置模組 會根據心裡聽覺模型所傳來的資訊及濾波器 組所分割出不同頻帶的音訊資料,做適當的資 料配置(將人類聽不到的音訊資料去掉)、量化 的動作(也就是決定要用多少個位元去表示), 最後將經過量化的樣本,經過位元流封裝(Bit Stream Formatting)模組將其包裝成一個一個 的 MP3 框架(Frame)格式,最後輸出整個編碼 後的音訊格式.. 2.2 MPEG 1 音訊解碼原理 在解碼方面,圖 2 為音訊解碼流程圖,其 包含了 3 個區塊:框架拆解(Frame Unpacking) 這個區塊負責將原本的 MP3 檔案以每個框架 為單位拆解成量化後的樣本及一些輔助的資 料,接著還原(Reconstruction) 區塊會將量化 後的樣本還原成原本的頻率樣本(Frequency Samples),最後經由反轉映射(Inverse Mapping) 將頻率樣本轉換成時間樣本(Time Samples), 輸出解碼後的音訊資料。. 在本文中我們預期完成讓使用者只要隨 口哼唱出一段絃律或歌詞不需記取歌名與原 唱者,便能在 MP3 網際網路資料庫上輕鬆的 找到自己所想要的歌曲。並且成立一個全台灣 甚至全世界最大的中文 MP3 音樂資料庫。. 二、相關研究 2.1 MPEG 1 音訊編碼原理. 圖2. MPEG1 音訊解碼流程圖. 濾波器組與修正式餘弦轉換 我們知道過濾器的用意再於將一個訊號 裡的某些頻率的訊號過濾出來,所謂的濾波器 組便是由一堆的濾波器所組成的,濾波器組的 功用為做時間領域-頻率領域的轉換 (Time-Frequency Mapping),Layer 1,2 用的濾 波 器 組 為 稱 為 多 相 位 濾 波 器 組 (Polyphase Filter Bank),他是由 32 個頻帶濾波器所組成 的,所以多相位濾波器組可以將輸入的訊號分 割成 32 個相同寬度的頻帶(Frequency Bands).

(3) 信號。. 為了追求高容量,而犧牲了聽的品質。. Layer 3 除了用到多相位濾波器組,他還 用 到 了 修 正 式 餘 弦 轉 換 (Modified Discrete Cosine Transform)。MDCT 的用意在於將多相 位濾波器組的輸出,再分成更細的頻帶信號。 經由多相位濾波器組所分割出頻帶訊號經過 MDCT,可以在細分成 18 個頻帶信號,這樣 的用意在於可以提供較好的頻譜解析度 (Frequency Resolution),進而找出因為只用多 相位濾波器組,所造成的訊號重疊誤差。圖 3 為其示意圖:. MPEG/audio 的壓縮,其 Sampling rate 可分為 32KHz、44.1KHz、48KHz,支援的聲道 有 monophonic , dual-monophonic , stereo mode,joint-stereo mode,Error detection 為 CRC error detection code 還有 Ancillary data。其主要是利用人類聽覺系統在某些情況 下,會產生聽覺的 mask 而無法分辨出量化的 雜訊,根據實驗亦發現人類聽覺有一個極限, 也就是人類所能聽到的聲音頻率約為 20Hz 到 20KHz 之間,critical band 並不能完整呈現 出人類聽覺系統的聽覺特性,因為人類聽覺系 統依據頻率來分辨聲音能量,所以任何頻率的 雜訊遮罩只和其限定頻寬內附近的信號能量 有關。MPEG/audio 將聲音信號分配成接近 critical band 的 subband,然後依據每一個 subband 的聽覺量化雜訊程度來量化。最有效 的壓縮,即是將不需要的聽覺量化雜訊移除。 也就是我們可以將一大部份人類聽覺系統所 無法察覺的資料移除,將人耳聽不到或不易辨 認部份省去,只針對我們可辨認的音頻作壓 縮,因此可以減少壓縮的量,使壓縮後的檔案 變得很小。. 圖 3 MDCT 架構圖. 綜合以上所述,在此,我們所使用的 MP3 特徵值擷取來源有二:一是取至多相位濾波器 的輸出,既聲音在 32 個頻帶的係數。另一是 取自修正式餘弦轉換的輸出,既 MDCT 係數。 2.3 MP3 的壓縮原理 在 MPEG-1 的標準中,將聲音訊號的壓縮 標準分為三個層級,分別是 MPEG Layer 1、 MPEG Layer 2 與 MPEG Layer 3。影音光碟就 有採用 Layer 2 的標準,至於 MP3 就是 MPEG Layer 3 的產物了。更進一步來說,MP3 就是 把現在的 CD 音樂檔,以壓縮的方式儲存,透 過 CPU 強大的運算能力,以軟體解壓縮的方 式,就可以在電腦上聽到好聽的音樂了。 至於這其中的壓縮效果有多好? 我們可 以如此計算,普通的 CD 音樂大約是 44.1KHz 的頻率、十六位元取樣,平均每分鐘音樂就要 花掉 44100*16*2 stereo*60 的容量,大約是 10MB 的儲存空間。以目前每片光碟 650MB 的 容量來說,一片 CD 的儲存量約在 65 到 75 分 鐘之間。 MP3 就是將這些樂曲透過壓縮的方式,增 加更多的儲存量。由於 MP3 的壓縮大約在 10 到 12 倍之間,一分鐘的樂曲透過 MP3 壓縮, 只要 1MB 左右的儲存空間,換言之每片光碟可 以儲存 650 到 750 分鐘的音樂,更重要的是, 即使壓縮比如此驚人,音樂的品質依然直追 CD,因為利用人類聽覺遮蔽的緣故,以現在一 般個人電腦 CPU 的速度解壓 MP3 時,人類聽覺 沒辦法分辨壓縮後的有所不同,讓使用者不須. 2.2 MP3 資料庫網頁的相關研究 時下的網際網路為何如此盛行呢?相信 大家都會一口同聲的說它”酷、流行”,網路吸 引人們的原因是藉由多媒體製造出酷炫的網 頁,讓大家投入網頁的編寫行列,再加上網路 無遠弗屆,自然成為眾所矚目的焦點。現今國 內外的網站可說不計其數,光拿 MP3 網站來 說,就以讓大家看的眼花撩亂,所以我們對於 MP3 網站的設計,必須符合使用者的需求,達 到不等待、要什麼資料就有什麼資料、下載迅 速便利....等功能,才能吸引更多使用者的青 睞。 綜合現今的 MP3 網站功能,不外乎要達到 一些基本功能,如:歌手資料、歌詞、下載少 數 MP3 歌曲等等,有些 MP3 網站要求大家在上 站時註冊,一方面想知道大家的需求,另一方 面可以寄一些廣告信或電子報,讓使用者隨時 注意時下流行的音樂或新消息。在電子商務時 代的來臨,相信網路訂單、下載將是未來的趨 勢。 對於此次的研究計畫,將利用最新的 ASP 功能,配合 Flash 炫麗的動畫效果,將 MP3 網 站架設起來,除了讓網站能與使用著互動外, 還希望做到功能最齊全,以滿足使用者對 MP3 網站的真實需求。.

(4) 三、MP3 音樂之內涵式查詢的含意 所謂的內涵式查詢便是針對你所要尋找 的 MP3 對其內涵作分析、擷取媒體特徵值以 建立索引結構,以及查詢比對搜尋的技術。 我們要如何找出我們想要的 MP3 資料呢?或 許可以利用傳統的方式,將 MP3 資料用文字 的方式做索引,提供使用者用關鍵字的方式去 做查詢。但是這樣的方式有者一個很大的缺 點,就是:有些多媒體資料很難用文字去表 達。譬如我今天想要找一首歌,但我忘記他的 歌名,我只記得他大概是怎麼唱的,此時關鍵 字查詢便毫無用武之地。此時我們便需要所謂 的內涵式查詢技術,對其 MP3 內容作分析, 找出有用的資訊,幫助使用者解決類似上述的 問題,達到用聲音去找音訊資料的目的。而這 樣的技術我們稱為 MP3 音樂資料的內涵式查 詢。 在這裡我們使用的查詢單位為一段 MP3 樂句,這是因為如果用一首歌去做查詢的話, 其所需的比對時間一定會比較長;另外由於人 們大多是只哼個一兩句做查詢,並不會唱完整 首歌,所以也比較不符合人類的直覺,所以我 們使用一段 MP3 樂句當作查詢單位。 在前文中我們說明了 MP3 編碼及解碼的 原理。接下來將說明根據 MP3 編碼的原理來 定義 MP3 的特徵值。我們將定義 MP3 特徵描 述子(MFD, MP3 Feature Descriptor)並且詳細 的描述 MFD 的意義。 3.1 MP3 索引單位的定義 如前面所述,基於 MP3 索引與查詢的單 位必須符合人類的直覺,我們以一個樂句而非 整首 MP3 歌曲做為索引與查詢的基本單位。 如 圖 4 所 示 , 對 每 一 首 MP3 歌 曲 (MP3 Object),我們透過切割(Segmentation)的方式將 其切成一組的 MP3 樂句(MP3 Phase)。對每一 個 MP3 樂句又進一步分為樂音、框架以及取 樣樣本等三層結構。1 個框架分為 1152 個取 樣樣本。其中 1 個框架等於 1152 個取樣樣本 是根據 MPEG 標準所規範。. 圖 4 MP3 物件的組成結構. 3.2 MP3 音段的特徵值 多 相 位 濾 波 器 係 數 向 量 (PCV : Polyphase filter Coefficient Vector) 根 據 前 面 所 介 紹 的 MP3 編碼\解碼理論得知一個 wav 波形會經過 32 個濾波器組將其分為 32 個頻帶所組成的信 號,而每個頻帶的值代表其信號在此頻帶的強 度大小。所以我們取便是這 32 個頻帶的輸出 信號強度,在一個音段內的平均值,合成一個 32 維的特徵值向量,稱之為多相位濾波器係 數 向 量 (PCV, Polyphase filter Coefficient Vector),代表在一個音段內,聲音信號在 32 個頻帶強度分佈情形。其直觀意義為在某一時 間點上,歌手及伴奏發出聲音的音高及音量在 32 個頻帶的能量分佈。. 3.3 描述子(Discriminator) 在一 MP3 樂句裡大概有 8 個音符變化, 這也是我們將一個 MP3 樂句分成 8 個樂音的 原因。(註:在這部份我們只作一整個樂句。) 在這裡描述子的意思是我們對每個樂音算出 他們的 PCV,而樂音的 PCV 我們稱為樂音的 描述子(Discriminator)。由於 PCV 為 32 維,所 以描述子也是一個 32 維的向量。 每個樂音的 PCV 算法和 MP3 樂句的 PCV 算法相同:將每一個 slot 所包含的 PCV 平方 加總便得到一個 slot 的 PCV,在對此 PCV 做 正規化,最後此 PCV 便代表了這個樂音的特 徵值。.

(5) 圖 6 計算描述子順序的例子. 圖 5 “City is so empty”樂句的八個樂音的特徵值向量. 圖 5 顯示”city is so empty”樂句的八個樂 音的特徵值向量,分別以 PCV1,PCV2,…, PCV8 表示之。. 3.4 MFD: MP3 Feature Discriminator 綜合前面所述,我們定義了 MP3 的特徵 值:MP3 特徵描述子(MFD) : <MFD>=<PCV><Discriminator1><Discriminat or2>…<Discriminator8>。MFD 為兩種向量的 組成,所以一個 MP3 樂句的特徵值 MFD 的意義 是此樂句的 32 個頻帶頻率強度分佈向量(PCV) 和其 8 個描述子順序所組合而成的。由於 PCV 和描述子的維度都是 32 維,所以 MFD 的最多 為一個 32*9 = 288 維的向量。 <Discriminator1><Discriminator2> …<Discriminator8>並不是代表第一段描述 子、第二段描述子…第八段描述子的意思,而 是根據彼此之間的歐基理得距離總和大小決 定。如果其中一個描述子的其他七個描述子的 歐基理得距離總和最大,此描述子便是 <Discriminator1>,和其他七個描述子距離總 和第二大的描述子為<Discriminator2>,以此 類推…。 至於為何要根據描述子彼此的歐基理得 距離來決定描述子的順序的原因是我們想要 找 出在 這八個 描述子 中找 出最特 別的 描述 子,也就是最有可能是一段 MP3 樂句裡轉音的 地方。設想一個描述子的和其他七個描述子的 歐基理得距離總和為最大是不是有可能代表 這個描述子有可能是這段 MP3 樂句裡發音最 不一樣的部分(可能是轉音、突然聲音變大變 高或是聲音變低變小)。所以描述子的用意在 於找到 MP3 樂句裡 8 個小段並且根據其特別度 加以排列組合,以配合 MP3 樂句的 PCV 做更精 確的比對。. 圖 6 中 PCV1~PCV8 代表描述子 1~8,其相 對應的數值為描述子之間彼此的歐基理得距 離;Sum 是代表某一個描述子對其他描述子的 歐基理的距離總和;Num 則表示描述子優先 選擇順序。以第八個描述子(D8)來說,它和其 它七個描述子的歐基理得距離總和為 4.88741,為裡面最大值,所以它便是優先被 選取的描述子,但在這部份我們專題只做一整 個樂句部份。 3.5 MP3 內涵式查詢: 根據前面所述我們定義了所謂的 MFD 為 我們的特徵值,其物理意義為代表了一段 MP3 頻率強度的分佈情形及其 8 小段頻率強度的 組合。這節便要說明如何用這樣的特徵值來做 搜尋比對的動作。整個比對的流程如圖 7 所 示:. 圖 7 MP3 內涵式比對流程圖.

(6) 據使用者查詢的 MFD 和所有 MP3 句子的 MFD,我們便可以做相似性的計算。在此我們 使用了 PCV 歐基理德距離(Euclidean Distance) 和樂音彼此的歐基理德距離及權重乘績來作 為相似性的判斷依據,若距離小於一個基準 值,便認定其為相似,若高於基準值則訂為不 相似。 其中歐基理德距離的物理意義為: 假設有一個向量空間,有兩個向量空間上 的 點 α , β 分 別 為 (a1,b1,c1,……) 和 (a2,b2,c2, ……)(其中維度可以無限延伸) ,其 兩點間歐基理德距離為. 圖 9. 特徵值比對程式流程圖. 所以歐基理得距離代表了在向量空間上兩個 點之間的距離。距離越小,表示兩點越接近, 也代表他們越相似;距離越大,表示兩點越不 接近,也代表他們越不相似。. 四、實作平台與技術 本 文 的 實 作 平 台 是 採 用 Microsoft Windows NT Server 4.0 作為作業系統且將資 料予以更新至 Service Pack 6,另外在資料庫部 份是採用 Microsoft SQL Server 7.0 作為建構本 專題資料庫系統的軟體,系統架構如圖 8 所 示。MP3 特徵值查詢,採用 Microsoft Visual C++ 6.0 作為整個程式的開發環境,最後是連 結到 SQL Server 內去做查詢比對,程式流程 如圖 9 所示。. 4.1 音樂查詢樣本錄製及播放: 錄 音 時 主 要 是 利 用 到 Microsoft Visual C++ 6.0 所 提 供 的 CPlayMMSound 、 CrecordSound 和 CwriteSoundFile 這三個類別; 其中 CPlayMMSound 是負責用來播放 WAV 資 源的類別,也可以指定播放特定的 WAV 檔 案,而 CrecordSound 是用來錄音的類別,若 要 將 錄 音 的 內 容 存 成 WAV 檔 案 就 需 要 用 CwriteSoundFile 這個類別。在實作上,一些主 要的類別及函數的宣告,例如:CrecordSound、 CplaySound 的宣告,請參考附錄 A。主要的 流程如下:查詢樣本透過錄音程式,利用 CrecordSound 所提供的函式將聲音錄起來,然 後透過 CwriteSoundFile 建立一個 WAV 檔案, 最後可以利用 CPlayMMSound 的函式,撥放 我們所錄製而成的 WAV 檔案。 4.2 查詢樣本壓縮: 這部份是將音樂查詢樣本錄製功能所錄 製的 WAV 檔案予以壓縮成 MP3 檔案格式,我 們所採用的技術是在 WinLame 3.70 Beta 版這 開放原始碼中去擷取我們所需用到的類別予 以修改整合到我們程式中。最主要的編碼函式 如下:(其他相關函數及其說明請參考附錄 B). 圖 8.系統架構圖. MP3 特徵值查詢部份可以分為音樂查詢 樣本錄製及播放、查詢樣本壓縮、MP3 特徵值 擷取與 MP3 播放、音樂查詢處理四個主要部 份。. int lame_encode_buffer(lame_global_flags *,short int leftpcm[], short int rightpcm[],int num_samples, char *mp3buffer,int mp3buffer_size); 其中 leftpcm[]: 左聲道的 16bit 的 pcm data 矩 陣;rightpcm[]: 右聲道的 16bit 的 pcm data 矩 陣;num_samples: 左聲道和右聲道的取樣個 數;mp3buffer: MP3 輸出 buffer 的指標; mp3buffer_size: MP3 buffer 的大小,回傳值如 果為-1, 代表 MP3 buffer 太小。.

(7) 4.3 MP3 特徵值擷取與 MP3 播放:. 4.5 音樂查詢處理:. 這部份我們所採用的技術 amp11 這開放 原始碼,去擷取我們所需用到的類別,予以修 改整合到我們程式中。但是 amp11 只提供播放 MP3 部份,而特徵值擷取部份則是抓 amp11 播放最後輸出的 hybridout 的值來做正規化, 再求出它的特徵值,特徵值擷取的畫面如圖 10 所示。(使用 amp11 的說明請參考附錄 C). 查詢處理可大約分為三大步驟,連結資料 庫、計算歐基里德距離、排序,其中歐基里德 距離的計算方法在之前有提到。 首先建立一個 mp3namefeature 類別宣告 public: CString mp3name ;. double feature;. 其中 CString mp3name 為 MP3 的檔名。 double feature 為 MP3 比較後的特徵值。 MP3 比較函式, 計算歐基里德距離: Double distancearray(double *aarray,double *barray)其中 double *aarra 和 double *barray 為要比較的兩個特徵值矩陣。採用 Quick Sort, 傳入值為要排列的矩陣和左邊界和右邊界:. 圖 10. 特徵擷取畫面. 4.4 MP3 特徵資料庫與內涵式搜尋引擎 完成特徵值擷取的動作後,就是要將所得 到的特徵值輸入至資料庫中;這次使用的特徵. void QuickSort(mp3namefeature *list,int left,int right) 其中 mp3namefeature *list 為想要排列的 矩陣。int left 為左邊界, 通常為 0。 int right 為右邊界, 內容為矩陣的大小。 4.6 測試與結果: 在測試時找來了幾位同學,實際以哼唱. 資料庫是採用 Microsoft SQL Server 7.0,做為 資料庫的 SEVER 端;在資料欄位上,首先定義 歌名、32 個特徵值與編號等欄位;利用 SQL 的 語法,可以與資料庫作溝通,讓我們可以作一 些資料庫的基本功能,例如:新增與刪除;在 CLINET 端則是合併前面所提的各個相關部分. 的方式,作 MP3 特徵值比對,測試的過程中, 按照錄音、MP3 壓縮、MP3 特徵值擷取與資 料庫比對等步驟,來完成測試;輸出的結果依 照比對所計算的成績,列出最為接近的前 10 名,如下圖 12 所示。. 整合成 MP3 內涵式搜尋引擎(如圖 11 所示), 進一步與資料庫作連結。. 圖 12.一位女同學以哼唱裙襬搖搖做測試的結果. 五、MP3 網頁設計與實作 5.1 Highlight MP3 Music Station 網頁設計之 內容. 圖 11 MP3 內涵式搜尋引擎. 『Highlight』一詞即是豐富、精采的意 思,網站的名稱之好壞會直接影響各網友們前 來參觀之意願,所以使用『Highlight』即是 想表現出響亮、大方、簡單的目的,故取名為.

(8) Highlight MP3 Music Station。Highlight MP3 Music Station 其主要的進站畫面是希望利用 流行音樂的強烈色彩來說明 MP3 音樂帶動網 路潮流之意義,而其中各種樂器的繪製便是要 強調 Highlight MP3 Music Station 之內容是 以流行音樂為主,並進而吸引愛好 MP3 音樂的 網友們前來參觀指教,如圖 13。. 圖 13. Highlight MP3 Music Station 網頁. 使用工具:此一進站畫面是利用 Flash 4.0 的軟體工具來達到製作動畫的效果,文字 的縮放漸變、滑鼠經過產生泡沫的應用、文字 顏色的變換與閃爍、樂器繪製的動畫、文字遮 罩的使用以及可愛按鈕的製作。對於之前找過 這麼多的網站,多多少少都了解和清楚這次網 頁要如何設計,要有哪些項目和功能,而首頁 頁面的設計主要是參考之前在找網站時,有些 網站將它所有的功能都一併擺在首頁上,讓使 用者能知道如何去使用這個網站的各項功 能,所以設計首頁的版面,也是希望能讓使用 者一看就能明瞭,每一個功能的作用,然後更 能一看首頁就知道要如何操作和使用這個網 站的全部功能,不需要使用者點來點去,花費 時間去找尋他所需要的一些東西,我想這是首 頁設計的主要重點。故將首頁歸劃成四個部份 (分成上中左右共四部份): 第一個部份是針對上面的部份:有 NEW、 MP3 工具下載、MP3 技術研討、MP3 相關網站 搜尋、會員加入五個功能,這些功能主要是針 對之前所找的網站功能所做的統計,大部份的 網站都有這些功能,故也要具備有相同的功 能。在 N 方面,將做最新專輯最完整的介紹; 在 MP3 工具下載方面,將有下載 MP3 所需的工 具和聽 MP3 所需的軟體等等;在於 MP3 技術研 討方面,是希望能做個大家都能來討論製作 MP3 一些技術的問題,或者是反應網站負責人 的一些問題;在 MP3 相關網站搜尋方面,除了 列出數個不錯的網站連結之外,還有一些像是 蕃薯藤、奇摩之類的網站搜尋器;而在會員加 入方面,只是希望能獲知大部份是哪些人在本 站做些下載,或者是本站有哪些最新的活動都 會優先讓會員參與。. 第二部份是針對右邊的部份:有國語區 (分男歌手、女歌手、團體)、台語區(分男歌 手、女歌手、團體)、MIDI 區(分國語區和台 語區)、中文排行榜(勁歌金曲排行榜),對於 MP3 的區分,本有多種排法和意見,到最後還 是選擇用國語區和台語區來分類,其中又分成 男歌手、女歌手、團體;而在 MIDI 區方面, 因為收集到的 MIDI 很多,又很雜亂,有些 MIDI 已經是很舊的了,甚至可能不知道歌手的名 字,最後還是以國語區和台語區來分類;在中 文排行榜方面,是參考別的網站的排行榜所作 的整理,希望能讓使用者得到最新的流行歌曲 的動向。 第三部份是針對中間的部份:中間的部份 是大家一進站都會首先先看的部份,所以我們 將本站最新消息和最新大碟推薦擺在中間,讓 使用者一進站就能明瞭,本網站在近期的動 態,還有哪些新進的歌曲,如果使用者只是要 下載最新的 MP3 歌曲,就只要點選進入就能直 接找到所需要的 MP3 歌曲。 第四部份是針對左邊的部份:查詢國台語 MP3 歌曲,而查詢又可依專輯名稱查詢、歌手 名稱查詢、歌曲名稱查詢,只要在所指定的框 框裡依名稱做輸入,按查詢鍵,就能讓使用者 能在最快速的時間找到你所需要的 MP3 歌 曲,這也是精心為使用者們做最貼心的設計; 還有 Highlight MP3 音樂報,只要輸入 e-mail 就能不定期的收到本站的最新動態和消息。 5.2 Highlight MP3 Music Station 首頁設計之 樹狀圖:. 六、評估與展望 6.1 預期與實際成效之差距 經過實作後我們可以發現雖然輸出結果 會因為一些人為因素,如樂句長度不一、查詢.

(9) 音高不準、查詢 key 不準、查詢節奏不準影響 而不如預期每次查詢都可以都在第一首歌就 是自己想要查詢的歌,但都還在可接受的範圍 內;在理想上,依照使用者的查詢,然後輸出 所需要的結果給使用者,這樣就是一個最佳的 查詢工具,也是我們所預期所希望的結果,但 是世界上並無十全十美的東西,在實際上利用 MP3 特徵值去做查詢,只能做到相當近似的結 果,並不能保證能夠完全正確無誤,所以我們 在輸出結果時將最接近的 10 首歌列出,讓使 用者知道,以便縮小查詢的誤差。 6.2 未來可能之擴展方向 這個專題的完成相信能將 MP3 音樂推向 另一個高峰,讓使用者只用哼唱不需記取歌名 與原唱者,便能在 MP3 網際網路資料庫上輕 鬆的找到自己所想要的歌曲;未來若能與網際 網路搜尋器做更密切的結合,未來任何人甚至 利用大哥大手機上網,在任何時間、地點只要 隨口哼出自己喜好的音樂便能自動比對、搜尋 由自己的喇叭中唱出自己喜歡的歌曲,讓科技 更深入生活,讓音樂更貼近人心,創造無限的 商機。. 七、結論 在本篇論文中,根據 MP3 編碼與解碼,而設 計出來的 MP3 內涵式搜尋引擎,可以說是在網 路上收尋 MP3 音樂的一大創舉,不僅是更方便 且容易使用,在未來的應用也可以運用於隨選 音樂(Music On-Demand)上以及網路點歌等。 另一方面,我們要收集大量的 MP3 音訊資料, 朝全台灣甚至全世界最大的中文 MP3 資料庫 的目標來繼續努力。. 八、參考文獻 [1] 蔡伯俊, "MP3 音樂物件之內涵式查詢", 中華大學電機工程學系碩士論文,1999. [2] ISO 11172-3 Layer Ⅰ ~ Ⅲ Diagram.. Decoder. [3] MPEG/Audio Coding/Decodeing Software Chad Fogg 1991. [4] 資 料 庫 系 統 郭 斯 (Henry F. Korth) 著 1992. [5] 多媒體通訊與區域網路技術 張詩言編著 1993. [6] HTML 設計寶典 洪錦魁、蔡昌均編著. 1997/5. [7] Active Server Pages & WEB 資料庫 王國 榮著 1997/10. [8] 多媒體於 WWW 之應用策略 著 1997. [9] C++ Program Design Davidson 1999/2. [10] Visual C++ 1999/05.. 王向葵編. J. P. Cohoon and J. W.. Ivor Horton’s 著 蔡明志譯. [11] 輕 鬆 享 用 MP3 1999/9.. 郭長祐、王正裕 著. [12] SQL Server 7.0 設計實務 施威銘研究室 著 2000/1. [13] Windows 98 程式設計聖典 譯.. 黃昕暐等. [14] 精通 SQL Server7.0 資料庫系統 編著 1999/3.. 方盈. [15] Arman, F., A. Hsu, and M. Y. Chiu, "Image Processing on Compressed Data for Large Video Databases," In Proc. of ACM Intl. Conf. on Multimedia, 1993. 附錄 A 查詢樣本錄製及播放函數的宣告 CRecordSound 可用以下程式碼宣告: m_pRecordSound = new CRecordSound(); m_pRecordSound->CreateThread(); CPlaySound 可用以下程式碼宣告: m_pPlaySound = new CPlaySound(); m_pPlaySound->CreateThread(); 開始錄音的程式碼如下: m_RecordThread->PostThreadMessage (WM_RECORDSOUND_STARTRECORDING, 0,0L); 停止錄音的程式碼如下: m_RecordThread->PostThreadMessage (WM_RECORDSOUND_STOPRECORDING,0, 0); 開始放音的程式碼如下: m_PlayThread->PostThreadMessage (WM_PLAYSOUND_STARTPLAYING,0,0); 停止放音的程式碼如下: m_PlayThread->PostThreadMessage (WM_PLAYSOUND_STOPPLAYING,0,0); 利用 CWriteSoundFile 來寫入 wav 檔,使用 方法如下: m_WriteSoundThread->PostThreadMessage (WM_WRITESOUNDFILE_FILENAME,0,(LP ARAM)(PWRITESOUNDFILE)&structWri teSoundFile); m_WriteSoundThread->PostThreadMessage (WM_WRITESOUNDFILE_WRITEBLOCK,0,.

(10) (LPARAM)(WAVEHDR)pWaveHdr); m_WriteSoundThread->PostThreadMessage (WM_WRITESOUNDFILE_CLOSEFILE,0,0); 要將所錄的聲音記錄在 wav 檔中,需要有一個 名稱為 WRITESOUNDFILE 的 structure,而 W RITESOUNDFILE 的描述如下: typedef struct writesoundfile_tag { char lpszFileName[MAX_PATH]; WAVEFORMATEX waveFormatEx; TCHAR buffer[100]; } WRITESOUNDFILE, *PWRITESOUNDFIL E; 使用時必需要給一個檔名,然後 WAVEFORM ATEX structure 就會定義要寫入的 wav 資訊。 CPlayMMSound 可以讀入一個 wav 檔案並且 利用聲音裝置來播放它,只要利用一個指標傳 給 CPlaySound thread 即可,使用訊息如下: m_pPlayMMSound->PostThreadMessage(WM_ PLAYMMSOUND_PLAYFILE,0,(LPARAM)"s ound.wav"); m_pPlayMMSound->PostThreadMessage(WM_ PLAYMMSOUND_PLAYSOUNDPTR,0,(LPA RAM)(CPlaySound*)m_pPlaySound); m_pPlayMMSound->PostThreadMessage(WM_ PLAYMMSOUND_CLOSEFILE,0,0); 其中 WM_PLAYMMSOUND_PLAYFILE 代表. /*是否增加 Xing VBR tag? */ int quality; /*音質設定 0=best, 9=worst */ int silent; /* disable 一些狀態輸出 */ int mode; /* 0,1,2,3 stereo,jstereo,dual channel,mono */ int mode_fixed;/* 使用自定模式*/ int force_ms; /*如果要使用 force M/S mode,此值為 1*/ int brate; /* bitrate */ /* frame 旗標 */ int copyright;/* 是否有版權, 內定值為 0*/ int original;/* 是否為原創, 內定值為 1*/ int error_protection; /* 是否每個 frame 用 2 b ytes 來做 CRC 偵錯, 內定值為 0 */ int padding_type;/* 0=no padding, 1=always pad, 2=adjust padding */ int extension;/* MP3 的額外沒意義的 bit*/ /* quantization/noise shaping */. 要開啟一個 wav 檔來準備播放,準備好要執行. int disable_reservoir;/* 是否使用 bit 儲存*/. 的工作後,用 WM_PLAYMMSOUND_PLAYS. int experimentalX;. OUNDPTR 來執行工作,如果想在播放中停止. int experimentalY;. 播放,就用 WM_PLAYMMSOUND_CLOSEFI. int experimentalZ; /* VBR 控制 */. LE。. int VBR; 附錄 B 查詢樣本壓縮. int VBR_q;. 首先先講解 lame_global_flags 結構,它儲存著. int VBR_min_bitrate_kbps;. MP3 內部的所設定:. int VBR_max_bitrate_kbps;. typedef struct. {. /* 濾波器 */. /*輸入檔案描述 */. int lowpassfreq; /* freq in Hz. 0=lame chose. unsigned long num_samples;. s. -1=no filter */. /*取樣的個數, 內定為 2^32-1*/. int highpassfreq; /* freq in Hz. 0=lame chos. int num_channels; /*聲道的個數,內定為 2*/. es. -1=no filter */. int in_samplerate;. int lowpasswidth;/* freq width of filter, in H. /* 輸入的取樣速率, 內定為 44.1kHz */. z (default=15%)*/. int out_samplerate;/* 輸出的取樣速率 */. int highpasswidth;/* freq width of filter, in. /* 一般的控制旗標 */. Hz (default=15%)*/. int gtkflag; /* 是否執行 frame analyzer?*/ int bWriteVbrTag;. /* 讀取輸入檔案 – 如果用 i/o calling 程式 就不使用 */.

(11) sound_file_format input_format;. lowpassband in the polyphase filterbank */. int swapbytes;. int highpass_band;/* zero bands <= highpass. /* force byte swapping, 內定值為 0 */. _band */. char *inPath;/* 輸入檔檔名*/. int filter_type;/* 0=polyphase filter, 1= FIR. char *outPath;/* 輸出檔檔名*/. filter 2=MDCT filter(bad)*/. /* 聲學分係 */. int quantization;/* 0 = ISO formual, 1=best. int ATHonly;/* only use ATH */. amplitude */. int noATH; /* disable ATH */. int noise_shaping;. float cwlimit; /* predictability limit*/. model 2=allow scalefac_select=1 */. int allow_diff_short; /* allow blocktypes to d. int noise_shaping_stop;. iffer between channels ? */. int psymodel; /* 0 = none 1=gpsycho */. int no_short_blocks; /*disable short blocks*/. int use_best_huffman;. int emphasis; /* obsolete */. oop. /*MP3 內部設定 */. /* 0=none 1=ISO AAC. /* 0 = no. 1=outsidel. 2=inside loop(slow) */. } lame_global_flags;. long int frameNum; /* frame 計數器*/ long totalframes;. 使用方法. /* frames: 0..totalframes-1 (estimate) */. void lame_init(lame_global_flags *);初始化. int encoder_delay;. void lame_init_infile(lame_global_flags *);. int framesize;. /*開啟輸入的檔案*/. int version;/* 0=MPEG2. 1=MPEG1*/. void lame_init_params(lame_global_flags *);. int padding;. /*設定更多的內部設定*/. /*padding for the current frame?*/. int lame_readframe(lame_global_flags *,short. int mode_gr; /* granules per frame*/. int Buffer[2][1152]); /*讀取一個由 lame_init_i. int stereo; /* 聲道數 */. nfile 所開啟檔案的一個 frame*/. int VBR_min_bitrate; /*min bitrate index */. int lame_encode_buffer(lame_global_flags *,sh. int VBR_max_bitrate; /*max bitrate index*/. ort int leftpcm[], short int rightpcm[],int num. float resample_ratio;. _samples, char *mp3buffer,int. /* 輸入取樣數率 除 輸出取樣數率除*/. e);其中 leftpcm[]: 左聲道的 16bit 的 pcm data. int bitrate_index;. 矩陣;rightpcm[]: 右聲道的 16bit 的 pcm data. int samplerate_index;. 矩陣;num_samples: 左聲道和右聲道的取樣個. int mode_ext;. 數; mp3buffer: MP3 輸出 buffer 的指標. /* Low pass 和 High pass 濾波器設定 */. mp3buffer_size: MP3 buffer 的大小. float lowpass1,lowpass2;/* normalized frequen. 回傳值如果為-1, 代表 MP3 buffer 太小. cy bounds of passband */. void lame_close_infile(lame_global_flags *);. float highpass1,highpass2;/* normalized freque. 如果 lame_init_infile()已經開啟了, 就把它關. ncy bounds of passband */. 閉。. /* polyphase filter (filter_type=0) int lowpass_band;/*zero bands >=. */. mp3buffer_siz.

(12) 附錄 C amp11 所使用部分的說明. dec.ioctl(dec.ioctlsetvol, &vol, 0);其中 float. decoder 是一個類別, 利用 ampegdecoder dec;. &vol: volume, 1:normal。利用下列程式碼修改. 宣告:. stereo 輸出:dec.ioctl(dec.ioctlsetstereo, vols,. 利用下列程式碼來打開 decoder:. 0);其中. dec.open(instream, freq, stereo, fmt, dwn, ch. [src]: [0]:left, [1]:right, [2]:mono. 。. n);其中 binfile &instream: 宣告為 binfile 的 encoded 資料。 int &freq:/* decoder 資料的頻率*/。 int &stereo: /*當 decoder 資料為 stereo 時為 tr ue。*/ int fmt:/* 代表 format, 0: float, 1: little endia n 16 bit。*/ int dwn: /*代表 downsampling, 0: none, 1: b y 2, 2: by 4。*/ int chn: /*代表 channels, -2: 2 but downmixi ng, 0: as in mpeg, 1: 1, 2: 2。*/ 結束 decoder 類別時用下列程式碼: dec.close(); 要讀 decoder 內的一些資料, 用下列程式碼: n=dec.read(buf, len); 其中. int &n: 要讀幾個 bytes。 void *buf: 存回傳所需資料。 int len: 要讀幾個 bytes。. 要 seek 到 decoder 資料內的的某一點, 用下列 程式碼: p=dec.seek(pos); 其中. int &p: 新的那一點指標。 int pos: 要 seek 到那一點。. ps: 通常會有誤差。 利用下列程式碼設定 equalizer 為 32bands: dec.ioctl(dec.ioctlsetequal32, equal32, 0); 利用下列程式碼設定 equalizer 為 576 bands: dec.ioctl(dec.ioctlsetequal576, equal576, 0); 其中 float equal32[32]:/* per band (freq/64) a mplification,1:normal。float equal576[576]: per band (freq/1152) amplification, 1: nor mal。*/ 利用下列程式碼設定 amplification:. float vols[3][3]: volume matrix [dst].

(13)

數據

圖 5    “City is so empty”樂句的八個樂音的特徵值向量  圖 5 顯示”city is so empty”樂句的八個樂 音的特徵值向量,分別以 PCV1,PCV2,…, PCV8 表示之。  3.4 MFD: MP3 Feature Discriminator  綜合前面所述,我們定義了 MP3 的特徵 值:MP3 特徵描述子(MFD) :  &lt;MFD&gt;=&lt;PCV&gt;&lt;Discriminator1&gt;&lt;Discriminat or2&gt;…&lt
圖 13. Highlight MP3 Music Station 網頁

參考文獻

相關文件

 想要設計一個具有兩個輸入G(gate閘控)和 D(data資料)以及一個輸出Q的閘控閂電 路。當G等於1時,在輸入D出現的二進位資料

 不過以上所提的內容幾乎都會被現在的智慧型手機取 代,因此我們覺得這些功能能夠運用在一個沒有網路

在【逐步解析 1】中,共需要輸入 2 個答案,為了避免「後面 輸入的答案(數學分數)」取代「前面的答案(國文分數)」,我 們要利用 2 個不同的變數來區別兩者,並以變數

一說到網路搜尋,我們就會想到 G oogle ,但其 實搜尋引擎不是 G oogle 發明的,早在 G oogle 出現 之前就已經有搜尋引擎的應用。那麼, G oogle

圖 4.7 是場景一的俯視圖,可以由圖中得知牆壁出現在自走車的左側,而 自走車根據所在位置定義直走是 Y 軸方向,而右轉是 X 軸方向。初始位置自走車

我們提出利用讀取器與讀取器間的距離為參數來優化利用分層移除讀取器之方法的最佳 化技術 Distance Based Optimization for Eliminating Redundant Readers (DBO) ,此方法完全

一般在使用 MFCC 做為特徵擷取參數的方法,是將所有短時域音框所取得 的 MFCC 加總取平均(mean),或是將所有短時域音框所得之 MFCC 計算其標準 差(standard

Cohen 等人在[8]一文中提出自動進行呼吸聲分類的方法。此方法使用 LPC 係數 與能量輪廓作為特徵值來建立雙層結構的呼吸聲分類器,可以對肺泡呼吸聲(vesicular breath sounds) 、 支 氣 管