如何确保RecordToSample正确写入Java Beads中的Sample?

时间:2014-12-08 21:42:39

标签: java audio audio-recording

我正在使用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录制的数据是否正确写入样本的正确方法是什么?你能提供一个简短的代码示例吗?

0 个答案:

没有答案