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
안드로이드의 경우 다음 권한이 필요하다.