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();
                    }
                }
    

      

  • 相关阅读:
    自动控制中的泛函分析(一)
    自动控制中的泛函分析(一)
    Andrew Ng机器学习课程15
    Andrew Ng机器学习课程14(补)
    Andrew Ng机器学习课程14(补)
    关于PADS的一些概念和实用技巧(一)
    关于PADS的一些概念和实用技巧(一)
    Andrew Ng机器学习课程14
    Andrew Ng机器学习课程14
    《数学之美》之计算复杂度
  • 原文地址:https://www.cnblogs.com/foxting/p/7207411.html
Copyright © 2011-2022 走看看