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.

Aufnahme mit Mikrofon

Godot unterstützt Audioaufnahmen innerhalb des Spiels unter Windows, MacOS, Linux, Android und iOS.

Ein einfaches Beispiel ist in den offiziellen Demo-Projekten enthalten und wird als Unterstützung für diese Anleitung verwendet: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Sie müssen die Audioeingabe in den Projekteinstellungen aktivieren, da Sie sonst nur leere Audiodateien erhalten.

Der Aufbau der Demo

Die Demo besteht aus einer einzelnen Szene. Diese Szene enthält zwei Hauptteile: die GUI und das Audio.

Wir werden uns auf den Audioteil konzentrieren. In dieser Demo wird ein Bus mit dem Namen Record mit dem Effekt Record für die Audioaufnahme erstellt. Ein AudioStreamPlayer mit dem Namen AudioStreamRecord wird für die Aufnahme verwendet.

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

Die Audioaufnahme wird von der Ressource AudioEffectRecord gehandhabt, die drei Methoden hat: get_recording(), is_recording_active(), und 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..."

Zu Beginn der Demo ist der Aufnahmeeffekt nicht aktiv. Wenn der Benutzer den RecordButton drückt, wird der Effekt mit set_recording_active(true) aktiviert.

Beim nächsten Druck auf den Button, wenn effect.is_recording_active() auf true steht, kann der aufgenommene Stream durch den Aufruf von effect.get_recording() in der Variable recording gespeichert werden.

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()

Um die Aufnahme abzuspielen, weisen Sie die Aufnahme als Stream des AudioStreamPlayer zu und rufen play() auf.

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)]

Um die Aufnahme zu speichern, rufen Sie save_to_wav() mit dem Pfad zu einer Datei auf. In dieser Demo wird der Pfad vom Benutzer über ein LineEdit Eingabefeld definiert.