音频开发基本知识总结

音频开发基本知识总结

一、音频的基本概念

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

常用的采样率有:

  * 8,000 Hz - 电话所用采样率, 对于人的说话已经足够;;  * 11,025 Hz;  * 22,050 Hz - 无线电广播所用采样率;  * 32,000 Hz - miniDV 数码视频 camcorder、DAT (LP mode)所用采样率;  * 44,100 Hz - 音频 CD, 也常用于 MPEG-1 音频(VCD, SVCD, MP3)所用采样率;  * 47,250 Hz - Nippon Columbia (Denon)开发的世界上第一个商用 PCM 录音机所用采样率;

  * 48,000 Hz - miniDV、数字电视、DVD、DAT、电影和专业音频所用的数字声音所用采样率;

2.比特率:每秒传输的比特数,单位时间内传输或处理的比特数量。比特率越高,传送的数据越大。

3.码率:单位时间内传送的数据位数,码率越高,被压缩的比例越小,音质损失越小,与音源的音质越接近。

4.帧速率:每秒刷新图片的帧数,帧速率越高,可以得到更流畅,更逼真的动画。

5.分辨率:单位长度内包含的像素点的数量。

6.位宽:也叫采样位数和采样深度,用来衡量声音波动变化的一个参数。

7.声道数:声音通道的数目。

二、常见音频格式

有损压缩:MP3、AAC、WMA、OGG、MPC

无损压缩格式:WAV、FLAC、APE、WV、TAK、TTA。

三、Android中 java 层三种音频播放方式

SoundPool适合短促且对反应速度比较高的情况(游戏音效或按键声等),

MediaPlayer适合比较长且时间要求不高的情况,比如播放mp3、aac等文件,而AudioTrack可播放解码后pcm的裸流。

使用方式

1. 先计算最小缓冲区大小

int bufferSize = AudioTrack.getMinBufferSize(16000,AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);//函数原型为static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat);

getMinBufferSize函数的第一个参数为音频采样率、第二个参数为声道数、第三个参数表示每个采样点的位数。

2. 新建AudioTrack对象

AduioTrack audioTrack= new AudioTrack(AudioManager.STREAM_MUSIC, 16000, AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);//函数原型为:  public AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat,int bufferSizeInBytes, int mode)

参数说明:

streamType:音频类型,如STREAM_ALARM、STREAM_MUSCI、STREAM_RING、STREAM_SYSTEM等;目的是可对不同类型的音频分别管理。

sampleRateInHz:采样率;

channelConfig: 声道数;

audioFormat: 采样点位数;

bufferSizeInBytes: 缓冲区大小,利用getMinBufferSize得到的值;

mode:包括MODE_STATIC和MODE_STREAM。其中MODE_STATIC表示一次性将所有音频数据传送给AudioTrack,适用于数据量小、延时要求高的音频;MODE_STREAM模式下将会通过write分多次将音频数据写到AudioTrack中,有一定的延时。

3. 开始播放

audioTrack.play();

4. 写入数据

audioTrack.write(buffer, 0, buffer.length);

5. 结束播放

audioTrack.stop();

audioTrack.release();

猜你喜欢

转载自blog.csdn.net/zhangbijun1230/article/details/82586499
今日推荐