Как создать переменную для громкости микрофона в движке Godot?

Я хочу создать гоночную игру на Godot, где игрок будет управлять машиной с помощью кнопок на экране, а ускоряться и замедляться с помощью голоса - если говорить громко, машина ускорится, а если тихо, то затормозит. Как узнать текущий уровень громкости?


Ответы (1 шт):

Автор решения: gord1402

Включить аудио ввод

Зайдите в настройки проекта, нажмите расширенные настройки. Зайдите в Аудио>Драйвер, включите галочку Включить ввод. Настройки проекта *Картинки показаны для redot, но разницы быть не должно)

Создать новую шину аудио

Снизу, где находится Консоль выберите Аудио. Нажмите кнопку добавить назовите новую шину Muted, сразу нажмите M сверху чтобы ваш микрофон не было слышно. Создаёте ещё одну шину Microphone выберите Muted как шину выхода.

Настройки должны выглядеть так:

Настройки шин

Транслирование микрофона на шину

На вашей сцене создайте новую ноду: AudioStreamPlayer.

В поле Stream создаём новый AudioStreamMicrophone. В поле Bus выбираем шину Microphone (или ваше название). Включаем Autoplay. Настройки AudioStreamPlayer

Получение громкости

Теперь вы можете получить громкость с вашего микрофона так:


const MAX_SAMPLES: int = 10
var record_live_index: int
var volume_samples: Array = []

func _ready() -> void:
    # Замените на название своей шины
    record_live_index = AudioServer.get_bus_index('Microphone')

func _process(delta: float) -> void:
    var sample = db_to_linear(AudioServer.get_bus_peak_volume_left_db(record_live_index, 0))
    volume_samples.push_front(sample)

    if volume_samples.size() > MAX_SAMPLES:
        volume_samples.pop_back()

    var sample_avg = average_array(volume_samples)
    print('%sdb' % round(linear_to_db(sample_avg)))

func average_array(arr: Array) -> float:
    var avg = 0.0
    for i in range(arr.size()):
        avg += arr[i]
    avg /= arr.size()
    return avg

(Названия функций могут отличатся)

Ответ был написан по данному гайду

→ Ссылка