当前位置:首页 » 编程语言 » 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算法的.