public void UpdateSampleFromTrack(Sample sample, Track track)
        {
            sample.TrackArtist = track.Artist;
            sample.TrackTitle = track.Title;
            sample.TrackLength = track.FullLength;
            sample.Key = track.Key;

            var genre = track.Genre.ToLower();
            if (!sample.Tags.Contains(genre)) sample.Tags.Add(genre);
        }
 private static Module.Sample GetNewModuleSample(Sample librarySample)
 {
     return new Module.Sample
     {
         Start = librarySample.Start,
         Length = librarySample.Length,
         Offset = librarySample.Offset,
         Key = librarySample.Description
     };
 }
 public SampleModel(Sample sample)
 {
     Description = sample.TrackArtist + " - " + sample.TrackTitle + " - " + sample.Description;
     Tags = string.Join(", ", sample.Tags.ToArray());
     LengthFormatted = TimeFormatHelper.GetFormattedHours(Convert.ToDecimal(sample.Length));
     Length = Convert.ToDecimal(sample.Length);
     Bpm = sample.Bpm;
     Sample = sample;
     Key = sample.IsAtonal
         ? "Atonal"
         : KeyHelper.GetDisplayKey(sample.Key);
 }
 private string GetSampleKey(Sample sample)
 {
     return SampleLibrary.GetTrackFromSample(sample).Description + "." + sample.Description;
 }
        public List<Sample> GetMixSectionsAsSamples(Track track)
        {
            var bassTrack = BassPlayer.LoadTrackAndAudio(track.Filename);
            var samples = new List<Sample>();

            var fadeIn = new Sample
            {
                Description = "FadeIn",
                Start = bassTrack.SamplesToSeconds(bassTrack.FadeInStart),
                Length = bassTrack.FadeOutLengthSeconds
            };

            UpdateSampleFromTrack(fadeIn, track);

            samples.Add(fadeIn);

            var fadeOut = new Sample
            {
                Description = "FadeOut",
                Start = bassTrack.SamplesToSeconds(bassTrack.FadeOutStart),
                Length = bassTrack.FadeOutLengthSeconds
            };

            UpdateSampleFromTrack(fadeOut, track);

            samples.Add(fadeOut);

            if (bassTrack.UsePreFadeIn)
            {
                var preFadeIn = new Sample
                {
                    Description = "preFadeIn",
                    Start = bassTrack.SamplesToSeconds(bassTrack.PreFadeInStart),
                    Length = bassTrack.SamplesToSeconds(bassTrack.FadeInStart - bassTrack.PreFadeInStart),
                    LoopMode = LoopMode.PartialLoopAnchorEnd
                };

                UpdateSampleFromTrack(preFadeIn, track);

                samples.Add(preFadeIn);
            }

            BassPlayer.UnloadTrackAudioData(bassTrack);

            return samples;
        }
        public void CalculateSampleKey(Sample sample)
        {
            var track = GetTrackFromSample(sample);
            if (track == null) return;

            KeyHelper.CalculateKey(track.Filename);
            TrackLibrary.LoadTrack(track.Filename);

            var samples = GetTrackSamples(track);

            samples.ForEach(x => x.Key = track.Key);
        }
        private string GetSampleFolder(Sample sample)
        {
            var sampleFolder = Path.Combine(SampleLibraryFolder,
                FileSystemHelper.StripInvalidFileNameChars(sample.TrackArtist));

            var titleFolder = $"{sample.TrackTitle} ({TimeFormatHelper.GetFormattedSeconds(sample.TrackLength)})";
            titleFolder = FileSystemHelper.StripInvalidFileNameChars(titleFolder);

            sampleFolder = Path.Combine(sampleFolder, titleFolder);

            return sampleFolder;
        }
 public string GetSampleFileName(Sample sample)
 {
     var filename = FileSystemHelper.StripInvalidFileNameChars(sample.Description + ".wav");
     return Path.Combine(GetSampleFolder(sample), filename);
 }
        private void CreateSampleFolder(Sample sample)
        {
            var sampleFolder = Path.Combine(SampleLibraryFolder,
                FileSystemHelper.StripInvalidFileNameChars(sample.TrackArtist));

            if (!Directory.Exists(sampleFolder))
                Directory.CreateDirectory(sampleFolder);

            var titleFolder = $"{sample.TrackTitle} ({TimeFormatHelper.GetFormattedSeconds(sample.TrackLength)})";
            titleFolder = FileSystemHelper.StripInvalidFileNameChars(titleFolder);

            sampleFolder = Path.Combine(sampleFolder, titleFolder);

            if (!Directory.Exists(sampleFolder))
                Directory.CreateDirectory(sampleFolder);
        }
        private void SaveSampleFile(AudioStream audioStream, Sample sample)
        {
            var sampleFolder = GetSampleFolder(sample);

            if (!Directory.Exists(sampleFolder))
                CreateSampleFolder(sample);

            var sampleFile = GetSampleFileName(sample);

            AudioExportHelper.SavePartialAsWave(audioStream.Filename, sampleFile, sample.Start, sample.Length, sample.Offset, sample.Gain);
        }
 public void EnsureSampleExists(Sample sample)
 {
     if (!File.Exists(GetSampleFileName(sample)))
     {
         SaveSampleFiles(GetTrackFromSample(sample));
     }
 }
 public Track GetTrackFromSample(Sample sample)
 {
     return TrackLibrary.GetTrack(sample.TrackArtist, sample.TrackTitle, sample.TrackLength);
 }
        private void AddSample()
        {
            var sampleName = UserInputHelper.GetUserInput("Sample Name", "", this);
            if (sampleName == "") return;

            var sample = new Sample
            {
                Description = sampleName
            };

            if (LibraryTrack != null)
                SampleLibrary.UpdateSampleFromTrack(sample, LibraryTrack);

            Samples.Add(sample);
            CurrentSample = sample;
            trackWave.CurrentSample = sample;
            trackWave.Samples = Samples;

            sample.Start = Track.SamplesToSeconds(trackWave.ZoomStart);
            sample.Length = Track.SamplesToSeconds(trackWave.ZoomEnd - trackWave.ZoomStart);
            sample.Bpm = BpmHelper.GetBpmFromLoopLength(sample.Length);

            RefreshTrackWavePositions();

            BindData();
        }