编写多格式音乐播放器(扫盲)

来源:互联网 发布:怎么才能投诉淘宝卖家 编辑:程序博客网 时间:2024/05/22 10:39

考试考完后决定把智能播放器重新写一遍,要能支持更多格式(包括wav、MP3、wma、flac、ape等常见的格式),用新的智能算法。于是就不能用MCI接口来做简单的编程了,就必须用到第三方解码器,这个过程是曲折的,花了我一周的时间才写出能够解码播放上述格式的音乐播放器,而智能算法现在还没有实现。。在此把这方面编程的入门知识写下来,希望能帮助某些像我当初一样的人。万事开头难,真的是这样子的,因此我也把开头的那部分写下来,很多技术实现都被我隐藏了,本文只是做一个基本的扫盲,有任何问题都可以留言相问。

 

   音频播放的流程如果是无压缩的波形文件,直接将其读入声卡就可以自动的播放了(如果有的声卡能够支持硬件解码,或许也能直接播放某些格式的音乐,但这一点我不太了解^_^),如果是经过编码的文件格式,比如MP3flac等格式的文件,就必须先软解码成波形数据,然后再送入声卡播放。以你此,要编一个windowslinux等操作系统下的音频播放器,一般有以下两个流程:解码à播放。(刚开始编播放器的时候这一点都不知道,囧,于是面对那些解码库无从下手浪费了很多时间)。如果有开源的解码库,要做解码工作应该不难,比如MP3就有mpg123解码器,flacape也都有相应的开源解码器,这些只要在网上搜一下都能找到它们的开源官网。用来播放的技术似乎也不少,我知道的就有directsoundsdl,它们负责将解码后的数据播放。

 

采样率: 采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,单位用赫兹(Hz)来表示。采样频率的倒数是采样周期(也称为采样时间),它表示采样之间的时间间隔。(截取自百度百科)

补充:也叫频率

音乐文件中常用的采样率为4410048000.(正常人耳能听到的范围为20HZ-20kHZ,根据抽样定理,采样率必须设置在40k以上,但由于A/D转换与D/A转换中的滤波的缘故,常用的采样率设置为44100就能较好保留较为完整的音乐信息了,CD就是用这个采样率,但这样采样率的原始声音数字信息是很大的)

正常的播放速度等于采样率

 

    比特:也叫采样精度。声音波形振幅的大小用多少比特位来表示,就有多少比特。音乐常见的比特为16bits。

 

声道每个声道记录单独的波形文件,在播放的时候,通过不同位置的扬声器播放不同的声道,从而还原一个比较真实甚至是超真实的效果。采样率、采样精度、声道就决定了一个声音数字化的基本特性,是声音数字化的最重要参数。

 

比特率: 比特率是指将数字声音由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质就越好。

补充:也叫码率

比特率代表每秒采样来的数据的大小。采样率决定多长时间采集一次,比特率除以采样率的值决定每次采样采集多大的数据

          MP3文件可以使用的比特率一般是8320kbps

 

:在数据和数字通信中,按某一标准预先确定的若干比特或字段组成的特定的信息结构。(截取自百度百科)

补充:帧是一种相对独立的信息结构,比如视频的一帧一般就是一个画面。用一定的速度刷新不断变化的画面,实际上就是一帧接着一帧播放,就形成了视频。在波形文件中很少提到帧,这一概念一般在编码的音乐文件中提到,经过编码后的数据按帧存放。

 

PCM编码PCM 脉冲编码调制Pulse Code Modulation的缩写。(又叫脉冲编码调制):数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。

在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CDDVD以及我们常见的 WAV文件中均有应用。(截取自百度百科)

补充:说白了,PCM就是一种将模拟信号转换成数字信号的编码方式,这种编码得到的音乐文件是未经压缩的波形文件。

 

WAV文件:微软开发的音乐文件格式。它的数据保存格式如下:(参考链接http://www.codeproject.com/KB/audio-video/CWave.aspx)