2 myq 26 myq_26 于 2013.04.28 14:13 提问

不使用 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文件夹获取音频文件,我还需要动态的播放这些文件。如何实现?

1个回答

clcurie_11
clcurie_11   2013.04.28 17:40
已采纳

这个文件从你的源文件中加载一个音频文件,你应该在 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;
@Override
public 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;
    }
}
@Override
public 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");
}   }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
音乐播放完后MediaPlayer.OnCompletionListener无法调用到
在service中启动一个 子线程来播放MediaPlay 在mediaplay播放完成后用handler来通知service播放完成 将该记录删除。 具体实现   class AnalySisThread extends Thread{ @Override public void run() { // TODO Auto-generated method stub super.run
利用jquery进行音频文件播放
利用jquery进行音频文件播放
使用java播放音频文件
首先,直接上代码,此处为了简化理解,将所有异常抛出给java虚拟机 import java.applet.Applet; import java.applet.AudioClip; import java.io.File; import java.io.FileNotFoundException; import java.net.MalformedURLException; public cl
MediaPlayer onCompletion那些坑
媒体播放器, mMediaPlayer.setOnCompletionListener(this); 通过设置监听来得到播放完成的callback,官方文档是这样解释的 /** * Register a callback to be invoked when the end of a media source * has been reached during playbac
MediaPlayer播放音频讲解
MediaPlayer播放音频讲解
unity 动态播放音频 Assetstream 里
unity 动态播放音频,用 www 方法 读取StreamingAssets里的音频文件
在页面里面播放音频文件
一、注意点 1、由于浏览器兼容问题,在IE浏览器里面应该使用标签,在非IE浏览器里面应该使用标签,否则播放不了声音。 2、无论上面哪种标签,其src属性都不支持本地路径,应该使用http地址进行赋值。 3、针对音频文件名或音频文件路径中存在中文时播放不了声音的问题,其原因是tomcat配置文件中编码问题,即,需要在server.xml文件中的标签中设置URIEnconding="utf-8"
一个关于在Eclipse中播放音频文件的问题
这个问题有点无语,目前还不知道这是什么原因,因为对Eclipse不熟悉
java 实现音频文件的播放
java 实现音频文件的播放
如何在Java应用程序中播放声音文件
当前,有很多文章介绍如何在Java小程序(Applet)中播放音乐供人边浏览页面边欣赏,但对如何在应用程序(Application)中播放音乐的介绍还很少,本文简要介绍如何实现这一功能<br>。