首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在JAVA中逐个播放floder中的音频

如何在JAVA中逐个播放floder中的音频
EN

Stack Overflow用户
提问于 2016-09-06 23:03:15
回答 2查看 46关注 0票数 0

我更喜欢用java用下面的代码逐个播放几个音频,然而,floder 'res‘中的所有音频都是同时播放的。

代码语言:javascript
复制
package com.company;
import java.io.*;
import sun.audio.*;
public class Main {

    public static void main(String[] args)
            throws Exception
    {
        String resPath="res/";
        File f=new File(resPath);
        File[] result=f.listFiles();
        String[] filePath=new String[result.length];
        for(int i=0;i<result.length;i++){
            filePath[i]=resPath+result[i].getName();
        }
        for(String audioPath:filePath) {

            InputStream in = new FileInputStream(audioPath);
            AudioStream audioStream = new AudioStream(in);
            AudioPlayer.player.start(audioStream);
        }

    }

}

请帮帮我。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-09-06 23:41:27

试试这个:

代码语言:javascript
复制
import java.io.File;
import java.io.IOException;

import javax.sound.sampled.*;

public class Main
{

    public static void main(String[] args)
            throws LineUnavailableException, IOException,
            UnsupportedAudioFileException, InterruptedException 
    {
        File directory = new File("res");
        AudioListener listener = new AudioListener();
        for(File file : directory.listFiles())
        {
            try(AudioInputStream stream = AudioSystem.getAudioInputStream(file); Clip clip = AudioSystem.getClip())
            {
                clip.addLineListener(listener);
                clip.open(stream);
                clip.start();
                listener.waitUntilDone(); // Wait until the file has finished playing
            }
        }
    }

    private static class AudioListener implements LineListener
    {
        @Override
        public void update(LineEvent event)
        {
            LineEvent.Type eventType = event.getType();
            if(eventType == LineEvent.Type.STOP || eventType == LineEvent.Type.CLOSE)
            {
                synchronized(this)
                {
                    notify();
                }
            }
        }

        public synchronized void waitUntilDone() throws InterruptedException
        {
            wait();
        }
    }
}

这个解决方案部分基于这篇文章:Trouble playing wav in Java

票数 0
EN

Stack Overflow用户

发布于 2016-09-07 00:03:53

也可以采用这种方式,尽管建议使用前面的答案addLineListener

代码语言:javascript
复制
String resPath="res/" ;
        File f=new File(resPath);
        File[] result=f.listFiles();
        String[] filePath=new String[result.length];
        for(int i=0;i<result.length;i++){
            filePath[i]=resPath+result[i].getName();
        }
        for(String audioPath:filePath) {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(audioPath).getAbsoluteFile());
            Clip clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            clip.start();
            while (!clip.isRunning())
                Thread.sleep(10);
            while (clip.isRunning())
                Thread.sleep(10);
            clip.close();
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39352252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档