android– 如何使用MediaPlayer同时播放多首曲目?

android– 如何使用MediaPlayer同时播放多首曲目?,第1张

概述我有8个mp3文件.我必须同时播放它(不是很接近.肯定会).我使用’AudaCity‘来控制精度.但我的代码没有给我想要的结果……(异步=30~90ms)所以,这是我的代码:(首次开始玩)publicvoidstart(){//songInfo.getMediaPlayer()-it'sarrayofMediaPlayers,sourcealreadysette

我有8个mp3文件.我必须同时播放它(不是很接近.肯定会).
我使用’AudaCity‘来控制精度.但我的代码没有给我想要的结果……(异步= 30~90 ms)
所以,这是我的代码:
(首次开始玩)

public voID start() {//songInfo.getMediaPlayer() - it's array of MediaPlayers, source already setted        for (MediaPlayer player : songInfo.getMediaPlayer()) {            try {                if (player != null) {                    player.prepare();                    player.seekTo(0);                }            } catch (Exception ex) {                ex.printstacktrace();            }               }        songInfo.getMediaPlayer()[0]                .setonCompletionListener(new OnCompletionListener() {                        @OverrIDe                        public voID onCompletion(MediaPlayer mp) {                            //code for play next setList                        }        });        resume();}

(暂停)

public voID pause() {        for (MediaPlayer player : songInfo.getMediaPlayer()) {            if (player != null)                player.pause();        }}

(暂停后恢复,开始播放(第一种方法))

public voID resume() {          int pos = songInfo.getMediaPlayer()[0].getCurrentposition();        long iTime = System.currentTimeMillis();        for (MediaPlayer player : songInfo.getMediaPlayer()) {            if (player != null) {                player.seekTo(pos + (int)(System.currentTimeMillis()-iTime));                player.start();            }        }}

如果我在第一次开始播放它会给我异步~30ms
然后在暂停/恢复后它会发挥完美.

@H_419_27@解决方法:

经过大量研究,问题得到了解决.
要同时播放多个曲目,您应该使用AsyncTask并在THREAD_POol_EXECUTOR上执行它.
这该怎么做:
线程类:

class PlayThread extends AsyncTask<MediaPlayer, VoID, VoID>{    @OverrIDe    protected VoID doInBackground(MediaPlayer... player) {        player[0].start();                  return null;    }}

媒体播放器:

MediaPlayer[] players = new MediaPlayer[5];//Then set source to each player...//...//Create objects of Thread classPlayThread[] playThreads = new PlayThread[5];for (int i = 0; i < 5; i++)    playThreads[i] = new PlayThread();//Set Media Players there and start playfor (int i = 0; i < 5; i++)    playThreads[i].executeOnExecutor(AsyncTask.THREAD_POol_EXECUTOR, players[i]);

AsyncTask只能同时执行5个线程,其他将进入队列.

SoundPool缓冲区限制为1Mb,因此根本不是解决方案.

这是非常重要的:
要同时播放更多音轨,您应该将它们混合到1个缓冲区中.
执行此 *** 作的方法:将mp3解码为pcm(以流模式转换为小缓冲区),将其混合到一个字节缓冲区中并将其放入AudioTrack进行播放.

总结

以上是内存溢出为你收集整理的android – 如何使用MediaPlayer同时播放多首曲目?全部内容,希望文章能够帮你解决android – 如何使用MediaPlayer同时播放多首曲目?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1107214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存