4

我自己编写了一组代码来记录我通过麦克风所说的话。我想了解谷歌在“沉默”时用于停止录制的功能。例如,如果我上谷歌并按下麦克风符号,我可以说出我打算寻找的内容,但它用来理解我什么都不说的那一刻(“沉默”的那一刻)的功能是什么?我想过做一个循环,他们记录一些声音帧的一些 dB 或 RMS,通过比较我可以理解是否有“沉默”。到目前为止,时间是静止的。

public static void main(String[] args) {
    final Main REGISTRAZIONE = new Main();

    Thread TIME = new Thread(new Runnable() {

        public void run() {
            try {
                Thread.sleep(RECORD_TIME);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            REGISTRAZIONE.finish();
        }
    });
    TIME.start();
    REGISTRAZIONE.start();
}
4

1 回答 1

1

您检查 dB 的方法很好。然后,您可以使用另一个线程检查静音,并在找到时停止主线程。您必须使用自己的 Thread 实现,以便它可以将 TIME 作为参数并在静音时停止它:

public class Recorder {
    static Long RECORD_TIME = 100000L; //or whatever time you use   

    public static void main(String[] args) {
        final Main REGISTRAZIONE = new Main();

        Thread TIME = new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(RECORD_TIME);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }
                REGISTRAZIONE.finish();
            }
        });
        TIME.start();

        myThread finisher = new myThread(TIME);
        finisher.start();
        REGISTRAZIONE.start();
    }
}

class myThread extends Thread implements Runnable {
    private Thread TIME;

    public myThread(Thread TIME) {
        this.TIME = TIME;
    }

    public void run() {
        while (!silence()) {
            // do nothing
        }
        TIME.interrupt();
    }

    private boolean silence() {
        //record and calculate the dB volume and compare to some level
        return true;
    }
}
于 2013-07-09T16:37:57.370 回答