Hello all, I have been attempting to build OpenJDK-11 for an ARMv7-A system using Cortex-A7 that currently runs Java 8. After resolving my build issues with the build-dev mailing list (who sent me here for this issue), I'm able to make it run on the system, but it cannot play sound and I have been unable to figure out why. Running the same java applications one after another, 8 will play sound, 11 will crash upon trying to get the source line.
Please let me know if there's any additional information I can provide that may help! I have attempted building with two different toolchains, I've used the branch at https://hg.openjdk.java.net/jdk/jdk11 as well as the one at https://github.com/openjdk/jdk11u-dev/. I've tried the server, client, and zero variants of both, with and without fastdebug enabled, and haven't made much progress with it. I've also tried with java 8 still on the system, and with deleting it entirely. I've also attempted to add the following to the sound.properties: javax.sound.sampled.Clip=com.sun.media.sound.DirectAudioDeviceProvider javax.sound.sampled.Port=com.sun.media.sound.PortMixerProvider javax.sound.sampled.SourceDataLine=com.sun.media.sound.DirectAudioDeviceProvider javax.sound.sampled.TargetDataLine=com.sun.media.sound.DirectAudioDeviceProvider This is the configuration I've been using: bash configure \ --openjdk-target=arm-unknown-linux-gnueabihf \ --with-native-debug-symbols=none \ --disable-warnings-as-errors \ --with-abi-profile=arm-vfp-hflt \ --disable-ccache \ --with-build-jdk=/opt/openjdk/jdk11u-dev/build/linux-x86_64-normal-server-release/images/jdk \ --with-sysroot=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/ \ --with-toolchain-path=/opt/x-tools/arm-unknown-linux-gnueabihf/bin \ --with-x=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr \ --with-cups=/opt/sbuildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr \ --with-fontconfig=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr \ --with-freetype-lib=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/lib \ --with-freetype-include=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include \ --with-alsa=/opt/buildroot-2017.08/output/host/arm-buildroot-linux-gnueabihf/sysroot/usr \ --with-stdc++lib=dynamic \ --with-extra-cxxflags='-O2 -pipe' \ --with-extra-cflags='-O2 -pipe' \ --with-jobs=8 \ --with-jvm-variants=client Output of uname -a for this system is Linux sun6i 3.3.0 #125 SMP PREEMPT Fri Feb 5 07:04:03 CST 2021 armv7l GNU/Linux Output of java -version for 8 is # java8 -version java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) Java HotSpot(TM) Client VM (build 25.144-b01, mixed mode) Output for the newly built 11 is: # java -version openjdk version "11.0.14-internal" 2022-01-18 OpenJDK Runtime Environment (build 11.0.14-internal+0-adhoc.johnc.jdk11u-dev) OpenJDK Client VM (build 11.0.14-internal+0-adhoc.johnc.jdk11u-dev, mixed mode) The app I've been collecting information with just gets the mixers, and any data lines and prints their values, and then plays a .wav file using SourceDataLine, and again with Clip. I use -Daudio.mixer="M1 PCM [default]" because in the Java 11 build, setting it to null for the default just returns null, and it doesn't even return the "Found Audio Mixer" line. If it helps, here is the java itself: https://pastebin.com/CCfUWTTf The output is as follows for 8 and 11: Java 8 output # java8 -Daudio.mixer="M1 PCM [default]" AudioFormats SuccessBuzzer.wav Found audio mixer: M1 PCM [default] Supported Lines of default mixer (M1 PCM [default]): Mixer ClassName: com.sun.media.sound.DirectAudioDeviceProvider$DirectAudioDeviceInfo Mixer Desc: Direct Audio Device: sun7i PCM, M1 PCM, sun7i PCM Vendor: ALSA (http://www.alsa-project.org) M1 PCM [default] --- interface SourceDataLine supporting 8 audio formats, and buffers of at least 32 bytes ----- com.sun.media.sound.DirectAudioDevice$DirectSDL@873330 M1 PCM [default] --- interface Clip supporting 8 audio formats, and buffers of at least 32 bytes ----- com.sun.media.sound.DirectAudioDevice$DirectClip@19d7047 com.sun.media.sound.DirectAudioDevice@16ec8df --- interface TargetDataLine supporting 8 audio formats, and buffers of at least 32 bytes ----- com.sun.media.sound.DirectAudioDevice$DirectTDL@ec7777 Mixer Num Source Info Lines: 2 Mixer Num Target Info Lines: 1 interface SourceDataLine supporting 8 audio formats, and buffers of at least 32 bytes max buffer size: -1 min buffer size: 32 Supported Audio formats: PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, little-endian encoding: PCM_SIGNED channels: 1 frame size [bytes]: 2 sample size [bit]: 16 big endian: false line supported: true PCM_SIGNED unknown sample rate, 16 bit, mono, 2 bytes/frame, big-endian encoding: PCM_SIGNED channels: 1 frame size [bytes]: 2 sample size [bit]: 16 big endian: true line supported: true PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame size [bytes]: 4 sample size [bit]: 16 big endian: false line supported: true PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian encoding: PCM_SIGNED channels: 2 frame size [bytes]: 4 sample size [bit]: 16 big endian: true line supported: true PCM_SIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame, encoding: PCM_SIGNED channels: 1 frame size [bytes]: 1 sample size [bit]: 8 big endian: false line supported: true PCM_UNSIGNED unknown sample rate, 8 bit, mono, 1 bytes/frame, encoding: PCM_UNSIGNED channels: 1 frame size [bytes]: 1 sample size [bit]: 8 big endian: false line supported: true PCM_SIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame, encoding: PCM_SIGNED channels: 2 frame size [bytes]: 2 sample size [bit]: 8 big endian: false line supported: true PCM_UNSIGNED unknown sample rate, 8 bit, stereo, 2 bytes/frame, encoding: PCM_UNSIGNED channels: 2 frame size [bytes]: 2 sample size [bit]: 8 big endian: false line supported: true interface Clip supporting 8 audio formats, and buffers of at least 32 bytes Playing SuccessBuzzer.wav Source Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: true Clip Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: true Target Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: true Java 11 Output # java -Daudio.mixer="M1 PCM [default]" AudioFormats SuccessBuzzer.wav Found audio mixer: M1 PCM [default] Supported Lines of default mixer (M1 PCM [default]): Mixer ClassName: com.sun.media.sound.DirectAudioDeviceProvider$DirectAudioDeviceInfo Mixer Desc: Direct Audio Device: sun7i PCM, M1 PCM, sun7i PCM Vendor: ALSA (http://www.alsa-project.org) Mixer Has 0 Source Info Lines: Mixer Has 0 Target Info Lines: Playing SuccessBuzzer.wav Source Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: false Clip Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: false Target Data Lines: PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian encoding: PCM_SIGNED channels: 2 frame rate [1/s]: 22050.0 frame size [bytes]: 4 sample rate [1/s]: 22050.0 sample size [bit]: 16 big endian: false line supported: false java.lang.IllegalArgumentException: No line matching interface SourceDataLine supporting format PCM_SIGNED 22050.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian is supported. at java.desktop/javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:425) at AudioFormats.main(AudioFormats.java:77) java.lang.IllegalArgumentException: No line matching interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian is supported. at java.desktop/javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:425) at java.desktop/javax.sound.sampled.AudioSystem.getClip(AudioSystem.java:461) at AudioFormats.main(AudioFormats.java:94) On another application I've also had an error pointing to the DirectAudioDevice.java that also plays the same .wav file. Caused by: java.lang.IllegalArgumentException: Line unsupported: interface SourceDataLine at java.desktop/com.sun.media.sound.DirectAudioDevice.getLine(DirectAudioDevice.java:175) at java.desktop/javax.sound.sampled.AudioSystem.getSourceDataLine(AudioSystem.java:572) Here's aplay output for that file too in case that helps: #aplay -vvv SuccessBuzzer.wav Playing WAVE 'SuccessBuzzer.wav' : Signed 16 bit Little Endian, Rate 22050 Hz, Stereo Hardware PCM card 0 'audiocodec' device 0 subdevice 0 Its setup is: stream : PLAYBACK access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 2 rate : 22050 exact rate : 22050 (22050/1) msbits : 16 buffer_size : 8192 period_size : 2048 period_time : 92879 tstamp_mode : NONE tstamp_type : MONOTONIC period_step : 1 avail_min : 2048 period_event : 0 start_threshold : 8192 stop_threshold : 8192 silence_threshold: 0 silence_size : 0 boundary : 1073741824 appl_ptr : 0 hw_ptr : 0 Max peak (4096 samples): 0x0000095f ## 7% Max peak (4096 samples): 0x00001a62 ##### 20% Max peak (4096 samples): 0x00001b1c ##### 21% Max peak (4096 samples): 0x0000182c #### 18% Max peak (4096 samples): 0x000005de # 4% Max peak (4096 samples): 0x00000451 # 3% Max peak (4096 samples): 0x000001d5 # 1% Thanks, John Cummings