private PinMame(PinMameAudioFormat audioFormat, int sampleRate, string vpmPath) { Logger.Info($"PinMame - audioFormat={audioFormat}, sampleRate={sampleRate}, vpmPath={vpmPath}"); var path = vpmPath ?? GetVpmPath(); if (path == null) { throw new ArgumentException("Could not determine VPM path. Either install VPinMAME or provide it manually.", nameof(vpmPath)); } if (!Directory.Exists(path)) { throw new ArgumentException($"Could not find VPM path - {path} does not exist.", nameof(vpmPath)); } _config = new PinMameApi.PinmameConfig { audioFormat = (PinMameApi.PinmameAudioFormat)audioFormat, sampleRate = sampleRate, vpmPath = path + Path.DirectorySeparatorChar, onStateUpdated = OnStateUpdatedCallback, onDisplayAvailable = OnDisplayAvailableCallback, onDisplayUpdated = OnDisplayUpdatedCallback, onAudioAvailable = OnAudioAvailableCallback, onAudioUpdated = OnAudioUpdatedCallback, onMechAvailable = OnMechAvailableCallback, onMechUpdated = OnMechUpdatedCallback, onSolenoidUpdated = OnSolenoidUpdatedCallback, onConsoleDataUpdated = OnConsoleDataUpdatedCallback, isKeyPressed = IsKeyPressedFunction, }; PinMameApi.PinmameSetConfig(ref _config); }
internal PinMameAudioInfo(PinMameApi.PinmameAudioInfo audioInfo) { Format = (PinMameAudioFormat)audioInfo.format; Channels = audioInfo.channels; SampleRate = audioInfo.sampleRate; FramesPerSecond = audioInfo.framesPerSecond; SamplesPerFrame = audioInfo.samplesPerFrame; BufferSize = audioInfo.bufferSize; }
/// <summary> /// Creates or retrieves the PinMame instance. /// </summary> /// <param name="audioFormat">Audio format (Int16 / Float)</param> /// <param name="sampleRate">Audio sample rate</param> /// <param name="vpmPath">Fallback path for VPM folder, if VPM is not registered</param> /// <exception cref="ArgumentException">If VPM cannot be found</exception> public static PinMame Instance(PinMameAudioFormat audioFormat = PinMameAudioFormat.AudioFormatInt16, int sampleRate = 48000, string vpmPath = null) => _instance ?? (_instance = new PinMame(audioFormat, sampleRate, vpmPath));