我最近问了一个关于控制 Java 音频剪辑音量的问题,有人建议我尝试 JMF。由于我使用的是旧的 JVM (1.4) 并且只对播放 WAV 文件感兴趣,因此 JMF 是一个完美的解决方案,并且大大简化了在我的应用程序中加载、播放和控制音频剪辑音量的代码。
但我无法按需停止剪辑。它看起来像 call 一样简单player.stop()
,但stop()
似乎在玩家完成游戏之前一直阻塞。这是一个简单的代码示例:
Player p = Manager.createRealizedPlayer( f.toURI().toURL() );
p.start();
System.out.println( "Player playing" );
Thread.sleep( 1000 );
System.out.println( " Clip is at time: " + p.getMediaTime().getSeconds() );
p.stop();
System.out.println( " Clip is at time: " + p.getMediaTime().getSeconds() );
这会产生如下输出:
Player playing
Clip is at time: 0.8591836730000001
Clip is at time: 3.227619047
我预计第二次阅读的时间与第一次相同或仅稍晚于第一次。(或者可能已经重置为 0 或其他东西。)我也尝试过p.setStopTime( p.getMediaTime() )
. 这会按时停止剪辑,但会在停止之前播放片刻的失真,这是不可取的。
谷歌搜索让我觉得其他人没有这个问题,而且很难找到选择。这可能是一个缓冲问题还是我错过了其他东西?非常感谢您提供的任何见解。
详细信息:我正在使用(并且无法更改)JVM 1.4.2 和 JMF 2.1.1。我所有的 WAV 文件只有 1-10 秒长。