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のゲーム内オーディオ録音をサポートしています。

簡単なデモが公式デモプロジェクトに含まれており、このチュートリアルのサポートとして使用されます: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record

You will need to enable audio input in the project settings, or you'll just get empty audio files.

デモの構造

デモは単一のシーンで構成されています。このシーンには、GUIとオーディオの2つの主要部分が含まれます。

オーディオ部分に焦点を当てます。このデモでは、オーディオ録音を処理するために、Recordエフェクトを持つ Record という名前のバスが作成されます。録音には AudioStreamRecord という名前の AudioStreamPlayer が使用されます。

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

オーディオ録音は、get_recording()is_recording_active() および set_recording_active() の3つのメソッドを持つ AudioEffectRecord リソースで処理されます。

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 入力ボックスを介してユーザーが定義します。