JDK-4399359 : re-open #4281181 (Changing sample rate while clip is playing -> aborts)
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.sound
  • Affected Version: 1.4.0
  • Priority: P4
  • Status: Closed
  • Resolution: Cannot Reproduce
  • OS: windows_98
  • CPU: x86
  • Submitted: 2000-12-19
  • Updated: 2006-09-01
  • Resolved: 2006-09-01
Related Reports
Relates :  
Description
jerry.barnes@eng 2001-02-21
This bug shows up in SQE testing as well.
Simply change sample rate while a clip is playing and the application will crash and the message regarding "An unexpected exception has been detected in native code outside the VM" is displayed.
This bug is a block to reliability testing.


Name: krC82822			Date: 12/19/2000


orig synopsis:  "Bug #4281181 test program doesn't work"

19 Dec 2000, eval1127@eng -- once the test program is altered
to run without the noted exception, it fails with an
"unexpected exception...outside the VM" 
(under both 1.3.0 and merlin-beta45)
Thus, this may be a runtime/HS issue, not a classes_sound issue, per se
------------------

user's submission:

java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)

I had some problems with the SAMPLE_RATE control, so I entered the sample
program at the bottom of bug #4281181.  The sample program does not work.
Specifically, it fails with this stack trace:

java.lang.IllegalArgumentException: This method should not have been invoked!
        at com.sun.media.sound.MixerClip.implOpen(Unknown Source)
        at com.sun.media.sound.AbstractDataLine.open(Unknown Source)
        at com.sun.media.sound.AbstractDataLine.open(Unknown Source)
        at SoundTest.main(SoundTest.java:24)

The problem is that the Clip.open() method is being called with no parameters.
It should read "Clip.open(ais)".

I am reporting this as a bug because the error message is not helpful, even
though the semantics of the test program are wrong.  Also, it is sort of a
"metabug" since the bug database has a bug :)

---------------

19 Dec 2000, eval1127@eng -- with 1.3.0, using the "new test" at the
bottom of bug # 42811 (with "Bug4281181" substituted for
"SoundTest" classname):

java.lang.IllegalArgumentException: This method should not have been invoked!
        at com.sun.media.sound.MixerClip.implOpen(MixerClip.java:457)
        at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:87)
        at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:383)
        at Bug4281181.main(Bug4281181.java:21)

The reason this compiles is because open() is valid in superinterface Line.

Replacing open() with open(ais) plays the sound, but then aborts with:

# # An unexpected exception has been detected in native code outside the VM.# 
Program counter=0xfe0cf488
#
# Problematic Thread: prio=10 tid=0x1c5930 nid=0xc runnable 
#
Abort

-------------

With merlin(1.4) beta 45, the .wav plays longer, but the program still aborts:

% java -version
java version "1.4.0beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0beta-b45)
Java HotSpot(TM) Client VM (build 1.4beta-B45, mixed mode)

% javac -d . Bug4281181.java

% java Bug4281181 drums.wav
drums.wav
# # An unexpected exception has been detected in native code outside the VM.#
Program counter=0xfaada890
#
# Problematic Thread: prio=10 tid=0x23a130 nid=0xc runnable 
#
Abort




     1  import javax.sound.sampled.*;
     2  import java.io.File;
     3
     4  public class Bug4281181  {
     5      public static void main(String args[]) {
     6          if (args.length != 1) {
     7              System.out.println("Usage : java Bug4281181 foobar.wav");
     8              System.exit(0);
     9          }
    10          try {
    11              File file = new File(args[0]);
    12              System.out.println(file);
    13              AudioInputStream ais = AudioSystem.getAudioInputStream(file);
    14              AudioFormat format = ais.getFormat();
    15              DataLine.Info info = new DataLine.Info(
    16                                        Clip.class,
    17                                        format,
    18                                        ((int) ais.getFrameLength() *
    19                                            format.getFrameSize()));
    20              Clip clip = (Clip) AudioSystem.getLine(info);
    21              clip.open();
    22              FloatControl rateControl =
    23                  (FloatControl) clip.getControl(FloatControl.Type.SAMPLE_RATE);
    24              while(true) {
    25                  clip.stop();
    26                  clip.setFramePosition(0);
    27                  clip.start();
    28                  for(float frq = 22000; frq < 44100; frq = frq + 100) {
    29                      try {
    30                          Thread.currentThread().sleep(20);
    31                      } catch (Exception e) {break;}
    32                      rateControl.setValue(frq);
    33                  }
    34              }
    35          } catch (Exception ex) { ex.printStackTrace(); }
    36      }
    37  }

(Review ID: 110294) 
======================================================================

Comments
EVALUATION could not reproduce (with 1.4, 1.4.2, 1.5, 1.6)
01-09-2006

WORK AROUND Name: krC82822 Date: 12/19/2000 Don't enter this test program :) ======================================================================
11-06-2004

EVALUATION ###@###.### 2001-07-26 Not nice, but not critical. Fix for Tiger.
26-07-2001