public static int LoadMidiMusic(MidiEvent[] events, int pulsesPerQuarterNode, uint frequency) { if (soundFont == 0) { var assembly = Assembly.GetExecutingAssembly(); var stream = assembly.GetManifestResourceStream(SoundFontResource); // Don't dispose it! soundFontProcs = SoundFontStream.CreateSoundFontFileProcs(stream); soundFont = NativeBass.BASS_MIDI_FontInitUser(soundFontProcs, IntPtr.Zero, 0u); } const DWORD loop = 0x04u; int music = NativeBass.BASS_MIDI_StreamCreateEvents(events, (DWORD)pulsesPerQuarterNode, loop, frequency); var fonts = new NativeBass.MidiFont[] { new NativeBass.MidiFont() { Font = soundFont, Preset = -1, Bank = 0 } }; NativeBass.BASS_MIDI_StreamSetFonts(music, fonts, 1u); return(music); }
public static void EnsureBass() { if (!Initialized) { Initialized = NativeBass.BASS_Init(-1, 44100u, 0u, 0, IntPtr.Zero); } }
public static void FreeBass() { if (Initialized) { foreach (var createdChannel in createdChannels.ToList()) { switch (createdChannel.Value) { case Music.Type.Mod: FreeModMusic(createdChannel.Key); break; case Music.Type.Sfx: FreeSfxMusic(createdChannel.Key); break; case Music.Type.Midi: FreeMidiMusic(createdChannel.Key); break; } } streamProviders.Clear(); NativeBass.BASS_Free(); } }
public static int LoadSfxMusic(byte[] data) { const DWORD Mono = 0x0002u; var streamProvider = new WaveStreamProvider(data); NativeBass.StreamProcedure streamProc = streamProvider.StreamProcedure; int music = NativeBass.BASS_StreamCreate(8000u, 1u, Mono, streamProc, IntPtr.Zero); streamProviders.Add(music, streamProc); createdChannels.Add(music, Music.Type.Sfx); return(music); }
public static int LoadModMusic(byte[] data) { unsafe { fixed(byte *ptr = data) { const DWORD MusicPT1Mod = 0x4000u; int music = NativeBass.BASS_MusicLoad(true, ptr, 0ul, (DWORD)data.Length, MusicPT1Mod, 44100u); createdChannels.Add(music, Music.Type.Mod); return(music); } } }
public static void Pause(int music) { NativeBass.BASS_ChannelPause((DWORD)music); }
public static void SetVolume(int music, float volume) { const DWORD Volume = 0x02u; NativeBass.BASS_ChannelSetAttribute((DWORD)music, Volume, volume); }
public static void Play(int music, bool restart) { NativeBass.BASS_ChannelPlay((DWORD)music, restart); }
public static void Stop(int music) { NativeBass.BASS_ChannelStop((DWORD)music); }
public static void PauseAll() { NativeBass.BASS_Pause(); }
public static void StopAll() { NativeBass.BASS_Stop(); }
public static void StartAll() { NativeBass.BASS_Start(); }
public static void FreeMidiMusic(int music) { createdChannels.Remove(music); NativeBass.BASS_StreamFree(music); }
public static void FreeModMusic(int music) { createdChannels.Remove(music); NativeBass.BASS_MusicFree(music); }