예제 #1
0
 /// <summary>
 ///     Use to fade the volume of a song.
 /// </summary>
 public CrossFade(AudioWave wIN, AudioWave wOut)
 {
     if (wIN != null && wOut != null)
     {
         _waveIn  = wIN;
         _waveOut = wOut; foreach (var v in _waveIn.WorkingReactors)
         {
             if (v.Contains(POOL_PREFIX))
             {
                 if (ReactorPool.Pool.ContainsKey(v))
                 {
                     ReactorPool.Pool[v].ForceStop();
                 }
                 if (ReactorPool.Pool.ContainsKey(v))
                 {
                     ReactorPool.Pool[v].Dispose();
                 }
             }
         }
         foreach (var v in _waveOut.WorkingReactors)
         {
             if (v.Contains(POOL_PREFIX))
             {
                 if (ReactorPool.Pool.ContainsKey(v))
                 {
                     ReactorPool.Pool[v].ForceStop();
                 }
                 if (ReactorPool.Pool.ContainsKey(v))
                 {
                     ReactorPool.Pool[v].Dispose();
                 }
             }
         }
     }
 }
예제 #2
0
파일: Cycler.cs 프로젝트: ninjawerk/Safire2
        public static void PrevSong()
        {
            if (Items.trackSource != null)
            {
                int ind = 0;
                if (Items.trackSource.Tag != null)
                {
                    ind = (int)Items.trackSource.Tag;
                    ind--;


                    if (ind < 0)
                    {
                        return;
                    }
                    Items.trackSource.Tag = ind;
                    var tracky = Items.trackSource.Items[ind] as TrackViewModel;

                    if (tracky != null && File.Exists(tracky.Path))
                    {
                        var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, 1.0f);
                        aw.ReactorUsageLocked = true;
                        aw.Play();
                        aw.ReactorUsageLocked = false;
                        var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true,
                                                Player.Instance.Volume);
                        fader.StartAndKill();

                        Player.Instance.NewMedia(ref aw);
                        //Player.Instance.Play();
                    }
                }
            }
        }
예제 #3
0
파일: WaveExport.cs 프로젝트: q4a/SparkIV
        public static void Export(AudioFile file, AudioWave wave, Stream outStream)
        {
            WaveHeader header = new WaveHeader();

            // Skip the header
            outStream.Seek(header.HeaderSize, SeekOrigin.Begin);

            // Write the data
            file.SoundBank.ExportAsPCM(wave.Index, file.Stream, outStream);

            // Create header and write it
            outStream.Seek(0, SeekOrigin.Begin);
            header.FileSize         = (int)outStream.Length;
            header.SamplesPerSecond = wave.SamplesPerSecond;
            header.Write(new BinaryWriter(outStream));
        }
예제 #4
0
        public static void Export(AudioFile file, AudioWave wave, Stream outStream)
        {
            WaveHeader header = new WaveHeader();
            
            // Skip the header
            outStream.Seek(header.HeaderSize, SeekOrigin.Begin);

            // Write the data
            file.SoundBank.ExportAsPCM(wave.Index, file.Stream, outStream);

            // Create header and write it
            outStream.Seek(0, SeekOrigin.Begin);
            header.FileSize = (int)outStream.Length;
            header.SamplesPerSecond = wave.SamplesPerSecond;
            header.Write(new BinaryWriter(outStream));
        }
예제 #5
0
        void lst_PreviewMouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            var track = lst.SelectedItem as Web.LFM.TopTracks.Track;

            if (track != null && !String.IsNullOrEmpty(track.Available))
            {
                var aw = new AudioWave(track.Path, OutputMode.DirectSound, Player.Instance.Volume);
                aw.ReactorUsageLocked = true;
                aw.Play();
                aw.ReactorUsageLocked = false;
                var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true, Player.Instance.Volume);
                fader.StartAndKill();

                Player.Instance.NewMedia(ref aw);
            }
        }
예제 #6
0
        /// <summary>
        ///     Use to fade the volume of a song.
        /// </summary>

        /// <param name="interval">Thread loop time in ticks</param>
        /// <param name="duration">Total duration for the fade</param>
        /// <param name="Drop">FadeOut</param>
        /// <param name="reach">Ceiling for fade In</param>
        public PanFade(AudioWave wIN, AudioWave wOut, int interval, float duration, bool Drop, float reach)
        {
            if (wIN != null && wOut != null)
            {
                _reachcap = reach;
                jump      = 1 / (duration / interval);
                _drop     = Drop;
                _waveIn   = wIN;
                _waveOut  = wOut;
                foreach (var v in _waveIn.WorkingReactors)
                {
                    if (v.Contains(POOL_PREFIX))
                    {
                        if (ReactorPool.Pool.ContainsKey(v))
                        {
                            ReactorPool.Pool[v].ForceStop();
                        }
                        if (ReactorPool.Pool.ContainsKey(v))
                        {
                            ReactorPool.Pool[v].Dispose();
                        }
                    }
                }
                foreach (var v in _waveOut.WorkingReactors)
                {
                    if (v.Contains(POOL_PREFIX))
                    {
                        if (ReactorPool.Pool.ContainsKey(v))
                        {
                            ReactorPool.Pool[v].ForceStop();
                        }
                        if (ReactorPool.Pool.ContainsKey(v))
                        {
                            ReactorPool.Pool[v].Dispose();
                        }
                    }
                }
                FadeThread = new DispatcherTimer(DispatcherPriority.Normal)
                {
                    Interval = new TimeSpan(interval * TimeSpan.TicksPerMillisecond)
                };
                FadeThread.Tick += FadeThread_Tick;
                _startVol        = 0;
            }
        }
예제 #7
0
        private void tracklist_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            tracklist.Tag     = tracklist.SelectedIndex;
            Items.trackSource = tracklist;
            var tracky = tracklist.SelectedItem as TrackViewModel;

            if (tracky != null && File.Exists(tracky.Path))
            {
                var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, Player.Instance.Volume);
                aw.ReactorUsageLocked = true;
                aw.Play();
                aw.ReactorUsageLocked = false;
                var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true, Player.Instance.Volume);
                fader.StartAndKill();
                Player.Instance.NewMedia(ref aw);
                //Player.Instance.Play();
            }
        }
예제 #8
0
        public bool SignalExternalCommandLineArgs(IList <string> args)
        {
            if (args.Count > 1)
            {
                var cm1 = args[1];
                if (!string.IsNullOrEmpty(cm1))
                {
                    var aw = new AudioWave(cm1, OutputMode.DirectSound, Player.Instance.Volume);
                    aw.ReactorUsageLocked = true;
                    aw.Play();
                    aw.ReactorUsageLocked = false;
                    var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true, Player.Instance.Volume);
                    fader.StartAndKill();

                    Player.Instance.NewMedia(ref aw);
                }
            }
            return(true);
        }
예제 #9
0
        void nt_Click(object sender, RoutedEventArgs e)
        {
            var fluidLink = sender as FluidLink;

            if (fluidLink != null)
            {
                var track = fluidLink.Tag.ToString();
                if (track != null)
                {
                    var aw = new AudioWave(track, OutputMode.DirectSound, Player.Instance.Volume);
                    aw.ReactorUsageLocked = true;
                    aw.Play();
                    aw.ReactorUsageLocked = false;
                    var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true, Player.Instance.Volume);
                    fader.StartAndKill();

                    Player.Instance.NewMedia(ref aw);
                }
            }
        }
예제 #10
0
 /// <summary>
 ///     Use to fade the volume of a song.
 /// </summary>
 /// <param name="ad">Audio Wave to utilize</param>
 /// <param name="mode">Mode of fade</param>
 /// <param name="interval">Thread loop time in ticks</param>
 /// <param name="duration">Total duration for the fade</param>
 /// <param name="Drop">FadeOut</param>
 /// <param name="reach">Ceiling for fade In</param>
 public Fader(AudioWave ad, FadeMode mode, int interval, float duration, bool Drop, float reach)
 {
     if (ad != null)
     {
         _reachcap  = reach;
         jump       = 1 / (duration / interval);
         _drop      = Drop;
         _mywave    = ad;
         _myMode    = mode;
         FadeThread = new DispatcherTimer(DispatcherPriority.Normal)
         {
             Interval = new TimeSpan(interval * TimeSpan.TicksPerMillisecond)
         };
         FadeThread.Tick += FadeThread_Tick;
         _startVol        = _drop ? ad.Volume : 0;
         try
         {
             foreach (var v in _mywave.WorkingReactors)
             {
                 if (v.Contains(POOL_PREFIX))
                 {
                     if (ReactorPool.Pool.ContainsKey(v))
                     {
                         ReactorPool.Pool[v].ForceStop();
                     }
                     if (ReactorPool.Pool.ContainsKey(v))
                     {
                         ReactorPool.Pool[v].Dispose();
                     }
                 }
             }
         }
         catch (Exception e)
         {
             Console.WriteLine(e);
         }
     }
 }
예제 #11
0
파일: Cycler.cs 프로젝트: ninjawerk/Safire2
        static void Instance_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "TrackEnded" && !Player.Instance.Wave.Stopped)
                {
                    switch (Mode)
                    {
                    case CycleMode.Repeat:
                    {
                        if (CoreMain.CurrentTrack != null)
                        {
                            var tracky = CoreMain.CurrentTrack;

                            if (tracky != null && File.Exists(tracky.Path))
                            {
                                var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, Player.Instance.Volume);
                                aw.ReactorUsageLocked = true;
                                aw.Play();
                                aw.ReactorUsageLocked = false;
                                var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true,
                                                        Player.Instance.Volume);
                                fader.StartAndKill();

                                Player.Instance.NewMedia(ref aw);
                                //Player.Instance.Play();
                            }
                        }
                    }
                    break;

                    case CycleMode.SongCycle:
                    {
                        if (Items.trackSource != null)
                        {
                            int ind = 0;
                            if (Items.trackSource.Tag != null)
                            {
                                ind = (int)Items.trackSource.Tag;
                                ind++;


                                if (Items.trackSource.Items.Count < ind)
                                {
                                    return;
                                }
                                Items.trackSource.Tag = ind;
                                var tracky = Items.trackSource.Items[ind] as TrackViewModel;

                                if (tracky != null && File.Exists(tracky.Path))
                                {
                                    var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, Player.Instance.Volume);
                                    aw.ReactorUsageLocked = true;
                                    aw.Play();
                                    aw.ReactorUsageLocked = false;
                                    var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true,
                                                            Player.Instance.Volume);
                                    fader.StartAndKill();

                                    Player.Instance.NewMedia(ref aw);
                                    //Player.Instance.Play();
                                }
                            }
                        }
                    }
                    break;

                    case CycleMode.CycleRepeat:
                    {
                        if (Items.trackSource != null)
                        {
                            int ind = (int)Items.trackSource.Tag;
                            if (Items.trackSource.Tag != null)
                            {
                                ind++;
                            }
                            if (getEnuCount(Items.trackSource.ItemsSource) <= ind)
                            {
                                ind = 0;
                            }

                            var tracky = Items.trackSource.Items[ind] as TrackViewModel;
                            Items.trackSource.Tag = ind;
                            if (tracky != null && File.Exists(tracky.Path))
                            {
                                var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, Player.Instance.Volume);
                                aw.ReactorUsageLocked = true;
                                aw.Play();
                                aw.ReactorUsageLocked = false;
                                var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true,
                                                        Player.Instance.Volume);
                                fader.StartAndKill();

                                Player.Instance.NewMedia(ref aw);
                                //Player.Instance.Play();
                            }
                        }
                    }
                    break;

                    case CycleMode.Shuffle:
                    {
                        if (Items.trackSource != null)
                        {
                            if (Items.trackSource.GetHashCode() != TrackSourceHash)
                            {
                                PrepShuffles(getEnuCount(Items.trackSource.ItemsSource));
                                TrackSourceHash = Items.trackSource.GetHashCode();
                            }
                            int ind = (int)Items.trackSource.Tag;
                            if (Items.trackSource.Tag != null)
                            {
                                ind++;
                            }
                            if (getEnuCount(Items.trackSource.ItemsSource) <= ind)
                            {
                                ind = 0;
                            }

                            var tracky = Items.trackSource.Items[Shuffles[ind]] as TrackViewModel;
                            Items.trackSource.Tag = ind;
                            if (tracky != null && File.Exists(tracky.Path))
                            {
                                var aw = new AudioWave(tracky.Path, OutputMode.DirectSound, Player.Instance.Volume);
                                aw.ReactorUsageLocked = true;
                                aw.Play();
                                aw.ReactorUsageLocked = false;
                                var fader = new PanFade(aw, Player.Instance.Wave, 10, 2000, true,
                                                        Player.Instance.Volume);
                                fader.StartAndKill();

                                Player.Instance.NewMedia(ref aw);
                                //Player.Instance.Play();
                            }
                        }
                    }
                    break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
            }
        }