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.

Nahrávání s mikrofonem

Godot podporuje nahrávání zvuku ve hře pro Windows, macOS, Linux, Android a iOS.

Jednoduchá ukázka je součástí oficiálních ukázkových projektů a bude použita pro podpoření tohoto návodu: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Budete muset povolit zvukový vstup v nastavení projektu Zvuk > Ovladač > Povolit vstup, jinak získáte pouze prázdné zvukové soubory.

On iOS and iPadOS, it is also important to set the advanced Audio > General > iOS > Session Category setting to include Record or Play and Record.

Struktura ukázky

Ukázka sestává z jediné scény, která obsahuje dvě hlavní části: GUI a zvuk.

Zaměříme se na zvukovou část. V této ukázce je vytvořena sběrnice Record ("nahrávání") s efektem Record pro zpracování zvukového záznamu. Pro nahrávání se používá AudioStreamPlayer ("přehrávač zvukových streamů") s názvem 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)

Zvukový záznam zpracovává zdroj AudioEffectRecord ("zvukový efekt nahrávání"), který má tři metody: get_recording() ("získat nahrávku"), is_recording_active() ("je nahrávání aktivní") a set_recording_active() ("nastavit nahrávání aktivní").

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..."

Na začátku ukázky není efekt nahrávání aktivní. Když uživatel stiskne tlačítko RecordButton, efekt se aktivuje pomocí set_recording_active(true).

Při dalším stisknutí tlačítka, jelilkož effect.is_recording_active() je true, lze zaznamenaný stream uložit do proměnné recording zavoláním 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()

Pro přehrání nahrávky přiřadíte nahrávku jako stream přehrávače AudioStreamPlayer a zavoláte 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)]

Pro uložení nahrávky zavoláte save_to_wav() s cestou k souboru. V této ukázce je cesta definována uživatelem pomocí vstupního pole LineEdit.