Микрофон Unity не воспроизводит звук - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь заставить микрофон работать в Unity. Я не получаю никаких ошибок, и код не ломается, однако, я не могу слышать звук из микрофона. Данные спектра, которые я получаю от аудиослушателя (который подключен к основной камере сцены), не меняются.

Если вы, ребята, знаете, где может быть проблема, пожалуйста, просветите меня:)

Вот мой код:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

///<summary>
/// Get the impulse response of a room with the device's microphone, to calculate the convolution reverb
///</summary>
[RequireComponent(typeof(AudioSource))]
public class ImpulseResponse : MonoBehaviour {
    private bool micFound = false;
    private AudioSource audioSource;

    private void Start() {
        audioSource = GetComponent<AudioSource>();
        // Ask for mic access from user before using it
        StartCoroutine(GetMicrophone());
    }

    private void StartRecording() {
        audioSource.clip = Microphone.Start(Microphone.devices[0], true, 10, AudioSettings.outputSampleRate);
        Debug.Log("Started recording");
        audioSource.loop = true;
        audioSource.Play();
    }

    private void StopRecording() {
        Debug.Log("Stop recording");
        Microphone.End(Microphone.devices[0]);
    }

    private IEnumerator GetMicrophone() {
        yield return Application.RequestUserAuthorization(UserAuthorization.Microphone);
        if (Application.HasUserAuthorization(UserAuthorization.Microphone)) {
            micFound = true;
            Debug.Log("Microphones found: ");
            foreach (var device in Microphone.devices) {
                Debug.Log("Name: " + device);
            }

            StartRecording();
        }
        else {
            Debug.Log("Microphone not found");
        }
    }

    private void Update() {
        // spectrum data --> https://docs.unity3d.com/ScriptReference/AudioSource.GetSpectrumData.html
        float[] spectrum = new float[256];
        AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular);
        for (int i = 1; i < spectrum.Length - 1; i++) {
            Debug.DrawLine(new Vector3(i - 1, spectrum[i] + 10, 0), new Vector3(i, spectrum[i + 1] + 10, 0), Color.red);
            Debug.DrawLine(new Vector3(i - 1, Mathf.Log(spectrum[i - 1]) + 10, 2),
                new Vector3(i, Mathf.Log(spectrum[i]) + 10, 2), Color.cyan);
            Debug.DrawLine(new Vector3(Mathf.Log(i - 1), spectrum[i - 1] - 10, 1),
                new Vector3(Mathf.Log(i), spectrum[i] - 10, 1), Color.green);
            Debug.DrawLine(new Vector3(Mathf.Log(i - 1), Mathf.Log(spectrum[i - 1]), 3),
                new Vector3(Mathf.Log(i), Mathf.Log(spectrum[i]), 3), Color.blue);
        }
    }

1 Ответ

0 голосов
/ 11 апреля 2020

Оказывается, что UnityHub не имеет разрешения для микрофона.

Вот шаги для его включения:

На шаге 10 вы изменяете это:

  1. Перезагрузите свою маму c и удерживайте Command-R, пока не появится яблоко lo go и индикатор выполнения. Это загрузит вашу Ma c в режим восстановления.

  2. Вы можете увидеть окно с просьбой выбрать язык. Если это так, сделайте свой выбор и нажмите кнопку со стрелкой, чтобы продолжить.

  3. Выберите Утилиты / Терминал в строке меню

  4. В окне терминала введите: csrutil отключить ... и нажмите клавишу возврата. Вы увидите сообщение, подтверждающее, что вы отключили защиту целостности системы. Мы включим это до того, как закончим.

  5. Выберите терминал / Выйти из терминала в строке меню

  6. Выберите меню Apple / Перезагрузка из строки меню. Войдите в свою Ma c при появлении запроса.

  7. в Finder, выберите Go / Utilities в строке меню

  8. Дважды щелкните «Терминал» в папке «Утилиты»

  9. В терминале осторожно введите следующее: sqlite3 ~ / Library / Application \ Support / com.apple.TCC / T CC .db… и нажмите return.

  10. В командной строке sqlite введите следующее: ВСТАВЬТЕ В ЗНАЧЕНИЯ ДОСТУПА ('kTCCServiceMicrophone', 'com.unity3d.unityhub', 0,1,1, NULL, NULL, NULL, 'UNUSED », NULL, 0,1541440109); … И нажмите return.

  11. В командной строке sqlite введите: .exit… и нажмите return. Обязательно укажите начальный период

  12. (.), Иначе команда выхода не будет работать.

  13. Выберите терминал / выйти из терминала из строка меню

Это должно дать разрешение приложению Ring использовать ваш микрофон. Теперь нам нужно снова включить защиту целостности системы. Повторите шаги 1-6, за исключением шага 4, введите «enable» вместо «disable». Это важный шаг, я настоятельно советую вам не пропускать его.

Вы можете подтвердить, что эта процедура сработала, выбрав «Apple» / «Системные настройки», затем «Безопасность и конфиденциальность», затем перейдите на вкладку «Конфиденциальность» и выберите «Микрофон». На левой стороне окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...