0
LinuxでJavaオーディオを使用する際に問題があります。これはUbuntu 14.04のOpenJDK 8です。これが結果ですJavaオーディオがLinuxでwavファイルを再生できない
import java.net.URL;
import javax.sound.sampled.*;
public class PlaySound {
public void play() throws Exception
{
// List all mixers and default mixer
System.out.println("All mixers:");
for (Mixer.Info m : AudioSystem.getMixerInfo())
{
System.out.println(" " + m);
}
System.out.println("Default mixer: " + AudioSystem.getMixer(null).getMixerInfo());
URL url = getClass().getResource("drop.wav");
Clip clip;
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
clip = AudioSystem.getClip();
System.out.println("Clip format: " + clip.getFormat());
clip.open(audioInputStream);
clip.start();
do { Thread.sleep(100); } while (clip.isRunning());
}
public static void main(String [] args) throws Exception {
(new PlaySound()).play();
}
}
::次のサンプルは、.wavファイルfrom this linkで失敗
All mixers:
PulseAudio Mixer, version 0.02
default [default], version 4.4.0-31-generic
Intel [plughw:0,0], version 4.4.0-31-generic
Intel [plughw:0,2], version 4.4.0-31-generic
NVidia [plughw:1,3], version 4.4.0-31-generic
NVidia [plughw:1,7], version 4.4.0-31-generic
NVidia [plughw:1,8], version 4.4.0-31-generic
NVidia [plughw:1,9], version 4.4.0-31-generic
Port Intel [hw:0], version 4.4.0-31-generic
Port NVidia [hw:1], version 4.4.0-31-generic
Default mixer: default [default], version 4.4.0-31-generic
Clip format: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big-endian
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453)
at PlaySound.play(PlaySound.java:22)
at PlaySound.main(PlaySound.java:29)
どうやら問題はPulseAudioはミキサーが選択されている、といくつかの理由で遊ぶことができないということです.wavファイル。
AudioSystem.getClip()
コールをAudioSystem.getClip(null)
に置き換えると、デフォルトのミキサーが選択されます。
互換性のあるミキサーが選択されていることを確認するにはどうすればよいですか?
アップデート:私は、「互換性」の形式を持っているものを見つけるまで、が利用できるミキサーをループ@Daveからの提案に続いて、私は、以下を参照してください。
ターゲットフォーマット(AudioInputStream.getFormat()
から)すべてのミキサーを介し
PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian
Iループ、各ミキサーのソースラインは、各ソースラインのためのフォーマットをサポートし、次のマッチを得る:ある
Mixer: PulseAudio Mixer, version 0.02
Source line: interface SourceDataLine supporting 42 audio formats, and buffers of 0 to 1000000 bytes
Format matches: PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, little-endian
私はは(format.matches()
を使用して)一致を得るのですかまだ私はまだ「無効な形式」の例外を取得します。おそらく、 "不明なサンプルレート"と一致するフォーマットが表示され、クリップを開こうとすると実際に44100 Hzをサポートしていないことがわかりますか?
必要です作業?あなたのここの例がおそらく問題の最小限の複製であることを理解しています。 – Dave