<Sound Dev> Line unavailable exceptions still happening with openjdk when acquiring a sourcedataline

Bob Lang bob.lang at blueyonder.co.uk
Wed Mar 24 02:05:51 PDT 2010


What happens if you attempt to get a SourceDataLine like this?

    AudioFormat audioFormat = new AudioFormat (...);
    SourceDataLine sdl = AudioSystem.getSourceDataLine (audioFormat);

The above inside a try/catch of course..

Bob
--
On 24 Mar 2010, at 06:50, Paulo Levi wrote:

> Here is a testcase. Hope this can be fixed:
> 
> package util.speech;
> 
> import java.util.Iterator;
> import java.util.Locale;
> import javax.sound.sampled.AudioFormat;
> import javax.sound.sampled.AudioSystem;
> import javax.sound.sampled.DataLine;
> import javax.sound.sampled.LineUnavailableException;
> import javax.sound.sampled.Mixer;
> import javax.sound.sampled.SourceDataLine;
> import org.junit.After;
> import org.junit.AfterClass;
> import org.junit.Assume;
> import org.junit.Before;
> import org.junit.BeforeClass;
> import org.junit.Test;
> import static org.junit.Assert.*;
> 
> /**
>  *
>  * @author i30817
>  */
> public class VoiceTest {
> 
>     
> 
>     public VoiceTest() {
>     }
> 
>     @BeforeClass
>     public static void setUpClass() throws Exception {
>     }
> 
>     @AfterClass
>     public static void tearDownClass() throws Exception {
>     }
> 
>     @Before
>     public void setUp() {
>         
>     }
> 
>     @After
>     public void tearDown() {
>     }
> 
>     @Test
>     public void testDataLineAvailableAndBuggyInJDK() throws LineUnavailableException {
>         boolean failedSimpleGetLine = false;
>         AudioFormat format = new AudioFormat(44100, 16, 2, true, false);
>         SourceDataLine line = null;
>         DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
>         try {
>             line = (SourceDataLine) AudioSystem.getLine(info);
>         } catch (LineUnavailableException e) {
>             //ok, at least it says so
>             throw e;
>         }
>         try {
>             //if this fails the jdk is very buggy, since it just told us
>             //the line was available
>             line.open(format);
>         } catch (LineUnavailableException e) {
>             failedSimpleGetLine = true;
>         } finally {
>             if (line.isOpen()) {
>                 line.close();
>             }
>         }
> 
> 
> 
>         //now if this is true, test if it's possible to get a valid sourcedataline
>         //or the only bug is adquiring a sourcedataline doesn't throw a lineunavailable
>         //exception before open
>         Assume.assumeTrue(failedSimpleGetLine);
>         line = getSourceDataLine(format);
>         if (line == null) {
>             return;
>         }
> 
>         try {
>             line.open(format);
>         } catch (LineUnavailableException e) {
>             //ok then it is consistent, and there is only one bug
>             fail("Line Unavailable after being adquired");
>         } finally {
>             if (line.isOpen()) {
>                 line.close();
>             }
>         }
>         fail("line available after first test not managing to adquire it");
>     }
> 
> 
>     private SourceDataLine getSourceDataLine(AudioFormat format) {
>         try {
>             DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
>             for (Mixer.Info mi : AudioSystem.getMixerInfo()) {
>                 SourceDataLine dataline = null;
>                 try {
>                     Mixer mixer = AudioSystem.getMixer(mi);
>                     dataline = (SourceDataLine) mixer.getLine(info);
>                     dataline.open(format);
>                     dataline.start();
>                     return dataline;
>                 } catch (Exception e) {
>                 }
>                 if (dataline != null) {
>                     try {
>                         dataline.close();
>                     } catch (Exception e) {
>                     }
>                 }
>             }
>         } catch (Exception e) {
>         }
>         return null;
>     }
> }
> 
> 
> 
> On Wed, Mar 24, 2010 at 5:56 AM, Paulo Levi <i30817 at gmail.com> wrote:
> Forgot this is when using freetts, but really i expect it to happen with other programs.
> 
> 
> On Wed, Mar 24, 2010 at 5:55 AM, Paulo Levi <i30817 at gmail.com> wrote:
> This still happens on ubuntu lucid lynx with a recent jdk
> java version "1.7.0_0-icedtea"
> OpenJDK Runtime Environment (IcedTea7 1.11) (7b72-0ubuntu1~ppa1)
> OpenJDK Client VM (build 17.0-b01, mixed mode, sharing)
> 
> in the third post in this thread
> http://forums.sun.com/thread.jspa?threadID=5189363
> 
> Don't you guys test sound in linux :(
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/sound-dev/attachments/20100324/996cdf2b/attachment-0001.html 


More information about the sound-dev mailing list