Android实现即时音效和背景音乐(整理自用)
来源:互联网 发布:网络用语 看法 编辑:程序博客网 时间:2024/06/05 06:37
Activity page1;
private static MediaPlayer mp = null; // 声明 MediaPlayer引用
mp = new MediaPlayer();
try {
AssetFileDescriptor fileDescriptor = page1.getAssets().openFd(
media_mp3);// assets与 res 平级
mp.setDataSource(fileDescriptor.getFileDescriptor(),
fileDescriptor.getStartOffset(),
fileDescriptor.getLength());
mp.prepare();
} catch (Exception e) {
MyDialog e_msg = MyDialog.newInstance("错误", "录音加载错误!\r\n" + e);
e_msg.show(page1.getFragmentManager(), "");
}
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {// 播放完毕监听事件
@Override
public void onCompletion(MediaPlayer mp1) {
btn2.setText("播放");
mp.stop();
mp.release();
mp = null;
}
});
2、播放即时音乐
SoundPool sp; // soundpool对象
HashMap<Integer, Integer> hm; // 存放声音文件
int currStreamId; // 当前播放音频文件ID
// 初始化声音池
@SuppressLint("UseSparseArrays") @SuppressWarnings("deprecation")
private void initSoundPool() {
// 创建 SoundPool 对象
sp = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
hm = new HashMap<Integer, Integer>();
// 加载声音文件 并且设置为 ID=1(1号声音)放入 hm 中
hm.put(1, sp.load(this, R.raw.backroad, 1));// raw 位于 res 目录下
}
// 播放声音
protected void playSound(int sound, int loop) {// sound 声音 ID=1,loop 0不循环,1循环
// 获取 AudioManager 引用
AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
// 获取当前音量
float streamVolumeCurrent = am
.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获取系统最大音量
float streamVolumeMax = am
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 计算播放音量
float volume = streamVolumeCurrent / streamVolumeMax;
// 调用 SoundPool 的 play 方法播放声音文件
currStreamId = sp.play(hm.get(sound), volume, volume, 1, loop, 1.0f);
}
sp.stop(currStreamId);
2) 如何设置要播放的文件:
MediaPlayer要播放的文件主要包括3个来源:
a. 用户在应用中事先自带的resource资源
例如:MediaPlayer.create(this, R.raw.test);
b. 存储在SD卡或其他文件路径下的媒体文件
例如:mp.setDataSource("/sdcard/test.mp3");
c. 网络上的媒体文件
例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");
MediaPlayer的setDataSource一共四个方法:
setDataSource (String path)
setDataSource (FileDescriptor fd)
setDataSource (Context context, Uri uri)
setDataSource (FileDescriptor fd, long offset, long length)
其中使用FileDescriptor时,需要将文件放到与res文件夹平级的assets文件夹里,然后使用:
AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");
m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());
来设置datasource
- Android实现即时音效和背景音乐(整理自用)
- 背景音乐和音效
- Android 即时音效
- Android 即时音效SoundPool
- Cocos2d-x背景音乐和音效
- Cocos2d-x初入学堂(15)-->背景音乐和音效
- cocos2d-x SimpleGame(5)如何播放背景音乐和音效
- cocos2d-x学习笔记(6)背景音乐和音效
- 关于cocos2dx的背景音乐和音效(1)
- 关于cocos2dx的背景音乐和音效(2)
- 关于cocos2dx的背景音乐和音效(3)
- Android中播放即时音效
- Android 游戏开发--即时音效
- android 游戏 即时音效 未完成
- Android 按钮添加音效 + 设置背景音乐
- android 背景音乐 及音效播放工具类
- 在cocos2d中加入背景音乐和音效
- cocos2d添加背景音乐和其他音效
- 影响ABBYY FineReader 12识别质量的因素有哪些?
- mysql命令查询
- 深入理解Java:注解(Annotation)--注解处理器
- 初级程序员升中级程序员需要掌握哪些知识
- HTML5(1)__简介
- Android实现即时音效和背景音乐(整理自用)
- I/O
- memcached--PHP版demo
- 八数码
- Java equals()重写
- Linux如何自动挂载U盘
- STM32 通用定时器的定时功能 学习笔记
- strcpy与strcpy_s
- 多维数组“重塑”