Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在4.0扬声器配置中使用Java播放单声道声音_Java_Audio_Javasound - Fatal编程技术网

如何在4.0扬声器配置中使用Java播放单声道声音

如何在4.0扬声器配置中使用Java播放单声道声音,java,audio,javasound,Java,Audio,Javasound,我需要在Java中播放一个.wav mono文件(可能在RAM中预加载),以播放4.0扬声器配置的所有扬声器。我还需要在播放音频时独立调整每个频道的音量,保持系统音量不变 这是我当前的代码。这离我需要的还差得远。 我该怎么做?谢谢 import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream;

我需要在Java中播放一个.wav mono文件(可能在RAM中预加载),以播放4.0扬声器配置的所有扬声器。我还需要在播放音频时独立调整每个频道的音量,保持系统音量不变

这是我当前的代码。这离我需要的还差得远。 我该怎么做?谢谢

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Mixer;
import javax.sound.sampled.SourceDataLine;

public class AudioPlayer extends Thread {

    private final int BUFFER_SIZE = 128000;
    private File soundFile;
    private AudioInputStream audioStream;
    private AudioFormat audioFormat;
    private SourceDataLine sourceLine;
    String filename;
    Mixer mixer;

    public void load(String filename) {
        this.filename = filename;
    }

    public AudioPlayer() {
    }

    public void run() {
        try {
            soundFile = new File(filename);
            audioStream = AudioSystem.getAudioInputStream(soundFile);
            audioFormat = audioStream.getFormat();
            DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
            sourceLine = (SourceDataLine) AudioSystem.getLine(info);
            sourceLine.open(audioFormat);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
        sourceLine.start();
        int nBytesRead = 0;
        byte[] abData = new byte[BUFFER_SIZE];
        while (nBytesRead != -1) {
            try {
                nBytesRead = audioStream.read(abData, 0, abData.length);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (nBytesRead >= 0) {
                @SuppressWarnings("unused")
                int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
            }
        }
        sourceLine.drain();
        sourceLine.close();
    }
}

打开源代码行后,可以调用
sourceLine.getControls()
查看该行定义了哪些控件。Java Sound仅支持立体声。通常,4个扬声器系统通过双倍立体声处理,这是由操作系统完成的。