Tag:

使用TargetDataLine从Wine中捕获声音

我写了一个小型Java应用程序用于testing目的,从Ubuntu 12.04上的混音器捕获声音。 代码工作正常,我可以捕获所有应用程序的声音,除了在Wine下运行的任何应用程序。 每当我启动我的程序,启动Wine后,对targetDataLine.read()的调用将永远阻塞 当Wine不在后台运行时,如果没有input,则正确地输出0 ,或者如果有input,则正确地输出读取的字节数。 如果我在开始Wine之前开始我的程序,声音驱动程序将无法在酒中使用。 我曾尝试使用由Alsa提供的混音器以及默认设备,相同的结果。 我可以想象,葡萄酒以某种方式lockingAlsa(无论出于何种原因),但为什么简单地调用TargetDataLine.read()会导致Wine在Wine中失败? mixerInfo[0]在我的系统btw上是默认的,并且应用程序当然总是使用oracle最新的JRE(7)在Wine之外运行。 private void readSound () { byte tempBuffer[] = new byte[10000]; int cnt = 0; Mixer.Info[] mixerInfo = AudioSystem.getMixerInfo(); System.out.println("Available mixers:"); for (int p = 0; p < mixerInfo.length; p++) System.out.println(mixerInfo[p].getName()); format = getAudioFormat(); DataLine.Info dataLineInfo = new DataLine.Info(TargetDataLine.class, format); Mixer mixer = AudioSystem.getMixer(mixerInfo[0]); try { […]