Как создать переменную для громкости микрофона в движке Godot?
Я хочу создать гоночную игру на Godot, где игрок будет управлять машиной с помощью кнопок на экране, а ускоряться и замедляться с помощью голоса - если говорить громко, машина ускорится, а если тихо, то затормозит. Как узнать текущий уровень громкости?
Ответы (1 шт):
Включить аудио ввод
Зайдите в настройки проекта, нажмите расширенные настройки. Зайдите в Аудио>Драйвер, включите галочку Включить ввод.
*Картинки показаны для redot, но разницы быть не должно)
Создать новую шину аудио
Снизу, где находится Консоль выберите Аудио.
Нажмите кнопку добавить назовите новую шину Muted, сразу нажмите M сверху чтобы ваш микрофон не было слышно. Создаёте ещё одну шину Microphone выберите Muted как шину выхода.
Настройки должны выглядеть так:
Транслирование микрофона на шину
На вашей сцене создайте новую ноду: AudioStreamPlayer.
В поле Stream создаём новый AudioStreamMicrophone. В поле Bus выбираем шину Microphone (или ваше название). Включаем Autoplay.

Получение громкости
Теперь вы можете получить громкость с вашего микрофона так:
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
(Названия функций могут отличатся)
Ответ был написан по данному гайду
