您的位置:首页 > 其它

音频开发基本知识总结

2018-02-12 22:08 513 查看
一、音频的基本概念
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();
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  音频