2016-01-25 22 views
0

我正在創建一個應用程序來播放音頻文件(WAV)。 播放效果很好,我做了一個小功能,通過方法audioInputStream做出X(秒)的前進「跳躍」,這也很完美。帶有負值的AudioInputStream.skip

我的問題是實現向後「跳躍」X(秒)。我再次使用負號的skip()方法,它的工作原理。但是,然後音頻文件不讀取文件末尾,我在最後丟失X(秒),我的播放停止,我的參考audioInputStream.read返回-1,就好像我的播放已完成,但實際上沒有。

+0

你可以發佈一些代碼? – gpasch

+0

您可能會發現[this](http://stackoverflow.com/questions/1267488/play-wav-file-backward)答案有幫助。 – Lemmmy

+0

謝謝你的回答。但是,在開始進行上述處理之前,給定頁面的代碼會完全加載音頻文件。對於小型音頻文件,不會造成問題,但對於較大的文件,處理時間會過長。 – Lorenzo

回答

0

這裏是我的代碼示例:

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