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
が使用されます。
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)
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);
}
オーディオ録音は、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..."
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...";
}
}
デモの開始時には、録音エフェクトはアクティブではありません。ユーザーが 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()
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();
}
録音を再生するには、録音を 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)]
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));
}
記録を保存するには、ファイルへのパスを指定して save_to_wav()
を呼び出します。このデモでは、パスは LineEdit
入力ボックスを介してユーザーが定義します。