我正在创建一个应用程序来播放音频文件(WAV)。
播放效果非常好,我做了一个小功能,即通过skip()audioInputStream方法将X向前“跳跃”(秒),这也很完美。

我的问题是要实现向后的“跨越” X(秒)。我再次使用带有负数的skip()方法,它有效。但是然后音频文件无法读取文件的末尾,我在末尾丢失了X(秒),我的播放停止了,并且我的引用audioInputStream.read返回-1,就好像我的播放已完成,但实际上并未完成。

最佳答案

这是我的代码示例:

while ((((bytesRead = this.audioInputStream.read(audioDataFull, 0, audioDataFull.length)) != -1) && (!this.leaveThread))) {
     line.write(audioDataFull, 0, bytesRead);
     this.nb++;
     while (this.audioWav.isPause()) {
        if (test) {
           try {
              this.audioInputStream.skip((long) -(this.audioInputStream.getFormat().getSampleRate()
                    * (this.audioInputStream.getFormat().getSampleSizeInBits() / 8) * TraitementXML.tmpXml.getBufferRelecture()));
              test = false;
           } catch (final Exception e) {
              this.audioInputStream.skip(-(this.nb * bytesRead));
              this.nb = 0;
              test = false;
           }
        }
        try {
           Thread.sleep(1000);
        } catch (final InterruptedException e) {
           logger.error(e.getMessage(), e);
        }
     }
  }

关于java - 带有负值的AudioInputStream.skip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34996880/

10-11 00:06