當前位置:首頁 » 編程語言 » c語言軟解碼mp3
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言軟解碼mp3

發布時間: 2022-05-16 21:20:29

❶ 有人會做MP3編解碼演算法程序嗎 c語言控制台環境進行運行 完成MP3與WAV文件間的相互轉換

這個很麻煩的,都可以寫一本書了,這里有一個介紹的
http://wenku..com/view/79a26d48c850ad02de804100.html
有興趣研究研究
-物聯網校企聯盟技術部

❷ C語言編程mp3的播放,求解怎麼實現通過調用mp3的解碼源程序

1.你說的解碼程序一般是作為庫存在的,也就是xx.dll
2.c語言調用庫可以參考msdn或者網路,其實都很容易實現。
3.一般成熟的庫都會有官方說明,看看官方說明就會知道需要的函數在什麼dll裡面。
4.你現在的問題主要是入門不太會,搞懂了第一第二兩個方面,後面幾乎不涉及演算法,還是比較容易製作的。
祝你好運,不懂留言給我。

❸ 自己用c語言寫了個MP3播放器,請問怎麼實現流媒體來播放音樂

用socket傳輸mp3文件到本地計算機內存中保存,然後用你的播放器播放,播放完畢從內存中刪除
如果是視頻,就分段傳輸,每一段轉換成獨立文件,然後計算時間連續播放
媒體文件網路播放其實都是先下載在播放的,這個一般保存到內存中,播放完畢就清除,也就是所謂的緩存

❹ 怎樣用標准C語言播放音樂

用C語言播放音樂,一般需要額外的庫或者調用系統的API函數。

以Windows為例,可以通過PlaySound函數播放wav格式的音樂。示例如下:

#include<stdio.h>
#include<windows.h>
#include<mmsystem.h>
#pragmacomment(lib,"WINMM.LIB")
intmain()
{
PlaySound(TEXT("1.wav"),0,SND_FILENAME);//1.wav是要播放的音樂文件
return0;
}

如果想播放mp3音樂可以使用如下代碼。

注意:生成程序後,請在cmd中執行此程序,不要在vc/vs的IDE中運行。

#include<windows.h>
#include<mmsystem.h>
#include<stdio.h>
#pragmacomment(lib,"Winmm.lib")
intmain(intargc,char*argv[])
{
//絕對地址形式
TCHARfileName[]="ganlusi.mp3";
TCHARshortName[MAX_PATH];
GetShortPathName(fileName,shortName,sizeof(shortName)/sizeof(TCHAR));
TCHARcmd[MAX_PATH+10];
wsprintf(cmd,"play%s",shortName);
mciSendString(cmd,NULL,0,NULL);
Sleep(5*60*1000);//這里是防止一播放就結束做的延遲
return0;
}

❺ 請詳細介紹一下MP3格式{包括VBR}!

MP3的全稱是Moving Picture Experts Group Audio Layer III。簡單的說,MP3就是一種音頻壓縮技術,由於這種壓縮方式的全稱叫MPEG Audio Layer3,所以人們把它簡稱為MP3。MP3是利用 MPEG Audio Layer 3 的技術,將音樂以1:10 甚至 1:12 的壓縮率,壓縮成容量較小的file,換句話說,能夠在音質丟失很小的情況下把文件壓縮到更小的程度。而且還非常好的保持了原來的音質。正是因為MP3體積小,音質高的特點使得MP3格式幾乎成為網上音樂的代名詞。每分鍾音樂的MP3格式只有1MB左右大小,這樣每首歌的大小隻有3-4兆位元組。使用MP3播放器對MP3文件進行實時的解壓縮(解碼),這樣,高品質的MP3音樂就播放出來了。

MPEG-1 Audio Layer 3,經常稱為MP3,是當今較流行的一種數字音頻編碼和有損壓縮格式,它設計用來大幅度地降低音頻數據量,而對於大多數用戶來說重放的音質與最初的不壓縮音頻相比沒有明顯的下降。它是在1991年由位於德國埃爾朗根的研究組織Fraunhofer-Gesellschaft的一組工程師發明和標准化的。

概觀

MP3是一個數據壓縮格式。它丟棄掉脈沖編碼調制(PCM)音頻數據中對人類聽覺不重要的數據(類似於JPEG是一個有損圖像壓縮),從而達到了小得多的文件大小。

在MP3中使用了許多技術其中包括心理聲學以確定音頻的哪一部分可以丟棄。MP3音頻可以按照不同的位速進行壓縮,提供了在數據大小和聲音質量之間進行權衡的一個范圍。

MP3格式使用了混合的轉換機制將時域信號轉換成頻域信號:

* 32波段多相積分濾波器(PQF)

* 36或者12 tap 改良離散餘弦濾波器(MDCT);每個子波段大小可以在0...1和2...31之間獨立選擇

* 混疊衰減後處理

根據MPEG規范的說法,MPEG-4中的AAC(Advanced audio coding)將是MP3格式的下一代,盡管有許多創造和推廣其他格式的重要努力。然而,由於MP3的空前的流行,任何其他格式的成功在目前來說都是不太可能的。MP3不僅有廣泛的用戶端軟體支持,也有很多的硬體支持比如攜帶型媒體播放器(指MP3播放器)DVD和CD播放器。

發展

MPEG-1 Audio Layer 2編碼開始時是德國Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt(後來稱為Deutsches Zentrum für Luft- und Raumfahrt, 德國太空中心)Egon Meier-Engelen管理的數字音頻廣播(DAB)項目。這個項目是歐盟作為EUREKA研究項目資助的,它的名字通常稱為EU-147。EU-147 的研究期間是1987年到1994年。

到了1991年,就已經出現了兩個提案:Musicam(稱為Layer 2)和ASPEC(自適應頻譜感知熵編碼)。荷蘭飛利浦公司、法國CCETT和德國Institut für Rundfunktechnik提出的Musicam方法由於它的簡單、出錯時的健壯性以及在高質量壓縮時較少的計算量而被選中。基於子帶編碼的Musicam 格式是確定MPEG音頻壓縮格式(采樣率、幀結構、數據頭、每幀采樣點)的一個關鍵因素。這項技術和它的設計思路完全融合到了ISO MPEG Audio Layer I、II 以及後來的Layer III(MP3)格式的定義中。在Mussmann教授(University of Hannover)的主持下,標準的制定由Leon van de Kerkhof(Layer I)和Gerhard Stoll(Layer II)完成。

一個由荷蘭Leon Van de Kerkhof、德國Gerhard Stoll、法國Yves-François Dehery和德國Karlheinz Brandenburg 組成的工作小組吸收了Musicam和ASPEC的設計思想,並添加了他們自己的設計思想從而開發出了MP3,MP3能夠在128kbit/s達到MP2 192kbit/s 音質。

所有這些演算法最終都在1992年成為了MPEG的第一個標准組MPEG-1的一部分,並且生成了1993年公布的國際標准ISO/IEC 11172-3。MPEG音頻上的更進一步的工作最終成為了1994年制定的第二個MPEG標准組MPEG-2標準的一部分,這個標准正式的稱呼是1995年首次公布的ISO/IEC 13818-3。

編碼器的壓縮效率通常由位速定義,因為壓縮率依賴於位數(:en:bit depth)和輸入信號的采樣率。然而,經常有產品使用CD參數(44.1kHz、兩個通道、每通道16位或者稱為2x16位)作為壓縮率參考,使用這個參考的壓縮率通常較高,這也說明了壓縮率對於有損壓縮存在的問題。

Karlheinz Brandenburg使用CD介質的Suzanne Vega的歌曲Tom』s Diner來評價MP3壓縮演算法。使用這首歌是因為這首歌的柔和、簡單旋律使得在回放時更容易聽到壓縮格式中的缺陷。一些人開玩笑地將Suzanne Vega稱為「MP3之母」。來自於EBU V3/SQAM參考CD的更多一些嚴肅和critical 音頻選段(glockenspiel, triangle, accordion, ...)被專業音頻工程師用來評價MPEG音頻格式的主觀感受質量。

MP3走向大眾

為了生成位兼容的MPEG Audio文件(Layer 1、Layer 2、Layer 3),ISO MPEG Audio委員會成員用C語言開發的一個稱為ISO 11172-5的參考模擬軟體。在一些非實時操作系統上它能夠演示第一款壓縮音頻基於DSP的實時硬體解碼。一些其它的MPEG Audio實時開發出來用於面向消費接收機和機頂盒的數字廣播(無線電DAB和電視DVB)。

後來,1994年7月7日Fraunhofer-Gesellschaft發布了第一個稱為l3enc的MP3編碼器。

Fraunhofer開發組在1995年7月14日選定擴展名.mp3(以前擴展名是.bit)。使用第一款實時軟體MP3播放器Winplay3(1995年9月9日發布)許多人能夠在自己的個人電腦上編碼和回放MP3文件。由於當時的硬碟相對較小(如500MB),這項技術對於在計算機上存儲娛樂音樂來說是至關重要的。

MP2、MP3與網際網路

1993年10月,MP2(MPEG-1 Audio Layer 2)文件在網際網路上出現,它們經常使用Xing MPEG Audio Player播放,後來又出現了Tobias Bading為Unix開發的MAPlay。MAPlay於199年2月22日首次發布,現在已經移植到微軟視窗平台上。

剛開始僅有的MP2編碼器產品是Xing Encoder和CDDA2WAV,CDDA2WAV是一個將CD音軌轉換成WAV格式的CD抓取器。

Internet Underground Music Archive(IUMA)通常被認為是在線音樂革命的鼻祖,IUMA是網際網路上第一個高保真音樂網站,在MP3和網路流行之前它有數千首授權的MP2錄音。

從1995年上半年開始直到整個九十年代後期,MP3開始在網際網路上蓬勃發展。MP3的流行主要得益於如Nullsoft於1997年發布的Winamp和Napster於1999年發布的Napster這樣的公司和軟體包的成功,並且它們相互促進發展。這些程序使得普通用戶很容易地播放、製作、共享和收集MP3文件。

關於MP3文件的點對點技術文件共享的爭論在最近幾年迅速蔓延—這主要是由於壓縮使得文件共享成為可能,未經壓縮的文件過於龐大難於共享。由於MP3文件通過網際網路大量傳播一些主要唱片廠商通過法律起訴Napster來保護它們的版權(參見知識產權)。

如iTunes Music Store這樣的商業在線音樂發行服務通常選擇其它或者專有的支持數字版權管理(DRM)的音樂文件格式以控制和限制數字音樂的使用。支持DRM的格式的使用是為了防止受版權保護的素材免被侵犯版權,但是大多數的保護機制都能被一些方法破解。這些方法能夠被計算機高手用來生成能夠自由復制的解鎖文件。一個顯著的例外是微軟公司的Windows Media Audio 10格式,目前它還沒有被破解。如果希望得到一個壓縮的音頻文件,這個錄制的音頻流必須進行壓縮並且帶來音質的降低。

MP3的音頻質量

因為MP3是一種有損格式,它提供了多種不同「位速」的選項—也就是用來表示每秒音頻所需的編碼數據位數。典型的速度介於每秒128和320kb之間。與此對照的是,CD上未經壓縮的音頻位速是1411.2 kbit/s(16 位/采樣點 × 44100 采樣點/秒 × 2 通道)。

使用較低位速編碼的MP3文件通常回放質量較低。使用過低的位速,「壓縮雜訊(:en:compression artifact)」(原始錄音中沒有的聲音)將會在回放時出現。說明壓縮雜訊的一個好例子是壓縮歡呼的聲音:由於它的隨機性和急劇變化,所以編碼器的錯誤就會更明顯,並且聽起來就象回聲。

除了編碼文件的位速之外,MP3文件的質量也與編碼器的質量以及編碼信號的難度有關。使用優質編碼器編碼的普通信號,一些人認為128kbit/s的MP3以及44.1kHz的CD采樣的音質近似於CD音質,同時得到了大約11:1的壓縮率。在這個比率下正確編碼的MP3能夠獲得比調頻廣播和卡式磁帶[來源請求]更好的音質,這主要是那些模擬介質的帶寬限制、信噪比和其它一些限制。然而,聽力測試顯示經過簡單的練習測試聽眾能夠可靠地區分出128kbit/s MP3與原始CD的區別[來源請求]。在許多情況下他們認為MP3音質太低是不可接受的,然而其他一些聽眾或者換個環境(如在嘈雜的車中或者聚會上)他們又認為音質是可接受的。很顯然,MP3 編碼的瑕疵在低端計算機的揚聲器上比較不明顯,而在連接到計算機的高質量立體聲系統,尤其是使用高質量的headphone時則比較明顯。

Fraunhofer Gesellschaft(FhG)在他們的官方網站上公布了下面的MPEG-1 Layer 1、2和3的壓縮率和數據速率用於比較:

* Layer 1: 384 kbit/s,壓縮率 4:1

* Layer 2: 192...256 kbit/s,壓縮率 8:1...6:1

* Layer 3: 112...128 kbit/s,壓縮率 12:1...10:1

不同層面之間的差別是因為它們使用了不同的心理聲學模型導致的;Layer 1的演算法相當簡單,所以透明編碼就需要更高的位速。然而,由於不同的編碼器使用不同的模型,很難進行這樣的完全比較。

許多人認為所引用的速率出於對Layer 2和Layer 3記錄的偏愛而出現了嚴重扭曲。他們爭辯說實際的速率如下所列:

* Layer 1: 384 kbit/s 優秀

* Layer 2: 256...384 kbit/s 優秀, 224...256 kbit/s 很好, 192...224 kbit/s 好

* Layer 3: 224...320 kbit/s 優秀, 192...224 kbit/s 很好, 128...192 kbit/s 好

當比較壓縮機制時,很重要的是要使用同等音質的編碼器。將新編碼器與基於過時技術甚至是帶有缺陷的舊編碼器比較可能會產生對於舊格式不利的結果。由於有損編碼會丟失信息這樣一個現實,MP3演算法通過建立人類聽覺總體特徵的模型盡量保證丟棄的部分不被人耳識別出來(例如,由於noise masking),不同的編碼器能夠在不同程度上實現這一點。

一些可能的編碼器:

* Mike Cheng在1998年早些時候首次開發的LAME。 與其它相比,它是一個完全遵循LGPL的MP3編碼器,它有良好的速度和音質,甚至對MP3技術的後繼版本形成了挑戰。

* Fraunhofer Gesellschaft:有些編碼器不錯,有些有缺陷。

有許多的早期編碼器現在已經不再廣泛使用:

* ISO dist10 參考代碼

* Xing

* BladeEnc

* ACM Procer Pro.

好的編碼器能夠在128到160kbit/s下達到可接受的音質,在160到192kbit/s下達到接近透明的音質。所以不在特定編碼器或者最好的編碼器話題內說128kbit/s或者192kbit/s下的音質是容易引起誤解的。一個好的編碼器在 128kbit/s下生成的MP3有可能比一個不好的編碼器在192kbit/s下生成的MP3音質更好。另外,即使是同樣的編碼器同樣的文件大小,一個不變位速的MP3可能比一個變位速的MP3音質要差很多。

需要注意的一個重要問題是音頻信號的質量是一個主觀判斷。Placebo effect is rampant, with many users claiming to require a certain quality level for transparency.許多用戶在A/B測試中都沒有通過,他們無法在更低的位速下區分文件。一個特定的位速對於有些用戶來說是足夠的,對於另外一些用戶來說是不夠的。每個人的聲音感知可能有所不同,所以一個能夠滿足所有人的特定心理聲學模型並不明顯存在。僅僅改變試聽環境,如音頻播放系統或者環境可能就會顯現出有損壓縮所產生的音質降低。上面給出的數字只是大多數人的一個大致有效參考,但是在有損壓縮領域真正有效的壓縮過程質量測試手段就是試聽音頻結果。

如果你的目標是實現沒有質量損失的音頻文件或者用在演播室中的音頻文件,就應該使用無損壓縮演算法,目前能夠將16位PCM音頻數據壓縮到38%並且聲音沒有任何損失,這樣的壓縮工具有Lossless Audio LA、Apple Lossless、TTA、FLAC、Windows Media Audio 9 Lossless (wma) 和Monkey』s Audio 等等。對於需要進行編輯、混合處理的音頻文件要盡量使用無損格式,否則有損壓縮產生的誤差可能在處理後無法預測,多次編碼產生的損失將會混雜在一起,在處理之後進行編碼這些損失將會變得更加明顯。無損壓縮在降低壓縮率的代價下能夠達到最好的結果。

一些簡單的編輯操作,如切掉音頻的部分片段,可以直接在MP3數據上操作而不需要重新編碼。對於這些操作來說,只要使用合適的軟體(mp3DirectCut和MP3Gain),上面提到的所關心的問題可以不必考慮。

位速

位速對於MP3文件來說是可變的。總的原則是位速越高則聲音文件中包含的原始聲音信息越多,這樣回放時聲音質量也越高。在MP3編碼的早期,整個文件使用一個固定的位速。

MPEG-1 Layer 3允許使用的位速是32、40、48、56、64、80、96、112、128、160、192、224、256和320 kbit/s,允許的采樣頻率是32、44.1和48kHz。44.1kHz是最為經常使用的速度(與CD的采樣速率相同),128kbit/s是事實上「好品質」的標准,盡管192kbit/s在對等文件共享網路上越來越受到歡迎。MPEG-2和[非正式的]MPEG-2.5包括其它一些位速:6、12、24、32、40、48、56、64、80、96、112、128、144、160kbit/s。

可變位速(VBR)也是可能的。MP3文件的中的音頻切分成有自己不同位速的幀,這樣在文件編碼的時候就可以動態地改變位速。盡管在最初的實現中並沒有這項功能,VBR現在已經得到了廣泛的應用。這項技術使得在聲音變化大的部分使用較大的位速而在聲音變化小的部分使用較小的位速成為可能。這個方法類似於聲音控制的磁帶錄音機不記錄靜止部分節省磁帶消耗。一些編碼器在很大程度上依賴於這項技術。

高達640kbit/s的非標准位速可以使用LAME編碼器和自由格式來實現,但是幾乎沒有MP3播放器能夠播放這些文件。

MP3的設計局限

MP3格式有一些不能僅僅通過使用更好的編碼器繞過的內在限制。一些新的壓縮格式如Vorbis和AAC不再有這些限制。

按照技術術語,MP3有如下一些限制:

* 位速最大是320 kbit/s

* 時間解析度相對於變化迅速的信號來說太低

* 對於超過15.5/15.8 kHz的頻率沒有scale factor band

* Joint stereo 是基於幀與幀完成的

* 沒有定義編碼器/解碼器的整體時延,這就意味著gapless playback缺少一個正式的規定

然而,即使有這些限制,一個好好的調整MP3編碼器能夠非常有競爭力地完成編碼任務。

MP3音頻編碼

MPEG-1標准中沒有MP3編碼器的一個精確規范,然而與此相反,解碼演算法和文件格式卻進行了細致的定義。人們設想編碼的實現是設計自己的適合去除原始音頻中部分信息的演算法(或者是它在頻域中的修正離散餘弦(MDCT)表示)。在編碼過程中,576個時域樣本被轉換成576個頻域樣本,如果是瞬變信號就使用192而不是576個采樣點,這是限制量化雜訊隨著隨瞬變信號短暫擴散。

這是聽覺心理學的研究領域:人類主觀聲音感知。

這樣帶來的結果就是出現了許多不同的MP3編碼器,每種生成的聲音質量都不相同。有許多它們的比較結果,這樣一個潛在用戶很容易選擇合適的編碼器。需要記住的是高位速編碼表現優秀的編碼器(如LAME這個在高位速廣泛使用的編碼器)未必在低位速的表現也同樣好。

MP3音頻解碼

另一方面,解碼在標准中進行了細致的定義。

多數解碼器是bitstream compliant,也就是說MP3文件解碼出來的非壓縮輸出信號將與標准文檔中數學定義的輸出信號一模一樣(在規定的近似誤差范圍內)。

MP3文件有一個標準的格式,這個格式就是包括384、576、或者1152個采樣點(隨MPEG的版本和層不同而不同)的幀,並且所有的幀都有關聯的頭信息(32位)和輔助信息(9、17或者32位元組,隨著MPEG版本和立體聲或者單通道的不同而不同)。頭和輔助信息能夠幫助解碼器正確地解碼相關的霍夫曼編碼數據。

所以,大多數的解碼器比較幾乎都是完全基於它們的計算效率(例如,它們在解碼過程中所需要的內存或者CPU時間)。

ID3和其它標簽

「標簽」是MP3(或其它格式)中保存的包含如標題、藝術家、唱片、音軌號或者其它關於MP3文件信息等添加到文件的數據。最為流行的標准標簽格式目前是ID3 ID3v1和ID3v2標簽,最近的是APEv2標簽。

APEv2最初是為MPC 文件格式開發的(參見 APEv2規范)。APEv2可以與ID3標簽在同一個文件中共存,但是它也可以單獨使用。

音量歸一化(normalization)

由於CD和其它各種各樣的音源都是在不同的音量下錄制的,在標簽中保存文件的音量信息將是有用的,這樣的話回放時音量能夠進行動態調節。

人們已經提出了一些對MP3文件增益進行編碼的標准。它們的設計思想是對音頻文件的音量(不是「峰值」音量)進行歸一化,這樣以保證在不同的連續音軌切換時音量不會有變化。

最流行最常用的保存回放增益的解決方法是被簡單地稱作「Replay Gain」的方法。音軌的音量平均值和修剪信息都存在元數據標簽中。
可選技術

有許多其它的有損音頻編解碼存在,其中包括:

* MPEG-1/2 Audio Layer 2 (MP2),MP3的前輩;
* MPEG-4 AAC, MP3的繼承者,Apple的iTunes Music Store和iPod使用;
* Xiph.org Foundation的Ogg Vorbis,自由軟體和沒有專利的編解碼器;
* MPC,也稱作Musepack(以前叫MP+),由MP2派生出來;
* Thomson Multimedia的MP3和SBR的組合mp3PRO;
* AC-3,Dolby Digital和DVD中使用;
* ATRAC,Sony的Minidisc使用;
* Windows Media Audio(WMA)來自於微軟公司;
* QDesign, 用於低速QuickTime;
* AMR-WB+ 針對蜂窩電話和其它有限帶寬使用進行了優化的增強自適應多速寬頻編解碼器(Enhanced Adaptive Multi Rate WideBand codec);
* RealNetworks的RealAudio,經常用於網站的流媒體;
* Speex,基於CELP的專門為語音和VoIP設計的自由軟體和無專利編解碼器。

mp3PRO、MP3、AAC、和MP2都是同一個技術家族中的成員,並且都是基於大致類似的心裡聲學模型。Fraunhofer Gesellschaft擁有許多涵蓋這些編解碼器所用技術的基本專利,Dolby Labs、索尼公司、Thomson Consumer Electronics和AT&T擁有其它一些關鍵專利。

在網際網路上有一些其它無損音頻壓縮方法。盡管它們與MP3不同,它們是其它壓縮機制的優秀範例,它們包括:

* FLAC 表示』自由無損音頻編解碼(Free Lossless Audio Codec)』
* Monkey』s Audio
* SHN,也稱為Shorten
* TTA
* Wavpack
* Apple Lossless

聽覺測試試圖找出特定位速下的最好質量的有損音頻編解碼。在128kbit/s下,Ogg Vorbis、AAC、MPC和WMA Pro性能持平處於領先位置,LAME MP3稍微落後。在64kbit/s下,AAC-HE和mp3pro少許領先於其它編解碼器。在超過128kbit/s下,多數聽眾聽不出它們之間有明顯差別。什麼是「CD音質」也是很主觀的:對於一些人來說128kbit/s的MP3就足夠了,而對於另外一些人來說必須是200kbit/s以上的位速。

盡管如WMA和RealAudio這些新的編解碼器的支持者宣稱它們各自的演算法能夠在64kbit/s達到CD音質,聽覺測試卻顯示了不同的結果;然而,這些編解碼器在64kbit/s的音質明顯超過同樣位速下MP3的音質。無專利的Ogg Vorbis編解碼器的開發者宣稱它們的演算法超過了MP3、RealAudio和WMA的音質,上面提到的聽覺測試證實了這種說法。Thomson宣稱它的mp3PRO 在64kbit/s達到了CD音質,但是測試者報告說64kbit/s的mp3Pro文件與112kbit/s的MP3文件音質類似,但是直到 80kbit/s時它才能接近CD音質。

專門為MPEG-1/2視頻設計的、優化的MP3總體上在低於48kbit/s的單聲道數據和低於80kbit/s的立體聲上表現不佳。

授權和專利問題

Thomson Consumer Electronics在認可軟體專利的國家控制著MPEG-1/2 Layer 3 專利的授權,這些國家包括美國和日本,歐盟國家不包括在內。Thomson積極地加強這些專利的保護。Thomson已經在歐盟國家被歐洲專利局(:en:European Patent Office授予軟體專利,但是還不清楚它們是否會被那裡的司法所加強。參見歐洲專利協定中的軟體專利(:en:Software patents under the European Patent Convention)。

關於Thomson專利文件、授權協議和費用的最新信息請參考它們的網站mp3licensing.com。

在1998年9月,Fraunhofer Institute向幾個MP3軟體開發者發去了一封信聲明「發布或者銷售編碼器或者解碼器」需要授權。這封信宣稱非經授權的產品「觸犯了 Fraunhofer和THOMSON的專利權。製造、銷售或者發布使用[MPEG Layer-3]標准或者我們專利的產品,你們需要從我們這里獲得這些專利的授權協議。」

這些專利問題極大地減慢了未經授權的MP3軟體開發並且導致人們的注意力轉向開發和歡迎其它如WMA和Ogg Vorbis這樣的替代品。Windows開發系統的製造商微軟公司從MP3專向它們自有的Windows Media格式以避免與專利相關的授權問題。直到那些關鍵的專利過期之前,未經授權的編碼器和播放器在認可軟體專利的國家看起來都是非法的。

盡管有這些專利限制,永恆的MP3格式繼續向前發展;這種現象的原因看起來是由如下因素帶來的網路效應:

* 熟悉這種格式,不知道有其它可選格式存在,
* 這些可選格式沒有普遍地明顯超過MP3的優勢這樣一個現實,
* 大量的MP3格式音樂,
* 大量的使用這種格式的不同軟體和硬體,
* 沒有DRM保護技術,這使得MP3文件可以很容易地修改、復制和通過網路重新發布,
* 大多數家庭用戶不知道或者不關心軟體專利爭端,通常這些爭端與他們個人用途而選用MP3格式無關。

另外,專利持有人不願對於開源解碼器加強授權費用的徵收,這也帶來了許多免費MP3解碼器的發展。另外,盡管他們試圖阻止發布編碼器的二進制代碼, Thomson已經宣布使用免費MP3編碼器的個人用戶將不需要支付費用。這樣,盡管專利費是許多公司打算使用MP3格式時需要考慮的問題,對於用戶來說並沒有什麼影響,這就帶來了這種格式的廣受歡迎。

Sisvel S.p.A. [1]和它的美國子公司Audio MPEG, Inc. [2]以前曾經以侵犯MP3技術專利為由起訴Thomson[3],但是那些爭端在2005年11月最終以Sisvel給Thomson MP3授權而結束。Motorola最近也與Audio MPEG簽署了MP3的授權協議。由於Thomson和Sisvel都擁有他們聲稱編解碼器必需的單獨的專利,MP3專利的法律狀態還不清晰。

Fraunhofer的專利將在2010年4月到期,到了那時MP3演算法將不再受專利保護

❻ 怎麼用c語言打開一個MP3文件(直接給代碼),需要什麼軟體進行輸入

VC++中播放聲音的方法
2009-09-23 14:58
聲音是多媒體的一個重要組成部分,在應用程序中加入聲音可以使界面更友好。在VC++中可以根據不同的應用要求,用不同的方法實現聲音的播放。

一.播放聲音文件的簡單方法
在VC++ 中的多媒體動態連接庫中提供了一組與音頻設備有關的函數。利用這些函數可以方便地播放聲音。最簡單的播放聲音方法就是直接調用VC++中提供的聲音播放函數BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound ); 或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound );其中參數lpszSound是需要播放聲音的.WAV文件的路徑和文件名, hmod在這里為NULL,fuSound是播放聲音的標志,詳細說明請參考VC++中的幫助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC);或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT );如果沒有找到music.wav文件,第一種格式將播放系統默認的聲音,第二種格式不會播放系統默認的聲音。

二.將聲音文件加入到程序中
在VC++的程序設計中,可以利用各種標準的資源,如點陣圖,菜單,對話框等。同時VC++也允許用戶自定義資源,因此我們可以將聲音文件作為用戶自定義資源加入程序資源文件中,經過編譯連接生成EXE文件,實現無.WAV文件的聲音播放。
要實現作為資源的聲音文件的播放,首先要在資源管理器中加入待播放的聲音文件(實現過程並不復雜,這里不在敘述)。假設生成的聲音文件資源標識符為IDR_WAVE1。在播放時只需要調用下面的語句:
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(), SND_ASYNC|SND_RESOURCE|SND_NODEFAULT|SND_LOOP);
其中MAKEINTRESOURCE()宏將整數資源標識符轉變為字元串,AfxGetResourceHandle()函數返回包含資源的模塊句柄,
SND_RESOURCE是必須的標志。
作為資源的聲音文件的第二種播放方法是把資源讀入內存後作為內存數據播放。具體步驟入下:
1.獲得包含資源的模塊句柄:
HMODULE hmod=AfxGetResourceHandle();
2.檢索資源塊信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_WAVE1),_T("WAVE"));
3. 裝載資源數據並加鎖:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource);
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem);
4.播放聲音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.釋放資源句柄:
FreeResource(hGlobalMem);

三.播放聲音文件的高級方法
在VC++中提供了一組對音頻設備及多媒體文件直接進行操作的函數。利用這些函數可以靈活地對聲音文件進行各種處理。
首先介紹幾個要用到的數據結構。WAVEFORMATEX結構定義了WAVE音頻數據文件的格式。WAVEHDR結構定義了波形音頻緩沖區。讀出的數據首先要填充此緩沖區才能送音頻設備播放。WAVEOUTCAPS結構描述了音頻設備的性能。MMCKINFO結構包含了RIFF文件中一個塊的信息。詳細的說明請參考VC++中的幫助。
下面給出程序流程簡圖及程序源代碼清單,在VC++環境下可直接使用:

源程序清單如下:
LPSTR szFileName;//聲音文件名
MMCKINFO mmckinfoParent;
MMCKINFO mmckinfoSubChunk;
DWORD dwFmtSize;
HMMIO m_hmmio;//音頻文件句柄
DWORD m_WaveLong;
HPSTR lpData;//音頻數據
HANDLE m_hData;
HANDLE m_hFormat;
WAVEFORMATEX * lpFormat;
DWORD m_dwDataOffset;
DWORD m_dwDataSize;
WAVEHDR pWaveOutHdr;
WAVEOUTCAPS pwoc;
HWAVEOUT hWaveOut;
//打開波形文件
if(!(m_hmmio=mmioOpen(szFileName,NULL,MMIO_READ|MMIO_ALLOCBUF)))
{
//File open Error
Error("Failed to open the file.");//錯誤處理函數
return false;
}
//檢查打開文件是否是聲音文件
mmckinfoParent.fccType =mmioFOURCC('W','A','V','E');
if(mmioDescend(m_hmmio,(LPMMCKINFO)&mmckinfoParent,NULL,MMIO_FINDRIFF))
{
//NOT WAVE FILE AND QUIT
}
//尋找 'fmt' 塊
mmckinfoSubChunk.ckid =mmioFOURCC('f','m','t',' ');
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK))
{
//Can't find 'fmt' chunk
}
//獲得 'fmt '塊的大小,申請內存
dwFmtSize=mmckinfoSubChunk.cksize ;
m_hFormat=LocalAlloc(LMEM_MOVEABLE,LOWORD(dwFmtSize));
if(!m_hFormat)
{
//failed alloc memory
}
lpFormat=(WAVEFORMATEX*)LocalLock(m_hFormat);
if(!lpFormat)
{
//failed to lock the memory
}
if((unsigned long)mmioRead(m_hmmio,(HPSTR)lpFormat,dwFmtSize)!=dwFmtSize)
{
//failed to read format chunk
}
//離開 fmt 塊
mmioAscend(m_hmmio,&mmckinfoSubChunk,0);
//尋找 'data' 塊
mmckinfoSubChunk.ckid=mmioFOURCC('d','a','t','a');
if(mmioDescend(m_hmmio,&mmckinfoSubChunk,&mmckinfoParent,MMIO_FINDCHUNK))
{
//Can't find 'data' chunk
}
//獲得 'data'塊的大小
m_dwDataSize=mmckinfoSubChunk.cksize ;
m_dwDataOffset =mmckinfoSubChunk.dwDataOffset ;
if(m_dwDataSize==0L)
{
//no data in the 'data' chunk
}
//為音頻數據分配內存
lpData=new char[m_dwDataSize];
if(!lpData)
{
//faile
}
if(mmioSeek(m_hmmio,SoundOffset,SEEK_SET)<0)
{
//Failed to read the data chunk
}
m_WaveLong=mmioRead(m_hmmio,lpData,SoundLong);
if(m_WaveLong<0)
{
//Failed to read the data chunk
}
//檢查音頻設備,返迴音頻輸出設備的性能
if(waveOutGetDeVCaps(WAVE_MAPPER,&pwoc,sizeof(WAVEOUTCAPS))!=0)
{
//Unable to allocate or lock memory
}
//檢查音頻輸出設備是否能播放指定的音頻文件
if(waveOutOpen(&hWaveOut,DevsNum,lpFormat,NULL,NULL,CALLBACK_NULL)!=0)
{
//Failed to OPEN the wave out devices
}
//准備待播放的數據
pWaveOutHdr.lpData =(HPSTR)lpData;
pWave

OutHdr.dwBufferLength =m_WaveLong;
pWaveOutHdr.dwFlags =0;
if(waveOutPrepareHeader(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0)
{
//Failed to prepare the wave data buffer
}
//播放音頻數據文件
if(waveOutWrite(hWaveOut,&pWaveOutHdr,sizeof(WAVEHDR))!=0)
{
//Failed to write the wave data buffer
}
//關閉音頻輸出設備,釋放內存
waveOutReset(hWaveOut);
waveOutClose(hWaveOut);
LocalUnlock(m_hFormat);
LocalFree(m_hFormat);
delete [] lpData;
說明:1)以上使用的音頻設備和聲音文件操作函數的聲明包含在mmsystem.h頭文件中,因此在程序中必須用#include "mmsystem.h"語句加入頭文件。同時在編譯時要加入動態連接導入庫winmm.lib,具體實現方法是從Developer Studio的Project菜單中選擇Settings,然後在Link選項卡上的Object/Library Moles控制中加入winmm.lib。2)在pWaveOutHdr.lpData中指定不同的數據,可以播放音頻數據文件中任意指定位置的聲音。3) 以上程序均在VC++6.0中調試通過,在文中省略了對錯誤及異常情況的處理,在實際應用中必須加入。
四.結論
在VC++中可以根據應用需要採用不同的方法播放聲音文件。簡單應用可以直接調用聲音播放函數。第二種方法可以把聲音作為資源加入可執行文件中。如果在播放之前要對聲音數據進行處理,可用第三種方法。

參考書目:
1. 美 Paul Perry 陳向群 等譯《多媒體開發指南》 清華大學出版社
2. 美 Peter Norton, Rob McGregor 孫鳳英 等譯《MFC開發Windows95/NT4應用程序》 清華大學出版社 1998
3. 周敬利 《多媒體音效卡技術及應用》 電子工業出版社 1998

❼ 如何用C語言播放指定目錄下的MP3文件格式的音樂,要代碼實現,可以是簡單的代碼,但必須要能夠實現哈。

#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "winmm.lib")

int main()
{
mciSendString("open \"C:\\我們的愛.mp3\" alias file", NULL, 0, NULL);
mciSendString("play file", NULL, 0, NULL);
return 0;
}
/*
不是我寫得 在網上找的...這個程序 主要就是call mciSendString函數, 好像沒什麼參考意義, 因為如何解碼是別人寫好的... 你想寫解碼mp3的函數 不可能用簡單代碼的
*/

❽ C語言編寫一個播放器,只要求播放mp3文件即可, 要求調用 解碼器 ,解碼器網上找一個就可以。

C++Builder的MedianPlayer控制項很方便。可以播放MP3和AVI。

❾ 誰有mp3的編碼解碼原理和c語言的解碼函數或解碼器

LAME是目前最好的MP3編碼引擎。LAME(mitiok.ma.cx)編碼出來的MP3音色純厚、空間寬廣、低音清晰、細節表現良好,它獨創的心理音響模型技術保證了CD音頻還原的真實性,配合VBR和ABR參數,音質幾乎可以媲美CD音頻,但文件體積卻非常小。對於一個免費引擎,LAME的優勢不言而喻。
這是一個開源的C++的MP3的編解碼器
http://mitiok.ma.cx/

❿ 學習MP3編解碼,C語言

細說明:c語言編寫的mp3解碼器,用於對於mp3格式音頻的解碼。-c language mp3... [mp3編解碼源程序及原理.rar] - 關於mp3演算法的.