1、MP3是一个数据压缩格式;
2、它丢弃掉脉冲编码调制(PCM)音频数据中对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了小得多的文件大小;
3、MP3音频可以按照不同的位速进行压缩,提供了在数据大小和声音质量之间进行权衡的一个范围。MP3格式使用了混合的转换机制将时域信号转换成频域信号。
4、32波段多相积分滤波器(PQF);
5、36或者12 tap 改良离散余弦滤波器(MDCT);每个子波段大小可以在0...1和2...31之间独立选择;
6、MP3不仅有广泛的用户端软件支持,也有很多的硬件支持比如便携式媒体播放器(指MP3播放器)DVD和CD播放器。
WMA格式:
WMA的全称是Windows Media Audio,是微软力推的一种音频格式。WMA格式是以减少数据流量但保持音质的方法来达到更高的压缩率目的,其压缩率一般可以达到1:18,生成的文件大小只有相应MP3文件的一半。这对只装配32M的机型来说是相当重要的,支持了WMA和RA格式,意味着32M的空间在无形中扩大了2倍。此外,WMA还可以通过DRM(Digital Rights Management)方案加入防止拷贝,或者加入限制播放时间和播放次数,甚至是播放机器的限制,可有力地防止盗版。
WMA 7之后的WMA支持证书加密,未经许可(即未获得许可证书),即使是非法拷贝到本地,也是无法收听的。同时,微软公司开始时宣称的:同文件比MP3体积小一倍而音质不变,也得到了兑现。事实上,这个说法,仅仅适用于低比特率的情况,另外,微软公司在WMA 9大幅改进了其引擎,实际上几乎可以在同文件同音质下比MP3体积少1/3左右,因此非常适合用于网络串流媒体及行动装置。
在高位元率的渲染能力低下,同音源的一个320kbps的MP3与比较192kbps的WMA相比,音质和渲染力很容易分别出是前者较优。与MP3相同,WMA也是有损数据压缩的档案格式,对于有更高要求的用户来说WMA并不是一个适合的格式。(9.0版本支持无损压缩)此外WMA也与MP3一样同为有专利版权的档案格式。支持的装置需要购买使用版权。
wma格式和avi格式,mp4格式是一样的,它是有声音有图片的。但mp3不支持avi。mp4格式的只支持wma。
二.MP3格式与PCM格式的编码/解码/合成
MP3格式与PCM格式编码/解码/合成,由于转码效率来说C代码的速度比Java代码的效率高,所以采用JNI技术,实现具体的代码是由C代码完成的。
1. MP3格式与PCM格式编码/解码/合成的步骤如下:
Java代码调用步骤:
(1).需要在Libs下面导入Libmad.so库文件
注意: 如需修改so库名称,需要在jni源码中的Android.MK配置文件中进行修改.
(2).加载本地so库文件到内存中
static {
System.loadLibrary("mad");
}
|
public native static void close();
|
public native static int decodeMp3ToPCM(String mp3File, String mp3PCM);
public native static int decodeMp3ToPCM2(String mp3File, String mp3PCM);
|
public native static int mix2PCMToPCM2(String sourcePCM, String mp3PCM,String mixPCM);
|
public native static int convert(String input, String output, int bufferSize);
|
int lead = AudioMp3AndMp3Mix.decodeMp3ToPCM2(LeadMusicMp3, LeadMusicPcm);
|
int r = AudioMp3AndMp3Mix.mix2PCMToPCM2(BackPcmPath, LeadMusicPcmPath, LeadMusicPcmMixPath);
|
/**
* 录制频率,单位hz,能实例化AudioRecord对象的时候,会出错。我开始写成11025就不行。这取决于硬件设备
* 设置音频采样率,44100是目前的标准,但是某些设备仍然支持22050,16000,11025
*/
private int sampleRateInHz = 44100;
|
/**
* 设置音频的录制的声道CHANNEL_IN_STEREO为双声道,CHANNEL_CONFIGURATION_MONO为单声道
*/
private int channelConfig = AudioFormat.CHANNEL_IN_STEREO;
|
/**
* 音频数据格式:PCM 16位每个样本。保证设备支持。PCM 8位每个样本。不一定能得到设备支持。
*/
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
|
int bufferSize = AudioTrack.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
|
int rs = AudioEncodeAndDeCode.convert(LeadMusicPcmMixPath, LeadMusicMp3MixPath, bufferSize);
|
public void MixDealVideo() {
new Thread() {
public void run() {
try {
Movie countVideo = MovieCreator.build(Videomp4);
MP3TrackImpl MP3Track = new MP3TrackImpl(
new FileDataSourceImpl(MusicMP3));
countVideo.addTrack(MP3Track);
{
Container out = new DefaultMp4Builder()
.build(countVideo);
FileOutputStream fos = new FileOutputStream(new File(
ResourceMp4));
out.writeContainer(fos.getChannel());
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
};
}.start();
}
|