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...
AudioStreamGenerator
Hérite de : AudioStream < Resource < RefCounted < Object
Un flux audio avec des utilitaires pour la generation de sons procéduraux.
Description
AudioStreamGenerator est un type de flux audio qui ne joue pas les sons tout seul, au lieu de cela, il s'attend à ce qu'un script génère des données audio pour lui. Voir aussi AudioStreamGeneratorPlayback.
Voici un échantillon sur comment l'utiliser pour générer une onde sinusoïdale :
var lecture # Gardera l'AudioStreamGeneratorPlayback.
@onready var echantillion_hz= $AudioStreamPlayer.stream.mix_rate
var pulsation_hz = 440.0 # La fréquence de l'onde sonore
var phase = 0.0
func _ready():
$AudioStreamPlayer.play()
lecture = $AudioStreamPlayer.get_stream_playback()
remplir_buffer()
func remplir_buffer():
var increment = pulse_hz / sample_hz
var trames_disponibles = playback.get_frames_available()
for i in range(trames_disponibles):
lecture.push_frame(Vector2.ONE * sin(phase * TAU))
phase = fmod(phase + increment, 1.0)
[Export] public AudioStreamPlayer Lecteur { get; set; }
private AudioStreamGeneratorPlayback _lecture ; // Gardera l'AudioStreamGeneratorPlayback.
private float _echantillionHz;
private float _pulsationHz = 440.0f; // La fréquence de l'onde sonore
private double phase = 0.0;
public override void _Ready()
{
if (Lecteur.Stream is AudioStreamGenerator generateur) // Typé en tant que générateur pour accéder à MixRate.
{
_echantillionHz = generateur.MixRate;
Lecteur.Play();
_lecture = (AudioStreamGeneratorPlayback)Player.GetStreamPlayback();
RemplirBuffer();
}
}
public void RemplirBuffer()
{
float increment = _pulsationHz / _echantillionHz;
int trames_disponibles = _playback.GetFramesAvailable();
for (int i = 0; i < trames_disponibles; i++)
{
_lecture.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf.Tau));
phase = Mathf.PosMod(phase + increment, 1.0);
}
}
Dans l'exemple ci-dessus, le nœud "AudioStreamPlayer" doit utiliser un AudioStreamGenerator comme son flux. La fonction remplir_buffer fournit des données audio pour estimer une onde sinusoïdale.
Voir aussi AudioEffectSpectrumAnalyzer pour l'analyse du spectre audio en temps réel.
Note : En raison de contraintes de performance, cette classe est la mieux utilisée en C# ou d'un langage compilé via GDExtension. Si vous voulez toujours utiliser cette classe en GDScript, envisagez d'utiliser un mix_rate inférieur comme 11,025 Hz ou 22,050 Hz.
Tutoriels
Propriétés
|
||
|
||
|
Énumérations
enum AudioStreamGeneratorMixRate: 🔗
AudioStreamGeneratorMixRate MIX_RATE_OUTPUT = 0
Taux de mixage de sortie de l'AudioServer actuel.
AudioStreamGeneratorMixRate MIX_RATE_INPUT = 1
Taux de mixage d'entrée de l'AudioServer actuel.
AudioStreamGeneratorMixRate MIX_RATE_CUSTOM = 2
Taux de mixage personnalisé, spécifié par mix_rate.
AudioStreamGeneratorMixRate MIX_RATE_MAX = 3
Valeur maximale pour l'énumération du mode de taux de mixage.
Descriptions des propriétés
La longueur de la mémoire tampon à générer (en secondes). Les valeurs inférieures entraînent moins de latence, mais exigent que le script génère les données audio plus rapidement, ce qui entraîne une utilisation plus important du CPU et plus de risques de craquements audio si le CPU n'est pas assez puissant.
Le taux d'échantillonnage à utiliser (en Hz). Les valeurs plus élevées demandent plus de puissance de CPU, mais cela résulte en une meilleure qualité.
Dans les jeux, les taux d'échantillonnage courants sont 11025, 16000, 22050, 32000, 44100, et 48000.
D'après le Théorème d'échantillonnage, il n'y a aucune différence de qualité pour l'audition humaine au-delà de 40 000 Hz (puisque la plupart des humains ne peuvent entendre que jusqu'à 20 000 Hz, et souvent bien moins). Si vous générez des sons inférieurs tels que les voix, des taux d'échantillonnage inférieurs tels que 32000 ou 22050 peuvent être utilisables sans perte de qualité.
Note : AudioStreamGenerator ne ré-échantillonne pas les données d'entrée, pour produire le résultat attendu mix_rate_mode devrait correspondre au taux d'échantillonnage des données d'entrée.
Note : Si vous utilisez AudioEffectCapture comme source de vos données, définissez mix_rate_mode à MIX_RATE_INPUT ou MIX_RATE_OUTPUT pour correspondre automatiquement au taux de mixage de l'AudioServer courant.
AudioStreamGeneratorMixRate mix_rate_mode = 2 🔗
void set_mix_rate_mode(value: AudioStreamGeneratorMixRate)
AudioStreamGeneratorMixRate get_mix_rate_mode()
Mode de taux de mixage. Si défini à MIX_RATE_CUSTOM, mix_rate est utilisé, le taux de mixage de l'AudioServer courant est utilisé.