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.

마이크를 이용한 녹음

Godot는 Windows, macOS, Linux, Android 및 iOS용 게임 내 오디오 녹음을 지원합니다.

간단한 데모는 공식 데모 프로젝트에 포함되어 있으며 이 튜토리얼의 지원으로 사용됩니다: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.

Audio > Driver > Enable Input 프로젝트 설정에서 오디오 입력을 활성화해야 합니다. 그렇지 않으면 빈 오디오 파일만 얻게 됩니다.

iOS 및 iPadOS에서는 녹음 또는 재생 및 녹음**을 포함하도록 고급 **오디오 > 일반 > iOS > 세션 범주 설정을 설정하는 것도 중요합니다.

스크립트의 역할

데모는 단일 씬로 구성됩니다. 이 씬에는 GUI와 오디오라는 두 가지 주요 부분이 포함되어 있습니다.

우리는 오디오 부분에 중점을 둘 것입니다. 이 데모에서는 오디오 녹음을 처리하기 위해 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() 등 세 가지 메서드가 있는 AudioEffectRecord 리소스에 의해 처리됩니다. 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 입력 상자를 통해 사용자가 정의합니다.