void UpdateWaveBuffer() { Settings = SIDChip.GetVoiceSettings(VoiceNo); short[] buffer = null; if (Settings.Waveform_Triangle) { buffer = WaveHelper.CreateWave_Triangle(OutputFreq, Settings.Freq); } if (Settings.Waveform_Sawtooth) { buffer = WaveHelper.CreateWave_Sawtooth(OutputFreq, Settings.Freq); } if (Settings.Waveform_Rectangle) { buffer = WaveHelper.CreateWave_Rectangle(OutputFreq, Settings.Freq, Settings.PWMRatio); } if (Settings.Waveform_Noise) { buffer = WaveHelper.CreateWave_Noise(OutputFreq, Settings.Freq); } // aplly filters if (Settings.FilterEnabled) { SIDChip_FilterSettings filter = SIDChip.FilterSettings; if (filter.LowpassEnabled) { buffer = WaveHelper.LowpassFilter(buffer); } if (filter.HighpassEnabled) { // } if (filter.BandpassEnabled) { } } if (buffer != null) { WaveBufferDirty = false; AL.SourceStop(ALSourceHandle); AL.Source(ALSourceHandle, ALSourcei.Buffer, 0); SetBuffer(ALBufferHandle, buffer, OutputFreq); AL.Source(ALSourceHandle, ALSourcei.Buffer, ALBufferHandle); SetLooping(true); AL.SourcePlay(ALSourceHandle); } }
public override void Write(int _fullAddress, byte _val, bool _internal) { byte xval = Read(_fullAddress, true); base.Write(_fullAddress, _val, _internal); int ofs = _fullAddress - BaseAddress; ofs %= 32; _fullAddress = BaseAddress + ofs; // voices if ((ofs >= 0) && (ofs < 21)) { int currVoice = 0; if (ofs >= 7) { currVoice = 1; } if (ofs >= 14) { currVoice = 2; } SIDVoice v = GetVoice(currVoice); v.Write(_fullAddress - BaseAddress, _val); } switch (_fullAddress) { case 0xd417: { FilterSettings = GetFilterSettings(); break; } case 0xd418: { FilterSettings = GetFilterSettings(); SetSIDVolume(FilterSettings.Volume); SIDVoice v = GetVoice(2); v.Mute = FilterSettings.Voice3Muted; break; } } }
public SIDChip_FilterSettings GetFilterSettings() { SIDChip_FilterSettings filter = new SIDChip_FilterSettings(); filter.Resonance = (Read(0xd417, true) & 0x0f) / 15.0f; filter.Voice1FilterEnabled = ((Read(0xd417, true) & BIT.B1) > 0); filter.Voice2FilterEnabled = ((Read(0xd417, true) & BIT.B2) > 0); filter.Voice3FilterEnabled = ((Read(0xd417, true) & BIT.B3) > 0); filter.Volume = (Read(0xd418, true) & 0x0f) / 15.0f; filter.HighpassEnabled = ((Read(0xd418, true) & 64) > 0); filter.BandpassEnabled = ((Read(0xd418, true) & 32) > 0); filter.LowpassEnabled = ((Read(0xd418, true) & 16) > 0); filter.Voice3Muted = ((Read(0xd418, true) & 128) > 0); return(filter); }