Work in progress

The content of this page was not yet updated for Godot 4.2 and may be outdated. If you know how to improve this page or you can confirm that it's up to date, feel free to open a pull request.

Grabación con micrófono

Godot soporta la grabación de audio en el juego para Windows, MacOS, Linux, Android e iOS.

Una demo sencilla está incluida en los proyectos de demostración oficiales y puede usarse como ayuda para este tutorial: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Debes habilitar la entrada de audio en la configuración del proyecto, de lo contrario, obtendrás archivos de audio vacíos.

La estructura de la demo

La demostración consiste en una sola escena. Esta escena incluye dos partes principales: la interfaz gráfica y el audio.

Nos centraremos en la parte de audio. En esta demostración, se crea un bus llamado Record con el efecto Record para manejar la grabación de audio. Un AudioStreamPlayer llamado AudioStreamRecord se utiliza para la grabación.

../../_images/record_bus.png ../../_images/record_stream_player.png
var effect
var recording


func _ready():
    # We get the index of the "Record" bus.
    var idx = AudioServer.get_bus_index("Record")
    # And use it to retrieve its first effect, which has been defined
    # as an "AudioEffectRecord" resource.
    effect = AudioServer.get_bus_effect(idx, 0)

La grabación de audio es manejada por el recurso AudioEffectRecord que tiene tres métodos: get_recording(), : ref:is_recording_active() <class_AudioEffectRecord_method_is_recording_active>, y set_recording_active().

func _on_record_button_pressed():
    if effect.is_recording_active():
        recording = effect.get_recording()
        $PlayButton.disabled = false
        $SaveButton.disabled = false
        effect.set_recording_active(false)
        $RecordButton.text = "Record"
        $Status.text = ""
    else:
        $PlayButton.disabled = true
        $SaveButton.disabled = true
        effect.set_recording_active(true)
        $RecordButton.text = "Stop"
        $Status.text = "Recording..."

Al comienzo de la demostración, el efecto de grabación no está activo. Cuando el usuario pulsa el RecordButton, el efecto se activa con set_recording_active(true).

En el siguiente botón presiona, ya que efecto.is_recording_active() es true, el flujo grabado puede ser almacenado en la variable recording llamando a effect.get_recording().

func _on_play_button_pressed():
    print(recording)
    print(recording.format)
    print(recording.mix_rate)
    print(recording.stereo)
    var data = recording.get_data()
    print(data.size())
    $AudioStreamPlayer.stream = recording
    $AudioStreamPlayer.play()

Para reproducir la grabación, asigna la grabación como el stream del AudioStreamPlayer y llama a play().

func _on_save_button_pressed():
    var save_path = $SaveButton/Filename.text
    recording.save_to_wav(save_path)
    $Status.text = "Saved WAV file to: %s\n(%s)" % [save_path, ProjectSettings.globalize_path(save_path)]

Para guardar la grabación, se llama "save_to_wav" con la ruta de un archivo. En esta demostración, la ruta es definida por el usuario a través de un campo de entrada LineEdit.