public void LoadStartJumpChannel(string fileName) { StartJumpChannelHandle = ChannelFactory.Create(fileName); if (!StartJumpChannelHandle.Valid) { throw new Exception("Failed to load start boost channel."); } Bass.BASS_ChannelSetAttribute(StartJumpChannelHandle.Handle, BASSAttribute.BASS_ATTRIB_VOL, 0f); StartJumpChannelSyncs.Add( new Sync( StartJumpChannelHandle, BASSSync.BASS_SYNC_END, (handle, channel, data, user) => { if (JumpChannelHandle != null) { var volume = 0.0f; Bass.BASS_ChannelGetAttribute(StartJumpChannelHandle.Handle, BASSAttribute.BASS_ATTRIB_VOL, ref volume); if (volume > 0.0f) { Bass.BASS_ChannelSetAttribute(JumpChannelHandle.Handle, BASSAttribute.BASS_ATTRIB_VOL, MaximumVolume); } Bass.BASS_ChannelPlay(JumpChannelHandle.Handle, true); } } ) ); StartJumpChannelSyncs.Add( new Sync( StartJumpChannelHandle, BASSSync.BASS_SYNC_SLIDE | BASSSync.BASS_SYNC_MIXTIME, (handle, channel, data, user) => { var volume = 0.0f; Bass.BASS_ChannelGetAttribute(StartJumpChannelHandle.Handle, BASSAttribute.BASS_ATTRIB_VOL, ref volume); if (volume >= MaximumVolume * 0.5f) { Console.WriteLine($"Will fade. Volume {volume} hit."); _fadeJumpNextFrame = true; } } ) ); }
public void Dispose() { StartLoopChannelSyncs.ForEach(sync => sync.Dispose()); StartBoostChannelSyncs.ForEach(sync => sync.Dispose()); StartJumpChannelSyncs.ForEach(sync => sync.Dispose()); StartFlightChannelSyncs.ForEach(sync => sync.Dispose()); LoopChannelSyncs.ForEach(sync => sync.Dispose()); JumpChannelSyncs.ForEach(sync => sync.Dispose()); FlightChannelSyncs.ForEach(sync => sync.Dispose()); StartLoopChannelHandle?.Dispose(); StartBoostChannelHandle?.Dispose(); StartJumpChannelHandle?.Dispose(); StartFlightChannelHandle?.Dispose(); LoopChannelHandle?.Dispose(); JumpChannelHandle?.Dispose(); FlightChannelHandle?.Dispose(); }