封装AudioTrack
2014-04-01 08:26
141 查看
public class MyAudioTrack {
int mFrequency; // 采样率
int mChannel; // 声道
int mSampBit; // 采样精度
AudioTrack mAudioTrack;
public MyAudioTrack(int frequency, int channel, int sampbit){
mFrequency = frequency;
mChannel = channel;
mSampBit = sampbit;
}
public void init(){
if (mAudioTrack != null){
release();
}
// 获得构建对象的最小缓冲区大小
int minBufSize = AudioTrack.getMinBufferSize(mFrequency,
mChannel,
mSampBit);
// STREAM_ALARM:警告声
// STREAM_MUSCI:音乐声,例如music等
// STREAM_RING:铃声
// STREAM_SYSTEM:系统声音
// STREAM_VOCIE_CALL:电话声音
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
mFrequency,
mChannel,
mSampBit,
minBufSize,
AudioTrack.MODE_STREAM);
// AudioTrack中有MODE_STATIC和MODE_STREAM两种分类。
// STREAM的意思是由用户在应用程序通过write方式把数据一次一次得写到audiotrack中。
// 这个和我们在socket中发送数据一样,应用层从某个地方获取数据,例如通过编解码得到PCM数据,然后write到audiotrack。
// 这种方式的坏处就是总是在JAVA层和Native层交互,效率损失较大。
// 而STATIC的意思是一开始创建的时候,就把音频数据放到一个固定的buffer,然后直接传给audiotrack,
// 后续就不用一次次得write了。AudioTrack会自己播放这个buffer中的数据。
// 这种方法对于铃声等内存占用较小,延时要求较高的声音来说很适用。
mAudioTrack.play();
}
public void release(){
if (mAudioTrack != null){
mAudioTrack.stop();
mAudioTrack.release();
}
}
public void playAudioTrack(byte []data, int offset, int length){
if (data == null || data.length == 0){
return ;
}
try {
mAudioTrack.write(data, offset, length);
} catch (Exception e) {
// TODO: handle exception
Log.i("MyAudioTrack", "catch exception...");
}
}
public int getPrimePlaySize(){
int minBufSize = AudioTrack.getMinBufferSize(mFrequency,
mChannel,
mSampBit);
return minBufSize * 2;
}
}
int mFrequency; // 采样率
int mChannel; // 声道
int mSampBit; // 采样精度
AudioTrack mAudioTrack;
public MyAudioTrack(int frequency, int channel, int sampbit){
mFrequency = frequency;
mChannel = channel;
mSampBit = sampbit;
}
public void init(){
if (mAudioTrack != null){
release();
}
// 获得构建对象的最小缓冲区大小
int minBufSize = AudioTrack.getMinBufferSize(mFrequency,
mChannel,
mSampBit);
// STREAM_ALARM:警告声
// STREAM_MUSCI:音乐声,例如music等
// STREAM_RING:铃声
// STREAM_SYSTEM:系统声音
// STREAM_VOCIE_CALL:电话声音
mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
mFrequency,
mChannel,
mSampBit,
minBufSize,
AudioTrack.MODE_STREAM);
// AudioTrack中有MODE_STATIC和MODE_STREAM两种分类。
// STREAM的意思是由用户在应用程序通过write方式把数据一次一次得写到audiotrack中。
// 这个和我们在socket中发送数据一样,应用层从某个地方获取数据,例如通过编解码得到PCM数据,然后write到audiotrack。
// 这种方式的坏处就是总是在JAVA层和Native层交互,效率损失较大。
// 而STATIC的意思是一开始创建的时候,就把音频数据放到一个固定的buffer,然后直接传给audiotrack,
// 后续就不用一次次得write了。AudioTrack会自己播放这个buffer中的数据。
// 这种方法对于铃声等内存占用较小,延时要求较高的声音来说很适用。
mAudioTrack.play();
}
public void release(){
if (mAudioTrack != null){
mAudioTrack.stop();
mAudioTrack.release();
}
}
public void playAudioTrack(byte []data, int offset, int length){
if (data == null || data.length == 0){
return ;
}
try {
mAudioTrack.write(data, offset, length);
} catch (Exception e) {
// TODO: handle exception
Log.i("MyAudioTrack", "catch exception...");
}
}
public int getPrimePlaySize(){
int minBufSize = AudioTrack.getMinBufferSize(mFrequency,
mChannel,
mSampBit);
return minBufSize * 2;
}
}
相关文章推荐
- 封装 关 键字 :public,protected,private 封装相关函数:__set() , __get()
- C++封装常用对象和对头文件探索
- 使用内省完成JavaBean到集合的封装
- js封装包
- c++学习笔记之封装篇(上)
- Java学习笔记(3): 对象封装
- mkv 是种封装 类似药品胶囊 capsule 里面装的是视频编码后的数据 youknow!
- ios-数据库-sqlite-数据库得封装(自己写得,有很多不严谨)最后还有一个单例得实现
- 基于Java实现的简单且通用的分页实现封装 <Pagiation>
- mybatis框架的进一步封装
- Android中TextView文本高亮和点击行为的封装方法
- bootstrap3-dialog:更强大、更灵活的模态框(封装好的模态框)
- 一个基于 EasyUI 的前台架构(3)封装操作Tabs的JS代码
- ASP.NET封装类:链接数据库
- 1.3 封装
- Volley的使用(三):Volley与Activity的联动 + Volley的二次封装
- 使用DbUtils对JDBC封装实现面向实体查询
- tp5 封装微信APP、JSAPI预支付信息
- 在ios iphone编程中使用封装的NSLog来打印调试信息
- Java类的特点——封装