Example #1
0
 /// <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);
 }
Example #2
0
        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();
        }
Example #3
0
        /// <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;
                }
            }
        }
Example #4
0
 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);
     }
 }
Example #5
0
 /// <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;
 }
Example #6
0
    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();
          }
        }
      }
    }
Example #7
0
 /// <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();
 }
Example #8
0
        /// <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);
        }
Example #9
0
    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());
      }
    }
Example #10
0
    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();
    }
Example #11
0
        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());
            }
        }