gpt4 book ai didi

java - Javax.sound对音频线路的直接控制

转载 作者:行者123 更新时间:2023-12-03 01:14:51 24 4
gpt4 key购买 nike

有什么办法可以在Java中输入音频行的直接输入,以便可以制作合成器?
我尝试将二进制数据馈送到音频输入流。它不起作用
当它不起作用时,我以为我输入了错误的数据,因此我得到了波形文件,并弄清了音频数据的位置并将其输入。
但是它仍然没有用
这是源代码:

//audio.bin is just a .wav file
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.*;

import java.io.*;
import java.nio.file.Files;

public class main{
public static Mixer mixer;
public static Clip clip;
public static AudioInputStream audioStream;
public static InputStream inputStream;

public static void main(String[] args) throws IOException{
File file = new File("audio.bin");

byte[] files = Files.readAllBytes(file.toPath());

Mixer.Info[] mx = AudioSystem.getMixerInfo();
//for(int i=0;i<mx.length;i++){
// System.out.println(i+"="+mx[i]);
//}
mixer = AudioSystem.getMixer(mx[0]);

//Port.Info.SPEAKER;
byte[] seq = new byte[files.length-0x56];
int j=0x56;
for(int i=0;i<seq.length;i++){
seq[i]=files[j];
j++;
//System.out.println(seq[i]);
}

inputStream = new ByteArrayInputStream(files);

AudioFormat format;
DataLine.Info dataInfo = new DataLine.Info(Clip.class, null);
try{
clip = (Clip)mixer.getLine(dataInfo);
format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100,16,2,4,44100,false);
audioStream = new AudioInputStream(inputStream,format,files.length);
clip.open(audioStream);
clip.start();
}catch(Exception e){
System.err.println(e);
}

}
}


/*





try{
clip = (Clip)mixer.getLine(dataInfo);
//AudioInputStream audioStream=;
//clip.Open();
}catch(Exception e){
System.out.println(e);
}
*/

最佳答案

如果您的目标是直接播放已合成的音频数据,则应使用SourceDataLine类进行输出,而不是使用Clip进行输出。
例如,对于名为sdl的预定义SourceDataLine和名为1024的Byte []缓冲区(选择了任意大小):

while(isPlaying)
{
buffer = getSomeAudioData();
sdl.write(buffer, 0, 1024);
}
提供给 SourceDataLine的音频数据必须与打开 AudioFormat时使用的 SourceDataLine一致。

关于java - Javax.sound对音频线路的直接控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62832332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com