我正在使用Beads Project音频库进行Java。我试图修改第7个教程文件,以非实时模式录制声音并将声音写入文件。我是通过使用RecordToSample
类来完成的。但是,当我尝试将样本写入文件时,它看起来并不像RecordToSample实际上已经将任何数据写入样本 - 所写的文件只是几秒钟的静默,基于我初始化样本的缓冲区的长度,而不是记录的长度。
这是我到目前为止所做的:
public class Lesson07_RecordToSample {
public static void main(String[] args) {
final AudioContext ac;
ac = new AudioContext();
/*
* I added this code
*/
final Sample sample = new Sample(10000D);
final RecordToSample recorder = new RecordToSample(ac, sample);
Clock clock = new Clock(ac, 700);
clock.addMessageListener(
//this is the on-the-fly bead
new Bead() {
// snip
/*
* I added this code
*/
if(c.getCount() == 70) {
Sample sample = recorder.getSample();
try {
sample.write("audio/song.wav", AudioFileType.WAV);
} catch (IOException e) {
e.printStackTrace();
}
ac.stop();
}
}
}
);
ac.out.addDependent(clock);
/*
* I changed this line
*/
ac.runNonRealTime();
}
public static float random(double x) {
return (float)(Math.random() * x);
}
}
这会在audio / song.wav中创建一个新文件,但此文件只包含10秒的静音。在我看来,记录器实际上并没有改变样本中的任何数据,并且在写入样本时,它只使用我初始化的10000毫秒空数据。
我一直在查看Beads库的文档,看起来RecordToSample类没有任何方法可以强制RecordToSample将其数据推送到Sample中。确保我使用RecordToSample录制的数据是否正确写入样本的正确方法是什么?你能提供一个简短的代码示例吗?