簡體   English   中英

如何臨時暫停循環

[英]How to temporarilly pause loop

我正在制作一個始終檢測噪音的APP。 並且,當它檢測到很大的噪音時,它將啟動功能。

在執行該功能時,我需要暫時暫停檢測噪音的循環。

我怎樣才能做到這一點?

弄亂我的代碼:

private void readAudioBuffer() {

    try {
        short[] buffer = new short[bufferSize];
        int bufferReadResult;
        do {
            bufferReadResult = audio.read(buffer, 0, bufferSize);
            for (int i = 0; i < bufferReadResult; i++){
                if (buffer[i] > lastLevel) {
                    lastLevel = buffer[i];
                }
            }
            // if sound level is over 20000 start voice recognition
            if (lastLevel > 20000){
                lastLevel = 0;
            // Pause this function:
                startVoiceRecognitionActivity();
            }

        } while (bufferReadResult > 0 && audio.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

基本上添加Thread.sleep(5000); 絕招

    try {
        short[] buffer = new short[bufferSize];
        int bufferReadResult;
        do {


            bufferReadResult = audio.read(buffer, 0, bufferSize);
            for (int i = 0; i < bufferReadResult; i++){
                if (buffer[i] > lastLevel) {
                    lastLevel = buffer[i];
                }
            }
            // if sound level is over 20000 start voice recognition
            if (lastLevel > 20000){
                lastLevel = 0;
                startVoiceRecognitionActivity();
                Thread.sleep(5000);
            }

        } while (bufferReadResult > 0 && audio.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
private void readAudioBuffer() {

try {
    short[] buffer = new short[bufferSize];
    int bufferReadResult;
    do {
        while(audio.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING){
                //Wait for certain time. If it is in a recording state then it would enter this loop and wait else it would go ahead to check for sound levels.
           }
        bufferReadResult = audio.read(buffer, 0, bufferSize);
        for (int i = 0; i < bufferReadResult; i++){
            if (buffer[i] > lastLevel) {
                lastLevel = buffer[i];
            }
        }
        // if sound level is over 20000 start voice recognition
        if (lastLevel > 20000){
            lastLevel = 0;
            startVoiceRecognitionActivity();
        }

    } while (bufferReadResult > 0);

} catch (Exception e) {
    e.printStackTrace();
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM