2013-07-09 1 views
4

Я написал собственный код для записи того, что я говорю через микрофон. Я хотел бы понять функцию, которую Google использует для остановки этой записи, когда есть «тишина». Например, если я иду по Google и нажимаю символ микрофона, я могу сказать, что я планирую искать, но какова функция, которую он использует, чтобы понять момент, когда я ничего не говорю (момент «молчания»)? Я думал о том, чтобы делать цикл, в котором они записывают несколько дБ или 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(); 
} 

ответ

1

Ваш подход к проверке на дБ является хорошим. Затем вы можете использовать другой поток, чтобы проверить тишину, и остановить основной поток, когда он его найдет. Вы должны использовать свою собственную реализацию тему, так что это может занять некоторое время в качестве параметра и остановить его, когда наступает тишина:

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; 
    } 
} 
+0

есть ошибка в MyThread финишера = новый MyThread сказал (TIME) Затмения => конструктор set.myThread (Thread) не определено – NPLS

+0

Вы скопировали код, который я публикую? –

+0

да, почему? ........... – NPLS