マイクでの録音

Godotは、Windows、macOS、Linux、Android、およびiOSのゲーム内オーディオ録音をサポートしています。

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

デモの構造

デモは単一のシーンで構成されています。このシーンには、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_RecordButton_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_PlayButton_pressed():
    print(recording)
    print(recording.format)
    print(recording.mix_rate)
    print(recording.stereo)
    var data = recording.get_data()
    print(data)
    print(data.size())
    $AudioStreamPlayer.stream = recording
    $AudioStreamPlayer.play()

録音を再生するには、録音を AudioStreamPlayer のストリームとして割り当て、play() を呼び出します。

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