/// <summary> /// Converts the given CD/DVD/BD drive letter to a number suiteable for BASS. /// </summary> /// <param name="driveLetter">Drive letter to convert.</param> /// <returns>Bass id of the given <paramref name="driveLetter"/>.</returns> public static int Drive2BassID(char driveLetter) { lock (_syncObj) { for (int i = 0; i < 26; i++) { BASS_CD_INFO cdInfo = BassCd.BASS_CD_GetInfo(i, true); if (cdInfo != null && cdInfo.DriveLetter == driveLetter) { return(i); } } } return(-1); }
public override void LoadSettings() { using (Settings reader = new MPSettings()) { ckEnableCDSpeed.Checked = reader.GetValueAsBool("cdspeed", "enabled", false); _speedTableCD = reader.GetValueAsString("cdspeed", "drivespeedCD", string.Empty); _disableCD = reader.GetValueAsString("cdspeed", "disableCD", string.Empty); _speedTableDVD = reader.GetValueAsString("cdspeed", "drivespeedDVD", string.Empty); _disableDVD = reader.GetValueAsString("cdspeed", "disableDVD", string.Empty); } // On first use, the table are empty and need to be filled with the max speed if (_speedTableCD == string.Empty || _speedTableDVD == string.Empty) { BASS_CD_INFO cdinfo = new BASS_CD_INFO(); StringBuilder builder = new StringBuilder(); StringBuilder builderDisable = new StringBuilder(); for (int i = 0; i < _driveCount; i++) { if (builder.Length != 0) { builder.Append(", "); } if (builderDisable.Length != 0) { builderDisable.Append(", "); } BassCd.BASS_CD_GetInfo(i, cdinfo); int maxspeed = (int)(cdinfo.maxspeed / 176.4); builder.Append(Convert.ToString(maxspeed)); builderDisable.Append("N"); } _speedTableCD = builder.ToString(); _speedTableDVD = builder.ToString(); _disableCD = builderDisable.ToString(); _disableDVD = builderDisable.ToString(); } FillGrid(); }
/// <summary> /// Fired, when the visibilty of the Grid changes /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void GridViewRip_VisibleChanged(object sender, EventArgs e) { _main.RipButtonsEnabled = false; if (!Visible || _freeDBLookupActive) { return; } for (int i = 0; i < BassCd.BASS_CD_GetDriveCount(); i++) { if (BassCd.BASS_CD_IsReady(i)) { BASS_CD_INFO cdInfo = BassCd.BASS_CD_GetInfo(i); mediaChangeMonitor_MediaInserted(cdInfo.DriveLetter.ToString()); _main.CurrentDirectory = string.Format("{0}:", cdInfo.DriveLetter.ToString()); _main.TreeView.TreeView.ShowFolder(_main.CurrentDirectory); break; } } }
private void btnPlay_Click(object sender, EventArgs e) { if (ifFirst == true) { if (filename != string.Empty) { stream = BassCd.BASS_CD_StreamCreateFile(filename, BASSFlag.BASS_SAMPLE_FLOAT); Bass.BASS_ChannelPlay(stream, true); ifFirst = false; BASS_CD_INFO info = new BASS_CD_INFO(); BassCd.BASS_CD_GetInfo(stream, info); Pos.Enabled = true; } else { DMSkin.MetroMessageBox.Show(this, "No Stream read"); } } else if (ifFirst == false) { Bass.BASS_ChannelPlay(stream, false); } }
/// <summary> /// Converts the given CD/DVD Drive Letter to a number suiteable for BASS /// </summary> /// <param name = "driveLetter"></param> /// <returns></returns> public static int Drive2BassID(char driveLetter) { BASS_CD_INFO cdinfo = new BASS_CD_INFO(); for (int i = 0; i < 25; i++) { if (BassCd.BASS_CD_GetInfo(i, cdinfo)) { if (cdinfo.DriveLetter == driveLetter) return i; } } return -1; }
private static void doStop(bool keepTimeShifting, bool keepExclusiveModeOn) { if (driveSpeedReduced) { // Set the CD/DVD Speed back to Max Speed BASS_CD_INFO cdinfo = new BASS_CD_INFO(); for (int i = 0; i < _driveCount; i++) { BassCd.BASS_CD_GetInfo(i, cdinfo); int maxspeed = (int)(cdinfo.maxspeed / 176.4); BassCd.BASS_CD_SetSpeed(i, maxspeed); BassCd.BASS_CD_Release(i); } } if (_player != null) { Log.Debug("g_Player.doStop() keepTimeShifting = {0} keepExclusiveModeOn = {1}", keepTimeShifting, keepExclusiveModeOn); // Get playing file for unmount handling string currentFile = g_Player.currentFileName; OnStopped(); //since plugins could stop playback, we need to make sure that _player is not null. if (_player == null) { return; } GUIGraphicsContext.ShowBackground = true; if (!keepTimeShifting && !keepExclusiveModeOn) { Log.Debug("g_Player.doStop() - stop"); _player.Stop(); } else if (keepExclusiveModeOn) { Log.Debug("g_Player.doStop() - stop, keep exclusive mode on"); _player.Stop(true); } else { Log.Debug("g_Player.doStop() - StopAndKeepTimeShifting"); _player.StopAndKeepTimeShifting(); } if (GUIGraphicsContext.form != null) { GUIGraphicsContext.form.Invalidate(true); } GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_PLAYBACK_STOPPED, 0, 0, 0, 0, 0, null); GUIWindowManager.SendThreadMessage(msg); GUIGraphicsContext.IsFullScreenVideo = false; GUIGraphicsContext.IsPlaying = false; GUIGraphicsContext.IsPlayingVideo = false; CachePlayer(); _chapters = null; _chaptersname = null; _jumpPoints = null; if (!keepExclusiveModeOn && !keepTimeShifting) { RefreshRateChanger.AdaptRefreshRate(); } // No unmount for other ISO (avi-mkv ISO-crash in playlist after) Util.Utils.IsDVDImage(currentFile, ref currentFile); if (Util.Utils.IsISOImage(currentFile)) { if (!String.IsNullOrEmpty(DaemonTools.GetVirtualDrive()) && IsBDDirectory(DaemonTools.GetVirtualDrive()) || IsDvdDirectory(DaemonTools.GetVirtualDrive())) { DaemonTools.UnMount(); } } } }
/// <summary> /// Retrieve the CD/DVD Speed set in the config file /// </summary> public static void LoadDriveSpeed() { string speedTableCD = string.Empty; string speedTableDVD = string.Empty; string disableCD = string.Empty; string disableDVD = string.Empty; using (Settings xmlreader = new MPSettings()) { speedTableCD = xmlreader.GetValueAsString("cdspeed", "drivespeedCD", string.Empty); disableCD = xmlreader.GetValueAsString("cdspeed", "disableCD", string.Empty); speedTableDVD = xmlreader.GetValueAsString("cdspeed", "drivespeedDVD", string.Empty); disableDVD = xmlreader.GetValueAsString("cdspeed", "disableDVD", string.Empty); driveSpeedControlEnabled = xmlreader.GetValueAsBool("cdspeed", "enabled", false); } if (!driveSpeedControlEnabled) { return; } // if BASS is not the default audio engine, we need to load the CD Plugin first if (!BassMusicPlayer.IsDefaultMusicPlayer) { // Load the CD Plugin string appPath = Application.StartupPath; string decoderFolderPath = Path.Combine(appPath, @"musicplayer\plugins\audio decoders"); BassRegistration.BassRegistration.Register(); int pluginHandle = Bass.BASS_PluginLoad(decoderFolderPath + "\\basscd.dll"); } // Get the number of CD/DVD drives _driveCount = BassCd.BASS_CD_GetDriveCount(); StringBuilder builderDriveLetter = new StringBuilder(); // Get Drive letters assigned for (int i = 0; i < _driveCount; i++) { builderDriveLetter.Append(BassCd.BASS_CD_GetInfo(i).DriveLetter); } _driveLetters = builderDriveLetter.ToString(); if (speedTableCD == string.Empty || speedTableDVD == string.Empty) { BASS_CD_INFO cdinfo = new BASS_CD_INFO(); StringBuilder builder = new StringBuilder(); StringBuilder builderDisable = new StringBuilder(); for (int i = 0; i < _driveCount; i++) { if (builder.Length != 0) { builder.Append(","); } if (builderDisable.Length != 0) { builderDisable.Append(", "); } BassCd.BASS_CD_GetInfo(i, cdinfo); int maxspeed = (int)(cdinfo.maxspeed / 176.4); builder.Append(Convert.ToInt32(maxspeed).ToString()); builderDisable.Append("N"); } speedTableCD = builder.ToString(); speedTableDVD = builder.ToString(); disableCD = builderDisable.ToString(); disableDVD = builderDisable.ToString(); } _driveSpeedCD = speedTableCD.Split(','); _driveSpeedDVD = speedTableDVD.Split(','); _disableCDSpeed = disableCD.Split(','); _disableDVDSpeed = disableDVD.Split(','); driveSpeedLoaded = true; BassMusicPlayer.ReleaseCDDrives(); }
/// <summary> /// Detects if an audio CD/DVD/BD is contained in the given <paramref name="drive"/>. /// </summary> /// <param name="drive">The drive to be examined.</param> /// <param name="tracks">Returns a collection of audio tracks for the audio CD in the given <paramref name="drive"/>.</param> /// <param name="extractedMIATypeIDs">IDs of the media item aspect types which were extracted from the returned <paramref name="tracks"/>.</param> /// <returns><c>true</c>, if an audio CD was identified, else <c>false</c>.</returns> public static bool DetectAudioCD(DriveInfo driveInfo, out ICollection <MediaItem> tracks, out ICollection <Guid> extractedMIATypeIDs) { tracks = null; extractedMIATypeIDs = null; string drive = driveInfo.Name; if (string.IsNullOrEmpty(drive) || drive.Length < 2) { return(false); } drive = drive.Substring(0, 2); // Clip potential '\\' at the end try { IList <BassUtils.AudioTrack> audioTracks = BassUtils.GetAudioTracks(drive); // BassUtils can report wrong audio tracks for some devices, we filter out "Duration = -1" here audioTracks = audioTracks?.Where(t => t.Duration > 0).ToList(); if (audioTracks == null || audioTracks.Count == 0) { return(false); } ISystemResolver systemResolver = ServiceRegistration.Get <ISystemResolver>(); string systemId = systemResolver.LocalSystemId; tracks = new List <MediaItem>(audioTracks.Count); char driveChar = drive[0]; int driveId = BassUtils.Drive2BassID(driveChar); if (driveId > -1) { BASS_CD_INFO info = BassCd.BASS_CD_GetInfo(driveId); if (info.cdtext) { string[] tags = BassCd.BASS_CD_GetIDText(driveId); string album = GetCDText(tags, "TITLE"); string albumArtist = GetCDText(tags, "PERFORMER"); foreach (BassUtils.AudioTrack track in audioTracks) { tracks.Add(CreateMediaItem(track, driveChar, audioTracks.Count, systemId, album, albumArtist, album, albumArtist, irsc: BassCd.BASS_CD_GetISRC(driveId, track.TrackNo - 1))); } } else { foreach (BassUtils.AudioTrack track in audioTracks) { tracks.Add(CreateMediaItem(track, driveChar, audioTracks.Count, systemId, irsc: BassCd.BASS_CD_GetISRC(driveId, track.TrackNo - 1))); } } BassCd.BASS_CD_Release(driveId); } else { foreach (BassUtils.AudioTrack track in audioTracks) { tracks.Add(CreateMediaItem(track, driveChar, audioTracks.Count, systemId)); } } extractedMIATypeIDs = new List <Guid> { ProviderResourceAspect.ASPECT_ID, MediaAspect.ASPECT_ID, AudioAspect.ASPECT_ID, ExternalIdentifierAspect.ASPECT_ID, }; } catch (IOException) { ServiceRegistration.Get <ILogger>().Warn("Error enumerating tracks of audio CD in drive {0}", drive); tracks = null; return(false); } return(true); }
public override void SaveSettings() { DataTable dt = dataGrid1.DataSource as DataTable; StringBuilder builderCD = new StringBuilder(); StringBuilder builderDVD = new StringBuilder(); StringBuilder builderDisableCD = new StringBuilder(); StringBuilder builderDisableDVD = new StringBuilder(); BASS_CD_INFO cdinfo = new BASS_CD_INFO(); int i = 0; try { foreach (DataRow row in dt.Rows) { if (builderCD.Length != 0) { builderCD.Append(","); } if (builderDVD.Length != 0) { builderDVD.Append(","); } if (builderDisableCD.Length != 0) { builderDisableCD.Append(","); } if (builderDisableDVD.Length != 0) { builderDisableDVD.Append(","); } BassCd.BASS_CD_GetInfo(i, cdinfo); int maxspeed = (int)(cdinfo.maxspeed / 176.4); int selectedSpeedCD = int.Parse((row[2].ToString())); int selectedSpeedDVD = int.Parse((row[4].ToString())); if (selectedSpeedCD > maxspeed) { selectedSpeedCD = maxspeed; } if (selectedSpeedDVD > maxspeed) { selectedSpeedDVD = maxspeed; } builderCD.Append(selectedSpeedCD.ToString()); builderDVD.Append(selectedSpeedDVD.ToString()); string sel = (bool)row[3] ? "Y" : "N"; builderDisableCD.Append(sel); sel = (bool)row[5] ? "Y" : "N"; builderDisableDVD.Append(sel); i++; } } catch (Exception) {} using (Settings writer = new MPSettings()) { writer.SetValueAsBool("cdspeed", "enabled", ckEnableCDSpeed.Checked); writer.SetValue("cdspeed", "drivespeedCD", builderCD.ToString()); writer.SetValue("cdspeed", "drivespeedDVD", builderDVD.ToString()); writer.SetValue("cdspeed", "disableCD", builderDisableCD.ToString()); writer.SetValue("cdspeed", "disableDVD", builderDisableDVD.ToString()); } }