Skip to content

Godot:RecordingWithMicrophone

Godot 에서 마이크 레코딩 하는 방법

How to use

기본 버스 레이아웃 설정

Record_bus.png

"Record" 이름으로 BUS를 추가하고, "Record" 체크박스를 선택한다.

프로젝트 설정

Record_project_setting.png

기본 버스 레이아웃을 추가하고, "Enable Audio Input" 체크박스를 선택해야 한다.

AudioStreamPlayer 추가

Record_stream_player.png

장면(Scene)에 녹음용 AudioStreamPlayer를 추가하고 마이크로폰 스트림을 연결한다.

Record_stream_microphone.png

그리고 아까 추가한 "Record" 이름의 BUS를 선택한다.

AudioEffectRecord

AudioServer 버스 인덱스를 획득하고, AudioEffectRecord 를 획득한다.

private AudioEffectRecord _effect;
private AudioStreamSample _recording;

public override void _Ready()
{
    // We get the index of the "Record" bus.
    int idx = AudioServer.GetBusIndex("Record");
    // And use it to retrieve its first effect, which has been defined
    // as an "AudioEffectRecord" resource.
    _effect = (AudioEffectRecord)AudioServer.GetBusEffect(idx, 0);
}

레코드 버튼 클릭 이벤트

레코드 시작/중지 구현:

private void OnRecordButtonPressed()
{
    if (_effect.IsRecordingActive())
    {
        _recording = _effect.GetRecording();
        GetNode<Button>("PlayButton").Disabled = false;
        GetNode<Button>("SaveButton").Disabled = false;
        _effect.SetRecordingActive(false);
        GetNode<Button>("RecordButton").Text = "Record";
        GetNode<Label>("Status").Text = "";
    }
    else
    {
        GetNode<Button>("PlayButton").Disabled = true;
        GetNode<Button>("SaveButton").Disabled = true;
        _effect.SetRecordingActive(true);
        GetNode<Button>("RecordButton").Text = "Stop";
        GetNode<Label>("Status").Text = "Recording...";
    }
}

음악 재생 클릭 이벤트

private void OnPlayButtonPressed()
{
    GD.Print(_recording);
    GD.Print(_recording.Format);
    GD.Print(_recording.MixRate);
    GD.Print(_recording.Stereo);
    byte[] data = _recording.Data;
    GD.Print(data.Length);
    var audioStreamPlayer = GetNode<AudioStreamPlayer>("AudioStreamPlayer");
    audioStreamPlayer.Stream = _recording;
    audioStreamPlayer.Play();
}

WAV 파일 저장

private void OnSaveButtonPressed()
{
    string savePath = GetNode<LineEdit>("SaveButton/Filename").Text;
    _recording.SaveToWav(savePath);
    GetNode<Label>("Status").Text = string.Format("Saved WAV file to: {0}\n({1})", savePath, ProjectSettings.GlobalizePath(savePath));
}

Android Permission

안드로이드의 경우 다음 권한이 필요하다.

<uses-permission android:name="android.permission.RECORD_AUDIO" />

See also

Favorite site