编写多格式音乐播放器(扫盲)
来源:互联网 发布:怎么才能投诉淘宝卖家 编辑:程序博客网 时间:2024/05/22 10:39
考试考完后决定把智能播放器重新写一遍,要能支持更多格式(包括wav、MP3、wma、flac、ape等常见的格式),用新的智能算法。于是就不能用MCI接口来做简单的编程了,就必须用到第三方解码器,这个过程是曲折的,花了我一周的时间才写出能够解码播放上述格式的音乐播放器,而智能算法现在还没有实现。。在此把这方面编程的入门知识写下来,希望能帮助某些像我当初一样的人。万事开头难,真的是这样子的,因此我也把开头的那部分写下来,很多技术实现都被我隐藏了,本文只是做一个基本的扫盲,有任何问题都可以留言相问。
音频播放的流程:如果是无压缩的波形文件,直接将其读入声卡就可以自动的播放了(如果有的声卡能够支持硬件解码,或许也能直接播放某些格式的音乐,但这一点我不太了解^_^),如果是经过编码的文件格式,比如MP3、flac等格式的文件,就必须先软解码成波形数据,然后再送入声卡播放。以你此,要编一个windows、linux等操作系统下的音频播放器,一般有以下两个流程:解码à播放。(刚开始编播放器的时候这一点都不知道,囧,于是面对那些解码库无从下手浪费了很多时间)。如果有开源的解码库,要做解码工作应该不难,比如MP3就有mpg123解码器,flac、ape也都有相应的开源解码器,这些只要在网上搜一下都能找到它们的开源官网。用来播放的技术似乎也不少,我知道的就有directsound和sdl,它们负责将解码后的数据播放。
采样率: 采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,单位用赫兹(Hz)来表示。采样频率的倒数是采样周期(也称为采样时间),它表示采样之间的时间间隔。(截取自百度百科)
补充:也叫频率。
音乐文件中常用的采样率为44100和48000.(正常人耳能听到的范围为20HZ-20kHZ,根据抽样定理,采样率必须设置在40k以上,但由于A/D转换与D/A转换中的滤波的缘故,常用的采样率设置为44100就能较好保留较为完整的音乐信息了,CD就是用这个采样率,但这样采样率的原始声音数字信息是很大的)
正常的播放速度等于采样率。
比特:也叫采样精度。声音波形振幅的大小用多少比特位来表示,就有多少比特。音乐常见的比特为16bits。
声道:每个声道记录单独的波形文件,在播放的时候,通过不同位置的扬声器播放不同的声道,从而还原一个比较真实甚至是超真实的效果。采样率、采样精度、声道就决定了一个声音数字化的基本特性,是声音数字化的最重要参数。
比特率: 比特率是指将数字声音由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质就越好。
补充:也叫码率。
比特率代表每秒采样来的数据的大小。采样率决定多长时间采集一次,比特率除以采样率的值决定每次采样采集多大的数据。
MP3文件可以使用的比特率一般是8~320kbps。
帧:在数据和数字通信中,按某一标准预先确定的若干比特或字段组成的特定的信息结构。(截取自百度百科)
补充:帧是一种相对独立的信息结构,比如视频的一帧一般就是一个画面。用一定的速度刷新不断变化的画面,实际上就是一帧接着一帧播放,就形成了视频。在波形文件中很少提到帧,这一概念一般在编码的音乐文件中提到,经过编码后的数据按帧存放。
PCM编码:PCM 脉冲编码调制是Pulse Code Modulation的缩写。(又叫脉冲编码调制):数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。
在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的 WAV文件中均有应用。(截取自百度百科)
补充:说白了,PCM就是一种将模拟信号转换成数字信号的编码方式,这种编码得到的音乐文件是未经压缩的波形文件。
WAV文件:微软开发的音乐文件格式。它的数据保存格式如下:(参考链接http://www.codeproject.com/KB/audio-video/CWave.aspx)
- 编写多格式音乐播放器(扫盲)
- API编写音乐播放器
- 使用FFmpeg编写音乐播放器
- C#编写简单音乐播放器
- Objective C编写音乐播放器
- Android Broadcast编写的音乐播放器
- java编写的音乐播放器
- 音乐播放器的编写-前台
- 音乐播放器的编写 -Flex
- 56.利用service编写音乐播放器
- 用UWP编写音乐播放器
- pygame+threading编写音乐播放器
- mid格式音乐播放
- MFC播放MP3格式音乐
- android 音乐播放器(播放,停止)
- 简易音乐播放器(本地播放)
- 音乐播放器(上)
- MediaPlayer(音乐播放器)
- COM组件初始化
- Open Scene Graph 内存管理
- 正则表达式小结
- Ext中的事件机制
- startActivityForResult用法
- 编写多格式音乐播放器(扫盲)
- list滚动条Scroll 偏移和长度计算公式总结
- input javascript 之 onclick 大全
- 学点FIX
- Tmail: 开源邮件服务器软件包
- 制作可执行的JAR文件包及jar命令详解
- EXT UI window
- 嵌入式开发管理的三大特点
- [转] SKIA结构目录