mediaplayer-不使用 OnCompletionListener() 如何动态的播放音频文件?

问题描述

不使用 OnCompletionListener() 如何动态的播放音频文件?
不使用 OnCompletionListener() 如何连续播放音频文件?
我用的下面的代码:

mp.setOnCompletionListener(new OnCompletionListener() {            @Override            public void onCompletion(MediaPlayer mp) {                // TODO Auto-generated method stub                i = i + 1;                System.out.println("""" + audio.length);                if(i < audio.length){                    img.setImageResource(image[i]);                    try {                        descriptor = getAssets().openFd(audio[i]);                        mp.reset();                        mp.setDataSource( descriptor.getFileDescriptor() descriptor.getStartOffset()descriptor.getLength());                        descriptor.close();                        mp.prepare();                        mp.start();                        xml();                    } catch (IOException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }

这里的 xml() 方法包含图像,并从assets文件夹获取音频文件,我还需要动态的播放这些文件。如何实现?

解决方案

这个文件从你的源文件中加载一个音频文件,你应该在 activity 中调用 startService()来开启这个服务,不要忘了在 manifest 文件中添加这个服务。

public class Backgroundmusic extends Service {    // Binder given to clients    private final IBinder mBinder = new LocalBinder();    // Random number generator    private final Random mGenerator = new Random();    private SoundPool soundPool;    private HashMap<Integer Integer> soundsMap;    int SOUND1=1;    int SOUND2=2;@Overridepublic void onCreate() {    // TODO Auto-generated method stub    super.onCreate();    soundPool = new SoundPool(4 AudioManager.STREAM_MUSIC 100);    soundsMap = new HashMap<Integer Integer>();    soundsMap.put(SOUND1 soundPool.load(this R.raw.baby_laugh 1));    soundsMap.put(SOUND2 soundPool.load(this R.raw.touchdown 1));}public void playSound(int sound float fSpeed) {    AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);    float volume = streamVolumeCurrent / streamVolumeMax;    soundPool.play(soundsMap.get(sound) volume volume 1 0 fSpeed);   }/** * Class used for the client Binder.  Because we know this service always * runs in the same process as its clients we don't need to deal with IPC. */public class LocalBinder extends Binder {    LocalService getService() {        // Return this instance of LocalService so clients can call public methods        return LocalService.this;    }}@Overridepublic IBinder onBind(Intent intent) {    return mBinder;}/** method for clients */public int getRandomNumber() {  return mGenerator.nextInt(100);}public void soundPlay(int index){     playSound(index 1.0f);     Log.d(""SOUND1""hi1"");}   }
时间: 2024-10-30 21:30:52

mediaplayer-不使用 OnCompletionListener() 如何动态的播放音频文件?的相关文章

mp3-jsp中audio标签播放音频文件

问题描述 jsp中audio标签播放音频文件 HTTP ""Content-Type"" 中的 ""text/html"" 不支持.媒体资源 http://youxin.telecomjs.com/audio/audio.mp3 加载失败. 解决方案 jsp 加上<!DOCTYPE HTML>了么 解决方案二: 有些浏览器默认是不支持mp3格式的,你要多设置几个source选项 解决方案三: 请问下楼主,后来你解决

音乐播放器-ios开发:使用audioqueue播放音频文件

问题描述 ios开发:使用audioqueue播放音频文件 想问下使用Audioqueue播放本地音频文件时怎样拖动其播放进度? PS:不是用系统自带的播放控件(比如avplayer,avaudioplayer,musicplayercontroller等等),而是用audioqueue自己实现.

代码-C语言 怎么播放音频文件

问题描述 C语言 怎么播放音频文件 求大神 刚学了C语言 想尝试播放音频 求助 求代码 解决方案 Windows文件夹下有一个Media文件夹,里面有很多这种波形文件,比如提示声.警报声.开机音乐等等. 解决方案二: 如果是wav那样的波形文件(Windows自带的录音机可以录制) 用PlaySound() API就可以播放. 解决方案三: 刚学了C语言,你是在什么系统下学习的?开发环境又是什么呢? Windows 系统,可以使用系统提供的 API 来完成播放:Linux 系统应该也类似吧! 如

silverlight 声音-vs2012sliverlight 播放音频文件

问题描述 vs2012sliverlight 播放音频文件 我用vs2012sliverlight 播放wma文件,按照silverlight从入门到精通 关于媒体播放mediaelement的使用,步骤一样,可是浏览器无法播放,运行时没有提示出错??? 声音文件已经添加到工程目录,MediaElement设置为"永远复制","RESOURCE" ``` xmlns="http://schemas.microsoft.com/winfx/2006/xaml

关于Window Server2008 服务器上无法播放音频文件和FLV视频文件_win服务器

在偌大的百度当中查找我所需要的资源信息,但网络上所描述的都不能解决,发生此类问题的人很多,但是都没有得到准确的解决方法!经个人各方面的尝试,其实非常简单的解决了无法播放音频文件的问题,如果各位今后也遇到此类问题,可按照我的方式处理: 若是3gp文件,在服务器IIS的MIME类型中直接添加扩展名为".3gp" MIME类型为"video/3gpp" 若是mp4文件,在服务器IIS的MIME类型中直接添加扩展名为".mp4" MIME类型为"

w l-java中播放音频文件问题,为撒播放不了?

问题描述 java中播放音频文件问题,为撒播放不了? import java.awt.*; import java.net.*; import java.awt.event.*; import java.io.*; import java.applet.*; import javax.swing.*; public class Music extends JFrame implements Runnable,ItemListener,ActionListener{ Thread thread;

ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件

原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class="MapClient.PicMusic" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx

struts2 页面能够播放音频文件

问题描述 我上传了一个音频文件在服务器上,我要在页面上能够打开这个音频文件,这个怎么实现阿 解决方案 解决方案二:<objectwidth='260'height='175'><paramname='allowscriptaccess'value='always'/><paramname='allowfullscreen'value='false'/><embedtype='application/x-shockwave-flash'src='${pageCont

Xcode模拟器中无法播放音频文件的原因分析

在本猫的Mac Mini上开发iOS app,发现当执行到播放音频的代码时,发生错误,log如下: 2015-10-05 07:22:17.122 LearnSpriteBuilder[10321:559370] 07:22:17.122 ERROR: 98: Error '!obj' trying to fetch default input device's sample rate 2015-10-05 07:22:17.122 LearnSpriteBuilder[10321:559370