Example #1
0
        private async Task RipTrack(ICdDrive cdDrive, Track track, TrackIdentification trackIdentification, CancellationToken token)
        {
            var currentTrackNumber = track.TrackNumber;

            using (var reader = new TrackReader(cdDrive))
            {
                var settings = _settings.Get();
                using (var lame = new LameMp3Encoder(new EncoderSettings
                {
                    Track = trackIdentification,
                    Mp3Settings = new Mp3Settings
                    {
                        Bitrate = settings.BitRate,
                        Type = settings.BitRateType
                    },
                    Output = new OutputLocationBuilder(settings.MusicCollectionRoot, settings.FileNameMask)
                }))
                {
                    reader.Progress += (read, bytes) =>
                    {
                        var percentageComplete = Math.Round(((double)read / (double)bytes) * 100d, 0);
                        _tracker.RippingProgress(currentTrackNumber, percentageComplete);
                    };
                    await reader.ReadTrack(track, lame.Write, token);
                }
            }
        }
Example #2
0
        private string CreateFileName(TrackIdentification track)
        {
            var replacements = new Dictionary <string, string>
            {
                { "{title}", track.Title },
                { "{artist}", track.Artist },
                { "{genre}", track.Genre },
                { "{tracknumber}", track.TrackNumber.ToString("00") },
                { "{albumartist}", track.AlbumArtist },
                { "{numberoftracks}", track.TotalNumberOfTracks.ToString("00") },
                { "{albumtitle}", track.AlbumTitle },
                { "{year}", track.Year }
            };

            foreach (var character in Path.GetInvalidFileNameChars())
            {
                if (character != Path.DirectorySeparatorChar && character != Path.AltDirectorySeparatorChar)
                {
                    replacements.Add(character.ToString(), string.Empty);
                }
            }

            var fileName = CaseInsentiveReplace(FileNameMask, replacements);

            return(Path.Combine(BaseDirectory, fileName));
        }
Example #3
0
        public OutputLocation PrepareOutput(TrackIdentification track)
        {
            var fileName  = CreateFileName(track);
            var directory = CreateDirectory(fileName);
            var coverFile = CreateCoverFile(directory, track);

            return(new OutputLocation(fileName, coverFile));
        }
Example #4
0
 private void AddTrackNumber(StringBuilder builder, TrackIdentification track)
 {
     if (track.TrackNumber > 0 && track.TotalNumberOfTracks > 0)
     {
         AddSwitch(builder, "--tn", string.Format("{0}/{1}", track.TrackNumber, track.TotalNumberOfTracks));
     }
     else if (track.TrackNumber > 0 && track.TotalNumberOfTracks <= 0)
     {
         AddSwitch(builder, "--tn", track.TrackNumber.ToString("N"));
     }
 }
Example #5
0
        public void TestIllegalCharactersInFileName()
        {
            var output = new OutputLocationBuilder(@"c:\test", @"tr*??//
ack.mp3");


            var track    = new TrackIdentification();
            var filename = output.PrepareOutput(track);

            Assert.That(filename.FileName, Is.EqualTo(@"c:\test\tr//ack.mp3"));
        }
        private void AssertTrack(TrackIdentification actualTrack, TrackIdentification expectedTrack)
        {
            Assert.That(actualTrack.Genre, Is.Null, "Genre is not yet implemented");

            Assert.That(actualTrack.Title, Is.EqualTo(expectedTrack.Title), "Title");
            Assert.That(actualTrack.Artist, Is.EqualTo(expectedTrack.Artist), "Artist");
            Assert.That(actualTrack.TrackNumber, Is.EqualTo(expectedTrack.TrackNumber), "TrackNumber");
            Assert.That(actualTrack.AlbumArtist, Is.EqualTo(expectedTrack.AlbumArtist), "AlbumArtist on track");
            Assert.That(actualTrack.AlbumTitle, Is.EqualTo(expectedTrack.AlbumTitle), "AlbumTitle on track");
            Assert.That(actualTrack.Year, Is.EqualTo(expectedTrack.Year), "Year on track");
            Assert.That(actualTrack.TotalNumberOfTracks, Is.EqualTo(expectedTrack.TotalNumberOfTracks), "TotalNumberOfTracks on track");
        }
Example #7
0
        private string CreateCoverFile(DirectoryInfo directory, TrackIdentification track)
        {
            if (track.AlbumArt == null)
            {
                return(null);
            }

            var coverFile = Path.Combine(directory.ToString(), "cover.jpg");

            if (File.Exists(coverFile))
            {
                return(coverFile);
            }

            using (var client = new WebClient())
            {
                client.DownloadFile(track.AlbumArt, coverFile);
            }

            return(coverFile);
        }
        public void TestTrackCreatingFakeDLL(string arg, int times)
        {
            var data = new List <string>();

            for (int i = 0; i < times; i++)
            {
                data.Add(arg);
            }

            var transData = new RawTransponderDataEventArgs(data);

            var trackidentifier = new TrackIdentification(_receiver);

            try
            {
                _receiver.TransponderDataReady += Raise.EventWith(new object(), transData);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            Assert.AreEqual(times, trackidentifier.Tracks.Count);
        }
Example #9
0
 public LameArgumentBuilder(EncoderSettings settings)
 {
     _track         = settings.Track ?? AlbumIdentification.GetEmpty(1).Tracks.First();
     _mp3Settings   = settings.Mp3Settings ?? Mp3Settings.Default;
     _trackLocation = settings.Output.PrepareOutput(_track) ?? OutputLocationBuilder.Default.PrepareOutput(_track);
 }