Wie kann ich verhindern, dass Raylib (c#-Bindungen) AudioStream die Ausgabe des Rauschkanals bei der Wiedergabe verzerrtC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie kann ich verhindern, dass Raylib (c#-Bindungen) AudioStream die Ausgabe des Rauschkanals bei der Wiedergabe verzerrt

Post by Anonymous »

Ich versuche, Audio in einem Emulator zu generieren und abzuspielen, indem ich die AudioStream-API von Raylib und ihre Rückruffunktion verwende. Mein Emulator erzeugt Quadrat, Dreieck, Sägezahn und Rauschen. Alle Wellenformen klingen korrekt, bis auf „Rauschen“, das wie ein Summen, schreckliches Rauschen, Rauschen und einen zusammengeschlagenen Geigerzähler klingt – nichts wie altmodisches Rauschen, das für Schlagzeug, Flammen, Explosionen und alles dazwischen verwendet wurde. Dies sind die relevanten Methoden aus der Audioverarbeitungseinheitsklasse meines Emulators:

Code: Select all

private float GenerateSample(int channel)
{
var baseAddr = Memory.AudioRamStart + (channel * 4);
var freq = _mobo.ReadWord(baseAddr);
var control = _mobo.ReadByte(baseAddr + 3);
if (freq == 0)
return 0f;
var volume = ProcessEnvelope(channel, control);
if (volume = 6)
{
_noisePeriod[channel] = Math.Max(1, (int)(44100f / Math.Max(1, (int)freq)));
}
var delta = freq / 44100f;
_phases[channel] += delta;
if (_phases[channel] >= 1f)
{
_phases[channel] -= 1f;
}
var wave = channel switch
{
0 or 1 => Square(_phases[channel], delta),
2 or 3 => Triangle(_phases[channel]),
4 or 5 => Sawtooth(_phases[channel], delta),
_ => Noise(channel),
};
return wave * volume;
}
private float Noise(int channel)
{
if (--_noiseTimer[channel] > 1)) & 1);
_noiseLfsr[channel] = (ushort)((_noiseLfsr[channel] >> 1) | (bit

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post