Проверьте микрофон на тишину - PullRequest
1 голос
/ 19 сентября 2019

Во время записи голоса пользователя я хочу знать, когда он / она прекратил говорить, чтобы завершить запись и отправить аудиофайл в API распознавания речи Google.

Я нашел эту ветку здесь и попытался использовать ее решениено я всегда получаю одно и то же значение из среднего значения спектра данных, которое составляет 5.004574E-08: Unity - проверка микрофона, если молчит

Это код, который я использую для получения GetSpectrumDataзначение:

public void StartRecordingSpeech()
    {
        //If there is a microphone
        if (micConnected)
        {
            if (!Microphone.IsRecording(null))
            {
                goAudioSource.clip = Microphone.Start(null, true, 10, 44100); //Currently set for a 10 second clip max
                goAudioSource.Play();
                StartCoroutine(StartRecordingSpeechCo());
            }
        }
        else
        {
            Debug.LogError("No microphone is available");
        }
    }

IEnumerator StartRecordingSpeechCo()
    {
        while (Microphone.IsRecording(null))
        {
            float[] clipSampleData = new float[128];
            goAudioSource.GetSpectrumData(clipSampleData, 0, FFTWindow.Rectangular);
            Debug.Log(clipSampleData.Average());
            yield return null;
        }
    }

PS: я могу записать голос пользователя, сохранить его и получить правильный ответ из API распознавания голоса.

1 Ответ

0 голосов
/ 19 сентября 2019

Если вы заинтересованы в томе , тогда GetSpectrumData на самом деле не совсем то, что вы хотите.Это используется для частотного анализа и возвращает - как следует из названия - частотный спектр, поэтому, насколько похвально какая частота в данном частотном диапазоне.


То, что вы предпочитаете использовать, это GetOutputData, который возвращает afaik массив с амплитудами от -1 до 1.Таким образом, вы должны возвести в квадрат все значения, получить среднее значение и взять квадратный корень из этого результата ( source )

float[] clipSampleData = new float[128];
goAudioSource.GetOutputData(clipSampleData, 0);

Debug.Log(Mathf.Sqrt(clipSampleData.Select(f => f*f).Average()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...