Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Registrazione con il microfono

Godot supporta la registrazione di audio nel gioco per Windows, macOS, Linux, Android e iOS.

Una semplice demo è inclusa nei progetti demo ufficiali e sarà utilizzata come supporto per questo tutorial: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Sarà necessario abilitare l'ingresso audio nelle impostazioni del progetto Audio > Driver > Abilita l'entrata audio, altrimenti si otterranno solo file audio vuoti.

Su iOS e iPadOS, è inoltre importante impostare l'impostazione avanzata Audio > Generali > iOS > Categoria sessione per includere Registra o Riproduci e registra.

La struttura della demo

La demo è composta da una singola scena. Tale scena include due parti principali: l'interfaccia grafica e l'audio.

Ci concentreremo sulla parte audio. In questa demo, viene creato un bus denominato Record con l'effetto Record per gestire la registrazione audio. Per la registrazione viene utilizzato un AudioStreamPlayer denominato AudioStreamRecord.

../../_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 registrazione audio è gestita dalla risorsa AudioEffectRecord che ha tre metodi: 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..."

All'inizio della demo, l'effetto di registrazione non è attivo. Quando l'utente preme il pulsante RecordButton, l'effetto viene abilitato con set_recording_active(true).

Alla prossima pressione del pulsante, poiché effect.is_recording_active() è true, il flusso registrato si può memorizzare nella variabile recording chiamando 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()

Per riprodurre la registrazione, assegnarla come flusso dell'AudioStreamPlayer e chiamare 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)]

Per salvare la registrazione, si chiama save_to_wav() con il percorso del file. In questa demo, il percorso viene definito dall'utente tramite una casella di input LineEdit.