J2me Player,一个接一个地播放 MP3 文件

Posted

技术标签:

【中文标题】J2me Player,一个接一个地播放 MP3 文件【英文标题】:J2me Player, Play MP3 Files One After The Other 【发布时间】:2011-09-19 19:20:53 【问题描述】:

我无法一个接一个地播放 MP3 文件,当一个文件播放完另一个文件需要开始播放时。我只能开始播放 1 个文件,当我输入代码来启动下一个文件时,它什么也不做。由于某些原因,我不能在文件期间使用thread.sleep()。有没有其他方法可以做到这一点?

//this is the basic code..
playq(String fname)
pl =  Manager.createPlayer(stream,"audio/mpeg");
pl.realize();

pl.prefetch();

pl.start();

// what should i use here?? pls i don't want to use thread.sleep..
playagain(fname);

void playagain(String fname)
        try 

    pl.stop();
    pl.deallocate();
   pl.close();

 catch (Exception ex) 
 //change file name and stream and..
        playq(mp3f);
    

【问题讨论】:

【参考方案1】:

您的代码应该尝试从 catch 块播放代码 - 一方面,只有在出现异常时才会调用它生成(您通常也不应该笼统地捕捉Exception - 使用更具体的东西)。

你确定你不能使用Thread.sleep()吗?当然,无论如何您都不会真的想要(例如,如果用户可以暂停剪辑...)。

相反,请考虑使用PlayerListener 接口,并监听END_OF_MEDIA 事件。

一个非常基本的(例如,这没有经过测试,还需要更多的工作)示例:

public class PlayerRunner implements PlayerListener 

    private final String[] songFiles;
    private int songIndex = 0;

    public PlayerRunner(String[] songs) 
        this.songFiles = songs;
    

    public void start() 
        playerUpdate(null, null, null);
    

    // This method is required by the PlayerListener interface
    public void playerUpdate(Player player, String event, Object eventData) 
        // The first time through all parameters will be blank/null...
        boolean nextSong = (event == null);
        if (event == PlayerListener.END_OF_MEDIA) 
            player.stop();
            player.dallocate();
            player.close();
            nextSong = index < songIndex.length;
        

        if (nextSong) 
            String fileName = songFiles[index++];
            if (fileName != null) 
                Player pl = Manager.createPlayer(fileName, "audio/mpeg");
                pl.addPlayerListener(this);
                pl.realize();
                pl.prefetch();
                pl.start();
            
        
    

请注意,我没有完全正确地执行此操作 - 例如,我没有进行异常处理。另外,在不了解您的情况的情况下,我不知道还有什么需要担心的。这应该只是一个简单的答案,让您开始了解您应该去哪里。

(另外,我从未使用过 JME 的媒体播放器,所以我不知道关于 GC 的任何警告等)。

【讨论】:

你是如何在 Java ME 中使用 List&lt;String&gt; 的? winces 我说我从来没有搞砸过 Java ME,这说明了。更改为使用数组列表。

以上是关于J2me Player,一个接一个地播放 MP3 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 播放多个声音(一个接一个)

如何遍历歌曲列表并一个接一个地播放

Windows Phone 8 可以播放 WAV 文件但不能播放 MP3

Web:如何无延迟地一个接一个地播放音频文件?

如何通过 J2ME 中的扬声器播放音频

C++:如何在visual studio控制台应用程序中使用windows media player播放和暂停mp3文件?