zoukankan      html  css  js  c++  java
  • JAVA按顺序播放多个wav音频

    用Java按顺序播放多个音频部件,不是同时播放。代码如下:

                List<String> files = new ArrayList<String>();
                files.add("barcode_prefix.wav");
                for (char letter : barcode.toCharArray())
                {
                    files.add(letter + ".wav");
                }
                files.add("barcode_suffix.wav");
                
                byte[] buffer = new byte[4096];
                for (String file : files)
                {
                    try
                    {
                        AudioInputStream is = AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(file));
                        AudioFormat format = is.getFormat();
                        SourceDataLine line = AudioSystem.getSourceDataLine(format);
                        line.open(format);
                        line.start();
                        while (is.available() > 0)
                        {
                            int len = is.read(buffer);
                            line.write(buffer, 0, len);
                        }
                        line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line
                        line.close();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
    

    这个我在本地播放没有问题,放到服务器上会报错:

    java.io.IOException: mark/reset not supported
    	at java.util.zip.InflaterInputStream.reset(Unknown Source)
    	at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
    	at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
    	at com.yulong.mes.winapp.form.quality.ForBatchOperationForm$PlayAudioRunnable.run(ForBatchOperationForm.java:4317)
    	at java.lang.Thread.run(Unknown Source)


    网上说要用BufferedInputStream封装一下。修改下代码确实如此:

     List<String> files = new ArrayList<String>();
                files.add("barcode_prefix.wav");
                for (char letter : barcode.toCharArray())
                {
                    files.add(letter + ".wav");
                }
                files.add("barcode_suffix.wav");
                
                byte[] buffer = new byte[4096];
                for (String file : files)
                {
                    try
                    {
                        InputStream stream = this.getClass().getResourceAsStream(file);
                        InputStream bufferedIn = new BufferedInputStream(stream);
                        
                        AudioInputStream is = AudioSystem.getAudioInputStream(bufferedIn);
                        AudioFormat format = is.getFormat();
                        SourceDataLine line = AudioSystem.getSourceDataLine(format);
                        line.open(format);
                        line.start();
                        while (is.available() > 0)
                        {
                            int len = is.read(buffer);
                            line.write(buffer, 0, len);
                        }
                        line.drain(); // **[DEIT]** wait for the buffer to empty before closing the line
                        line.close();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
    

      

  • 相关阅读:
    第二章 第二节 安装Eclipse
    windows10下成功安装docker splash及遇到问题的解决方案
    关于.net程序员面试的问题
    ajax更新时 updatepanel 更新问题
    关于分页问题解决方法
    2条路 代码生成 or 配置
    Accordion控件之仿OutLookBar
    《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇
    ERP之我见
    2009岁末之复用系统框架(B/S)
  • 原文地址:https://www.cnblogs.com/foxting/p/7207411.html
Copyright © 2011-2022 走看看