diff --git a/Kiva-MIDI/BASSMIDI.cs b/Kiva-MIDI/BASSMIDI.cs index 0cbdefc..84dd6d2 100644 --- a/Kiva-MIDI/BASSMIDI.cs +++ b/Kiva-MIDI/BASSMIDI.cs @@ -28,21 +28,38 @@ public class BASSMIDI : ISampleSource static object sfLock = new object(); + public static bool IsPreRender() + { + Settings s = new Settings(); + + if (s.General.SelectedAudioEngine != AudioEngine.PreRender) + return false; + + return true; + } + public static void InitBASS(WaveFormat format) { WaveFormatStatic = format; - Bass.BASS_Free(); + + if (!IsPreRender()) + return; + if (!Bass.BASS_Init(0, WaveFormatStatic.SampleRate, BASSInit.BASS_DEVICE_NOSPEAKER, IntPtr.Zero)) throw new Exception(); } - public static void DisposeBASS() + public static void CloseBASS() { - Bass.BASS_Free(); + if (!Bass.BASS_Free()) + throw new Exception(); } public BASSMIDI(int voices, bool nofx = true) { + if (!IsPreRender()) + return; + Handle = BassMidi.BASS_MIDI_StreamCreate(16, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE | @@ -79,6 +96,9 @@ public static void FreeSoundfonts() public static void LoadSoundfonts(SoundfontData[] soundfonts) { + if (!IsPreRender()) + return; + lock (sfLock) { FreeSoundfonts(); diff --git a/Kiva-MIDI/MIDIAudio.cs b/Kiva-MIDI/MIDIAudio.cs index 493e62e..32cc3f4 100644 --- a/Kiva-MIDI/MIDIAudio.cs +++ b/Kiva-MIDI/MIDIAudio.cs @@ -125,11 +125,6 @@ public int SkippingVelocity AudioBufferStream audioStream; ISoundOut soundOut; - public static void Init() - { - BASSMIDI.InitBASS(format); - } - private ISoundOut GetSoundOut() { if (WasapiOut.IsSupportedOnCurrentPlatform) @@ -140,6 +135,7 @@ private ISoundOut GetSoundOut() public MIDIAudio(int bufferLength) { + BASSMIDI.InitBASS(format); AudioBuffer = new float[bufferLength * 2]; audioStream = new AudioBufferStream(this); soundOut = GetSoundOut(); diff --git a/Kiva-MIDI/MIDIPreRenderPlayer.cs b/Kiva-MIDI/MIDIPreRenderPlayer.cs index 8e566bb..61f494b 100644 --- a/Kiva-MIDI/MIDIPreRenderPlayer.cs +++ b/Kiva-MIDI/MIDIPreRenderPlayer.cs @@ -180,6 +180,7 @@ public void Dispose() { ma.Dispose(); BASSMIDI.FreeSoundfonts(); + BASSMIDI.CloseBASS(); disposed = true; syncThread.GetAwaiter().GetResult(); settings.Soundfonts.SoundfontsUpdated -= OnSoundfontsChanged; diff --git a/Kiva-MIDI/Program.cs b/Kiva-MIDI/Program.cs index 56ca684..87adf7c 100644 --- a/Kiva-MIDI/Program.cs +++ b/Kiva-MIDI/Program.cs @@ -25,8 +25,6 @@ static void Main(string[] args) #endif Directory.SetCurrentDirectory(Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)); - MIDIAudio.Init(); - var s = new Settings(); s.InitSoundfontListner(); if (s.EnableUpdates) diff --git a/Kiva-MIDI/Settings/WinMMAudioSettings.xaml.cs b/Kiva-MIDI/Settings/WinMMAudioSettings.xaml.cs index eb58ae9..ea55c9b 100644 --- a/Kiva-MIDI/Settings/WinMMAudioSettings.xaml.cs +++ b/Kiva-MIDI/Settings/WinMMAudioSettings.xaml.cs @@ -52,6 +52,10 @@ public WinMMAudioSettings() MIDIOUTCAPS device; WinMM.midiOutGetDevCaps(i, out device, (uint)Marshal.SizeOf(typeof(MIDIOUTCAPS))); name = device.szPname; + + if (name == "OmniMIDI") + continue; + var item = new Grid() { Tag = new DeviceData() { id = i, name = name },