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.

Gravação com microfone

Godot suporta gravação de áudio no jogo para Windows, macOS, Linux, Android e iOS.

Uma demonstração simples está incluída nos projetos de demonstração oficiais e será usada como suporte para este tutorial: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Você precisará ativar a entrada de áudio nas configurações do projeto ou obterá apenas arquivos de áudio vazios.

A estrutura da demo

A demonstração consiste em uma única cena. Esta cena inclui duas partes principais: a GUI e o áudio.

Vamos nos concentrar na parte de áudio. Nesta demonstração, um barramento chamado Record com o efeito Record é criado para lidar com a gravação de áudio. Um AudioStreamPlayer chamado AudioStreamRecord é usado para gravação.

../../_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)

A gravação de áudio é feita pelo recurso AudioEffectRecord que possui três métodos: get_recording(), is_recording_active() e 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..."

No início da demonstração, o efeito de gravação não está ativo. Quando o usuário pressiona o RecordButton, o efeito é ativado com set_recording_active(true).

No próximo botão pressionado, como effect.is_recording_active() é true, o stream gravado pode ser armazenado na variável recording chamando 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 reproduzir a gravação, você atribui a gravação como o stream do AudioStreamPlayer e chama 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 salvar a gravação, chame save_to_wav() com o caminho para um arquivo. Nesta demonstração, o caminho é definido pelo usuário através de uma caixa de entrada LineEdit.