有什么方法可以让我直接输入java中的音频Line,这样我就可以制作合成器了吗?
我尝试将二进制数据馈送到音频输入流。不起作用
当它不起作用时,我认为我输入了错误的数据,所以我得到了一个波形文件,并在弄清楚音频数据的位置后输入。
但它仍然没有起作用
这是源代码:
//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
的音频数据必须符合打开SourceDataLine
时使用的AudioFormat
。