public static void Free() { if (!IsInitialized) { return; } if (Info != null) { var flags = AsioChannelResetFlags.Enable | AsioChannelResetFlags.Join | AsioChannelResetFlags.Format | AsioChannelResetFlags.Rate; Logger.Write(typeof(BassAsioDevice), LogLevel.Debug, "Resetting BASS ASIO channel attributes."); for (var channel = 0; channel < Info.Outputs; channel++) { BassAsio.ChannelReset(false, channel, flags); } } Logger.Write(typeof(BassAsioDevice), LogLevel.Debug, "Releasing BASS ASIO."); BassAsio.Free(); BassAsioHandler.Free(); IsInitialized = false; }
internal override void Close() { Bass.ChannelStop(MixerStream); BassAsio.Stop(); BassAsio.ChannelReset(false, 0, AsioChannelResetFlags.Enable | AsioChannelResetFlags.Join); //BassAsio.CurrentDevice = AsioDevNum; BassAsio.Free(); FreeDevice(0); Cfg.AsioProcs.Remove(dAsioProc); }
public static void Free() { if (!IsInitialized) { return; } LogManager.Logger.Write(typeof(BassAsioDevice), LogLevel.Debug, "Releasing BASS ASIO."); BassAsio.Free(); BassAsioHandler.Free(); IsInitialized = false; }
internal override void ShowAsioPanel() { int tmp = -1; //device to init temporarily int sel = Frm.cmbAudioOutput.SelectedIndex; int dev = BassAsio.CurrentDevice; if (sel >= 0) { if (sel != dev) { tmp = sel; BassAsio.Init(tmp, AsioInitFlags.None); //(asiodev, flags) } clsBassOutMidi.CheckOK(BassAsio.ControlPanel()); } if (tmp >= 0) { BassAsio.Free(); } }
public void Test001() { if (!Bass.Init(Bass.NoSoundDevice, OUTPUT_RATE)) { Assert.Fail(string.Format("Failed to initialize BASS: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } var sourceChannel = Bass.CreateStream(@"D:\Source\Prototypes\Resources\1 - 6 - DYE (game version).mp3", 0, 0, BassFlags.Decode | BassFlags.Float); if (sourceChannel == 0) { Assert.Fail(string.Format("Failed to create source stream: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } if (!BassSox.Init()) { Assert.Fail("Failed to initialize SOX."); } var playbackChannel = BassSox.StreamCreate(OUTPUT_RATE, BassFlags.Decode | BassFlags.Float, sourceChannel); if (playbackChannel == 0) { Assert.Fail(string.Format("Failed to create playback stream: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } BassSox.ChannelSetAttribute(playbackChannel, SoxChannelAttribute.BufferLength, 5); BassSox.ChannelSetAttribute(playbackChannel, SoxChannelAttribute.Background, true); if (!BassAsio.Init(2, AsioInitFlags.Thread)) { Assert.Fail(string.Format("Failed to initialize ASIO: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } if (!BassSoxAsio.StreamSet(playbackChannel)) { Assert.Fail("Failed to set ASIO stream."); } if (!BassSoxAsio.ChannelEnable(false, 0)) { Assert.Fail(string.Format("Failed to enable ASIO: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } if (!BassAsio.ChannelJoin(false, 1, 0)) { Assert.Fail(string.Format("Failed to enable ASIO: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } if (!BassAsio.ChannelSetRate(false, 0, OUTPUT_RATE)) { Assert.Fail(string.Format("Failed to set ASIO rate: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } if (!BassAsio.ChannelSetFormat(false, 0, AsioSampleFormat.Float)) { Assert.Fail(string.Format("Failed to set ASIO format: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } BassAsio.Rate = OUTPUT_RATE; if (!BassAsio.Start()) { Assert.Fail(string.Format("Failed to start ASIO: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } var channelLength = Bass.ChannelGetLength(sourceChannel); var channelLengthSeconds = Bass.ChannelBytes2Seconds(sourceChannel, channelLength); Bass.ChannelSetPosition(sourceChannel, Bass.ChannelSeconds2Bytes(sourceChannel, channelLengthSeconds - 10)); do { if (Bass.ChannelIsActive(sourceChannel) == PlaybackState.Stopped) { break; } var channelPosition = Bass.ChannelGetPosition(sourceChannel); var channelPositionSeconds = Bass.ChannelBytes2Seconds(sourceChannel, channelPosition); Console.WriteLine( "{0}/{1}", TimeSpan.FromSeconds(channelPositionSeconds).ToString("g"), TimeSpan.FromSeconds(channelLengthSeconds).ToString("g") ); Thread.Sleep(1000); } while (true); BassAsio.Stop(); BassSox.StreamFree(playbackChannel); Bass.StreamFree(sourceChannel); BassSox.Free(); BassSoxAsio.Free(); BassAsio.Free(); Bass.Free(); }
public void Test001() { if (!Bass.Init(Bass.NoSoundDevice)) { Assert.Fail(string.Format("Failed to initialize BASS: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } if (!BassAsio.Init(2, AsioInitFlags.Thread)) { Assert.Fail(string.Format("Failed to initialize ASIO: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } if (!BassGapless.Init() || !BassGaplessAsio.Init()) { Assert.Fail("Failed to initialize GAPLESS."); } var sourceChannel1 = Bass.CreateStream(@"D:\Source\Prototypes\Resources\01 Botanical Dimensions.flac", 0, 0, BassFlags.Decode | BassFlags.Float); if (sourceChannel1 == 0) { Assert.Fail(string.Format("Failed to create source stream: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } var sourceChannel2 = Bass.CreateStream(@"D:\Source\Prototypes\Resources\02 Outer Shpongolia.flac", 0, 0, BassFlags.Decode | BassFlags.Float); if (sourceChannel2 == 0) { Assert.Fail(string.Format("Failed to create source stream: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } var channelInfo = default(ChannelInfo); if (!Bass.ChannelGetInfo(sourceChannel1, out channelInfo)) { Assert.Fail(string.Format("Failed to get channel info: {0}", Enum.GetName(typeof(Errors), Bass.LastError))); } if (!BassGapless.ChannelEnqueue(sourceChannel1)) { Assert.Fail("Failed to add stream to gapless queue."); } if (!BassGapless.ChannelEnqueue(sourceChannel2)) { Assert.Fail("Failed to add stream to gapless queue."); } var sourceChannelCount = default(int); var sourceChannels = BassGapless.GetChannels(out sourceChannelCount); if (sourceChannelCount != 2) { Assert.Fail("Gapless reports unexpected queued channel count."); } if (sourceChannels[0] != sourceChannel1 || sourceChannels[1] != sourceChannel2) { Assert.Fail("Gapless reports unexpected queued channel handles."); } { var ok = true; ok &= BassGaplessAsio.ChannelEnable(false, 0); ok &= BassAsio.ChannelJoin(false, 1, 0); ok &= BassAsio.ChannelSetFormat(false, 0, AsioSampleFormat.Float); ok &= BassAsio.ChannelSetRate(false, 0, channelInfo.Frequency); if (!ok) { Assert.Fail("Failed to configure ASIO."); } } if (!BassAsio.Start()) { Assert.Fail(string.Format("Failed to start ASIO: {0}", Enum.GetName(typeof(Errors), BassAsio.LastError))); } var channelLength = Bass.ChannelGetLength(sourceChannel1); var channelLengthSeconds = Bass.ChannelBytes2Seconds(sourceChannel1, channelLength); Bass.ChannelSetPosition(sourceChannel1, Bass.ChannelSeconds2Bytes(sourceChannel1, channelLengthSeconds - 10)); do { var channelActive1 = Bass.ChannelIsActive(sourceChannel1); var channelActive2 = Bass.ChannelIsActive(sourceChannel2); if (channelActive1 == PlaybackState.Stopped && channelActive2 == PlaybackState.Stopped) { break; } var channelPosition = Bass.ChannelGetPosition(sourceChannel2); var channelPositionSeconds = Bass.ChannelBytes2Seconds(sourceChannel2, channelPosition); if (channelPositionSeconds >= 10) { break; } Thread.Sleep(1000); } while (true); if (BassGapless.ChannelRemove(sourceChannel1)) { Assert.Fail("Queued gapless channel should have been removed."); } if (!BassGapless.ChannelRemove(sourceChannel2)) { Assert.Fail("Failed to remove queued gapless channel."); } BassAsio.Stop(); Bass.StreamFree(sourceChannel1); Bass.StreamFree(sourceChannel2); BassGapless.Free(); BassGaplessAsio.Free(); BassAsio.Free(); Bass.Free(); }