音频开发基本知识总结
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();
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();
相关文章推荐
- Android NDK:在Android Studio下的基本开发步骤和基础知识点总结
- Discuz二次开发基本知识总结
- Android Multimedia框架总结(十七)音频开发基础知识
- Office控件开发总结-Office 开发基本知识
- Discuz二次开发基本知识总结
- Office控件开发总结-Office 开发基本知识
- Discuz二次开发基本知识总结
- Android Multimedia框架总结(十七)音频开发基础知识
- [置顶] Android Multimedia框架总结(十七)音频开发基础知识
- 关于.net开发常见基本知识总结(每日更新)
- 【Objective-C】01-学习iOS开发前期知识积累之C语言知识大总结
- python基本知识总结
- Zigbee网络基本知识小总结
- 微信开发的基本知识
- 一些基本的项目开发规范.慢慢总结中..
- Oracle PL/SQL开发利器-Toad应用总结(一)-PL/SQL Program基本编写、调试
- Android开发遇到的问题和小知识总结(不断更新中)
- Keil C51开发系统基本知识-2
- ios 基本知识总结(一)
- 校招面试一账通java开发——知识总结