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.

L'enregistrement avec le microphone

Godot prend en charge l'enregistrement audio en jeu pour Windows, MacOS, Linux, Android et iOS.

Une démo simple est incluse dans les projets de démonstration officiels et sera utilisée comme support pour ce tutoriel : https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Vous devrez activer l'entrée audio dans les paramètres du projet, sinon vous obtiendrez des fichiers audio vides.

La structure de la démo

La démo consiste en une seule scène. Cette scène comprend deux parties principales : l'interface graphique et l'audio.

Nous nous concentrerons sur la partie audio. Dans cette démo, un bus nommé Record avec l'effet Record est créé pour gérer l'enregistrement audio. Un AudioStreamPlayer nommé AudioStreamRecord est utilisé pour l'enregistrement.

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

L'enregistrement audio est géré par la ressource AudioEffectRecord qui possède trois méthodes : get_recording(), is_recording_active(), et 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..."

Au début de la démo, l'effet d'enregistrement n'est pas actif. Lorsque l'utilisateur appuie sur le RecordButton, l'effet est activé avec set_recording_active(true).

À la prochain pression sur le bouton, comme effect.is_recording_active() est true, le flux enregistré peut être stocké dans la variable recording en appelant 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()

Pour lire l'enregistrement, vous affectez l'enregistrement comme le flux du AudioStreamPlayer et appelez 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)]

Pour enregistrer l'enregistrement, vous appelez save_to_wav() avec le chemin vers un fichier. Dans cette démo, le chemin d'accès est défini par l'utilisateur via une zone de saisie LineEdit.