Если я запускаю эмулятор с любым ПЗУ, играет очень громкий интерференционный шум, а эмулятор вылетает. Я не знаю, является ли это ошибкой эмуляции Naudio или Spu.
Если я запускаю эмулятор с любым ПЗУ, играет очень громкий интерференционный шум, а эмулятор вылетает. Я не знаю, является ли это ошибкой эмуляции Naudio или Spu.[code]public sealed class GameBoyEmulator : NexusConsoleGame { private readonly Processor _cpu; private readonly SoundProcessor _spu; private readonly MemoryManagement _mmu; private readonly PixelProcessor _ppu; private readonly Timer _timer; private readonly Joypad _joypad;
private double accumulatedTime; private int cpuCycles; private int cyclesThisUpdate;
public GameBoyEmulator(string rom) { _spu = new SoundProcessor(); _mmu = MemoryManagement.LoadGamePak(rom, _spu); _cpu = new Processor(_mmu); _ppu = new PixelProcessor(Graphic, _mmu); _timer = new Timer(_mmu); _joypad = new Joypad(_mmu); }
protected override void Load() { Settings.ColorPalette = new GameBoyColorPalette(); Settings.Font = new NexusFont("Consolas", new NexusSize(8)); Settings.Title = "NexusGB"; Settings.StopGameKey = NexusKey.Escape; }
public SoundProcessor() { _channels = [ new SquareSweepChannel(this), new SquareChannel(this), _wave = new WaveSoundChannel(this), new NoiseChannel(this) ];
public void Update(in int cycles) { if ((number52 & (1 = 0xFF27 and < 0xFF30: return 0x00; case >= 0xFF30 and < 0xFF40: return _wave.ReadRam((ushort)(address - 0xFF30)); }
public void WriteToSoundBuffer(in int channel, in Span totalBuffer, in int index, float sample) { sample *= Sound1Volume / 7f;
if ((number51 & (1 public abstract class BaseSoundChannel { private readonly byte[] _numbers; protected readonly int _channelNumber; protected readonly SoundProcessor _spu; protected readonly WindowsSoundOut _out;
private float volume;
public ref float ChannelVolume => ref volume;
protected BaseSoundChannel(SoundProcessor spu, in int channelNumber) { _numbers = new byte[5]; _channelNumber = channelNumber; _spu = spu; _out = new WindowsSoundOut();
ChannelVolume = 0.05f; }
public abstract void Update(in int cycles);
public virtual byte ReadNumber(in int index) => _numbers[index];
public virtual void WriteNumber(in int index, in byte value) => _numbers[index] = value; } < /code> Это фактический звуковой выход на устройство Windows: < /p> public sealed class WindowsSoundOut { private readonly DirectSoundOut soundOut; private readonly BufferedWaveProvider _provider; private readonly byte[] _addSampleData;
public int SampleRate => _provider.WaveFormat.SampleRate;
public WindowsSoundOut() { _provider = new BufferedWaveProvider(new WaveFormat(44100, 16, 2)); soundOut = new DirectSoundOut(100); soundOut.Init(_provider); soundOut.Play();
_addSampleData = new byte[_provider.BufferLength]; }
public void BufferSoundSamples(in Span sampleData, in int length) { var index = 0; foreach (var current in MemoryMarshal.Cast(sampleData)) { _addSampleData[index++] = current; }
_provider.AddSamples(_addSampleData, 0, length + sizeof(float)); //Here occurs the `InvalidOperationException: "Buffer full"` from NAudio } } [/code] Весь исходный код можно найти здесь, если требуется больше контекста: https://github.com/blyzedev/nexusgb-emulator
Я использую эмулятор BigQuery ( для моих интеграционных тестов на локальной машине.
У меня есть проблема на моей работе Это не может создать сеанс чтения, задание застряло на неопределенный срок. > Здесь коды, которые я пытаюсь заставить его...
Я пытался имитировать проект, который я нашел на Github, созданный в 2013 году Drhelius ( чтобы сбросить картриджи Gameboy Rom и Ram на SD -карту. В ссылке вы можете найти схемы (я использовал ту же проводку, с 470 резисторами ом вместо 220, и я...
Сценарий использования: получить кучу URL-адресов и кэшировать результаты. Те, которые выполняются быстро (скажем, 500 мс), включаются в этот проход, все, что занимает больше времени, все равно выполняются и сохраняются в кеше, поэтому в следующий...