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.

使用麥克風錄音

Godot支援Windows, macOS, Linux, Android和iOS的遊戲內音訊錄製.

一定要查看Viewport演示! 可以下載演示檔案中的Viewport資料夾, 或: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

你需要在專案設定中啟用音訊輸入,否則只能獲得空的音訊檔。

根節點的結構

該演示由單一場景組成, 這個場景包括兩個主要部分:GUI和音訊.

我們將重點介紹音訊部分. 在本演示中, 建立了一個名為 Record 的匯流排, 效果為 Record, 用於處理音訊錄製. 用一個名為 AudioStreamPlayerAudioStreamRecord 進行錄音.

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

音訊錄製由 AudioEffectRecord 資源處理, 它有三個方法: get_recording(), is_recording_active(), 以及 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..."

在演示開始時, 錄音效果是未啟動. 當使用者按下 RecordButton 時, 用 set_recording_active(true) 啟用該效果.

在下一次按下按鈕時, 由於 effect.is_recording_active()true, 可以通過呼叫 effect.get_recording() 將錄製的流儲存到 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()

要重播錄音, 你可以將錄音指定為 AudioStreamPlayer 的流, 並呼叫 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)]

要保存錄音, 你需要呼叫 save_to_wav(), 並提供檔的路徑. 在本演示中, 路徑由使用者通過 LineEdit 輸入框定義.