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.
Checking the stable version of the documentation...
Aufnahme mit Mikrofon
Godot unterstützt Audioaufnahmen innerhalb des Spiels unter Windows, MacOS, Linux, Android und iOS.
Ein einfaches Beispiel ist in den offiziellen Demo-Projekten enthalten und wird als Unterstützung für diese Anleitung verwendet: https://github.com/godotengine/godot-demo-projects/tree/master/audio/mic_record.
You will need to enable audio input in the Audio > Driver > Enable Input project setting, or you'll just get empty audio files.
Der Aufbau der Demo
Die Demo besteht aus einer einzelnen Szene. Diese Szene enthält zwei Hauptteile: die GUI und das Audio.
Wir werden uns auf den Audioteil konzentrieren. In dieser Demo wird ein Bus mit dem Namen Record
mit dem Effekt Record
für die Audioaufnahme erstellt. Ein AudioStreamPlayer
mit dem Namen AudioStreamRecord
wird für die Aufnahme verwendet.


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);
}
Die Audioaufnahme wird von der Ressource AudioEffectRecord gehandhabt, die drei Methoden hat: get_recording(), is_recording_active(), und 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..."
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...";
}
}
Zu Beginn der Demo ist der Aufnahmeeffekt nicht aktiv. Wenn der Benutzer den RecordButton
drückt, wird der Effekt mit set_recording_active(true)
aktiviert.
Beim nächsten Druck auf den Button, wenn effect.is_recording_active()
auf true
steht, kann der aufgenommene Stream durch den Aufruf von effect.get_recording()
in der Variable recording
gespeichert werden.
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();
}
Um die Aufnahme abzuspielen, weisen Sie die Aufnahme als Stream des AudioStreamPlayer
zu und rufen play()
auf.
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));
}
Um die Aufnahme zu speichern, rufen Sie save_to_wav()
mit dem Pfad zu einer Datei auf. In dieser Demo wird der Pfad vom Benutzer über ein LineEdit
Eingabefeld definiert.