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_RecordButton_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_PlayButton_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_SaveButton_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.