‘壹’ 语音编解码的ADPCM(自适应差分PCM)
类型:Audio
制定者:ITU-T
所需频宽:32Kbps
特性:ADPCM(adaptive difference pulse code molation)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能比较好的波形编码。它的核心想法是:
①利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值;
②使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。
缺点:声音质量一般
应用领域:voip
版税方式:Free
备注:ADPCM (ADPCM Adaptive Differential Pulse Code Molation), 是一种针对16bit (或者更高?) 声音波形数据的一种有损压缩算法, 它将声音流中每次采样的 16bit 数据以 4bit 存储, 所以压缩比1:4. 而压缩/解压缩算法非常的简单, 所以是一种低空间消耗,高质量声音获得的好途径。LPC(Linear Predictive Coding,线性预测编码)类型:Audio
制定者:
所需频宽:2Kbps-4.8Kbps
特性:压缩比大,计算量大,音质不高,廉价
优点:压缩比大,廉价
缺点:计算量大,语音质量不是很好,自然度较低
应用领域:voip
版税方式:Free
备注:参数编码又称为声源编码,是将信源信号在频率域或其它正交变换域提取特征参数,并将其变换成数字代码进行传输。译码为其反过程,将收到的数字序列经变换恢复特征参量,再根据特征参量重建语音信号。具体说,参数编码是通过对语音信号特征参数的提取和编码,力图使重建语音信号具有尽可能高的准确性,但重建信号的波形同原语音信号的波形可能会有相当大的差别。如:线性预测编码(LPC)及其它各种改进型都属于参数编码。该编码比特率可压缩到2Kbit/s-4.8Kbit/s,甚至更低,但语音质量只能达到中等,特别是自然度较低。CELP(Code Excited Linear Prediction,码激励线性预测编码)类型:Audio
制定者:欧洲通信标准协会(ETSI)
所需频宽:4~16Kbps的速率
特性:改善语音的质量:
① 对误差信号进行感觉加权,利用人类听觉的掩蔽特性来提高语音的主观质量;
②用分数延迟改进基音预测,使浊音的表达更为准确,尤其改善了女性语音的质量;
③ 使用修正的MSPE准则来寻找 “最佳”的延迟,使得基音周期延迟的外形更为平滑;
④根据长时预测的效率,调整随机激励矢量的大小,提高语音的主观质量; ⑤ 使用基于信道错误率估计的自适应平滑器,在信道误码率较高的情况下也能合成自然度较高的语音。
结论:
① CELP算法在低速率编码环境下可以得到令人满意的压缩效果;
②使用快速算法,可以有效地降低CELP算法的复杂度,使它完全可以实时地实现;
③CELP可以成功地对各种不同类型的语音信号进行编码,这种适应性对于真实环境,尤其是背景噪声存在时更为重要。
优点:用很低的带宽提供了较清晰的语音
缺点:
应用领域:voip
版税方式:Free
备注:1999年欧洲通信标准协会(ETSI)推出了基于码激励线性预测编码(CELP)的第三代移动通信语音编码标准自适应多速率语音编码器(AMR),其中最低速率为4.75kb/s,达到通信质量。CELP 码激励线性预测编码是Code Excited LinearPrediction的缩写。CELP是近10年来最成功的语音编码算法。
CELP语音编码算法用线性预测提取声道参数,用一个包含许多典型的激励矢量的码本作为激励参数,每次编码时都在这个码本中搜索一个最佳的激励矢量,这个激励矢量的编码值就是这个序列的码本中的序号。
CELP已经被许多语音编码标准所采用,美国联邦标准FS1016就是采用CELP的编码方法,主要用于高质量的窄带语音保密通信。CELP(Code-Excited Linear Prediction) 这是一个简化的 LPC 算法,以其低比特率着称(4800-9600Kbps),具有很清晰的语音品质和很高的背景噪音免疫性。CELP是一种在中低速率上广泛使用的语音压缩编码方案。
‘贰’ android音视频系列(七):PCM音频单声道与双声道的相互转换
上一篇我们已经学习了PCM音频的保存格式,这一篇我们通过掌握的知识,完成PCM音频的单声道和双声道的互相转换。
首先我们把上一篇的最核心部分贴出来:
我们首先完成单声道转双声道的操作。
单声道转双声道的基本原理:
首先我录制了一个音频保存到ArrayList中:
录制的是16位的数据,所以我们每一个采样的数据会占据两位,所以在拷贝的过程桥庆中,我们也要每两位拷贝一次敏庆握:
单声道转声道的操作就完成了。
双声道转单声道的原理:
我们可以按照单声道双声道的做法,每四位取前两位或后两位的数据即可。但是这里我们换一种做法。
这里我们使用了ByteBuffer帮助我们把Byte转成Short。其中有一个很重要的坑,就是设置Byte转Short的规则:
所以我们一定要确保高低位的顺序,否则得到的Short一定是错的,经过测试,录制的音频是低位在前,所以我们修改ByteBuffer默认的高位在前的配置:
相同的原理,我们需要Byte转Int都可以借助对应的Buffer进行读取,非常的方便。
基本流程和第一种方法一样,如果是你用的java,你还可以通过位运算进行Short和Byte的转换,但是kotlin的对应的运算符却无法正确转换,具体原因还不清楚,这也是为什差梁么我使用了Buffer进行转换的原因。
只要我们掌握了PCM的保存格式,单声道和双声道的互相转换还是非常轻松的,下一篇我们来了解一下新的音频格式:WAV。
‘叁’ Android音视频系列(六):PCM音频的存储格式
我们已经了解了如何使用AudioRecord录制pcm音频,所以我们要了解pcm数据的存储格式,才能对其进行链者转换。
首先看一下图片:
以上图为例,在初始化AudioRecord的时候可以设置录制的格式:
其中最常用的是ENCODING_PCM_16BIT,在网上查看一下很多的资料,ENCODING_PCM_8BIT已经处于半废弃状态,随着科技的樱竖进步,就连小孩子的玩具播放的音频都是16位的。
另外一个参数是声道数:
双声道会以LRLRLR的格式保存左右声道的内容,组合成一个完成的样本。
从上图我们可以总结:8个比特的位置,8位单声道可以存储8个样本,8位双声道能存储个样本,16位双声道能存储4个,16位双声道只能存储2个。
今天的内容非常的简单,主要是为了下一篇做准备,下一篇我们会实际操作:pcm单声道和双声道的转换。脊唤大
‘肆’ Android 多媒体音频开发中怎么将PCM转成ADPCM
Adensoft Audio MP3 Converter
Adensoft.Audio.MP3.Converter是一款强大的音频转换工具,能将当前主流的音频格式如WAV PCM, WAV ,GSM, ADPCM, DSP ,MP2,WMA ( win Media Audio ),Ogg Vorbis,VOX ( Dialogic ADPCM ),RAW ( PCM, A-LAW, U-LAW ),MPC (MusicPack),AVI (audio track),G.721,G.723,G.726,AIFF ,AU (UNIX audio format)无损的转换成mp3(支持批量转换)。软件同时提供良好的人机界面和完整的tag编辑功能。
‘伍’ android开发中怎样实现混音
android开发中怎样实现混音,实例代码如下:
[mw_shl_code=java,true]public class MixRunnable implements Runnable {
private MixRecorder context;
/**
* AudioRecord创建参数类
*
* @author christ
*/
private static class RecorderParameter {
// 音频获取源
private static int audioSource = MediaRecorder.AudioSource.MIC;
// 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025
private static final int sampleRateInHz = 44100;
// 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道
private static final int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
// 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。
private static final int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
// 缓冲区字节大小
private static int bufferSizeInBytes;
}
// 设置运行状态
private boolean isRunning = true;
// AudioRecord对象
private static AudioRecord recorder;
// 设置MediaPlayer对象
private static MediaPlayer mediaPlayer;
// 伴奏文件
private FileInputStream accompany;
// 原唱文件
private FileInputStream original;
// 得分
private int score;
private boolean isFirst = true;
/**
* 混音评分线程的构造方法
*
* @param accompany
* :伴奏文件路径
* @param original
* :原唱文件路径
* @throws FileNotFoundException
*/
public MixRunnable(MixRecorder context, String accompany, String original) throws FileNotFoundException {
this.context = context;
this.accompany = new FileInputStream(accompany);
this.original = new FileInputStream(original);
creatAudioRecord();
mediaPlayer = new MediaPlayer();
}
@Override
public void run() {
try {
// MediaPlayer准备
mediaPlayer.reset();
mediaPlayer.setDataSource("/sdcard/111.wav");
// mediaPlayer.setDataSource(accompany.getFD());
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
isRunning = false;
}
});
mediaPlayer.prepare();
// 跳过头
accompany.read(new byte[44]);
original.read(new byte[44]);
FileOutputStream fos = new FileOutputStream(new File("/sdcard/love.raw"));
// 开始读
byte[] sourceReader = new byte[RecorderParameter.bufferSizeInBytes * 2];
short[] sourceShortArray;
short[] audioReader = new short[sourceReader.length / 4];
mediaPlayer.start();
recorder.startRecording();
while (isRunning) {
int sourceReadSize = accompany.read(sourceReader, 0, sourceReader.length);
if (sourceReadSize < 0) {
isRunning = false;
continue;
}
sourceShortArray = byteToShortArray(sourceReader, sourceReadSize / 2);
recorder.read(audioReader, 0, audioReader.length);
short[] oneSecond = mixVoice(sourceShortArray, audioReader, sourceReadSize / 2);
byte[] outStream = new byte[oneSecond.length * 2];
for (int i = 0; i < oneSecond.length; i++) {
byte[] b = shortToByteArray(oneSecond<i>);
outStream[2 * i] = b[0];
outStream[2 * i + 1] = b[1];
}
‘陆’ android如何使用fdk-aac编码库来把aac转成pcm
线性PCM就是WAV。
AAC-LC是AAC的一个规格,你下载到或者转换的这些高码率的AAC都是AAC-LC的。
扩展名是.m4a。
.aac 是aac的音频数据流,m4a是aac的一个封装方式。其内容本身是一样的。
我用s754,和e453功能是一样的。m4a和wav的我都放了,没问题,只是.aac的我还没试过。
但我相信lz没有.aac的。。因为这年头你下载到的或者转换出来的都是m4a的
‘柒’ Android中使用FFmpeg得到视频中的PCM和YUV数据
使用FFmpeg获取PCM和YUV数据的流程基本上一样的,下面就以获取YUV数据的流程为例,说明这个过程:
‘捌’ 求PCM音频文件!测试用!急急急急急!我所有的分了! 注意格式必须是.pcm的音频文件
对补充的回答:RVMB格式是网上很流行的视频格式,是经过压缩的.它的标准播放软件是Realplayer,不过如果你不想再安装软件,直接用windows自带的Mediaplayer播放的话,那就在网上搜一个名叫"阿飞的解码器"装上,就可满足当前的大多数音视频的解码问题了.你所提的这些格式都不是纯音频格式,WMV,MPG,AVI,VOB这些是属于视频类的,不是纯音频.按你说的这些文件的来源,那差别就大颂档唯了.wmv是微软公司为满足网络视频速度快、文件小的需要开发出的一种视频格式,压缩比很大,文件的个头在你提的这几种里是最小的,不过这也要看视频的原始尺寸.MPG格式也是一种压缩格式,分VCD的MPEG1(在光盘的文件显示为.DAT)和DVD的MPEG2(在光盘里显示为.VOB)两种格式,清晰度你也应该知道的。对于野培AVI这种格式嘛,就不一定了,如果说是从DV带或是一些高清摄像机采集而来的视频AVI,那就应该是最清晰的,不过嘛文件也是最大的,不过现在的视频格式,比如MP4播放器播放的视频也是AVI的,它是经过压缩的,文件大小和清晰度也就受到了蠢亏限制.音频文件如mp3,wma,ape,wav,midi等等这些格式才是纯音频,而你说的那些格式是音频和视频合成的文件.对于我所说的这些音频格式:mp3和wma都属于压缩比例较大的格式,只有wav文件是没有经过压缩的原声文件,ape是属于一种保真度很高的压缩音频文件,而midi是由混音器合成或是转换得来的音频.这几种音频格式相比之下,当然是wav这种格式的音质最好了(不过也要看录制的环境和设备),也就是CD光盘上保存的音频的原始文件格式.不过最大的缺点是文件占用的空间相对其他格式音频文件最大;ape格式文件是压缩得比较小的格式,基本上保持了WAV的原音质,损失不大,文件个头只占WAV的三分之一左右;mp3\wma格式应该是网上最流行的音频格式了,相对于WAV压缩得就相当多了.不过如果不是音乐发烧友的也可以满足听觉了,因为被压缩的部分人耳是分辨不出来的.