示例#1
0
        internal static void seekTo(int milliseconds)
        {
            if (milliseconds < 0)
            {
                milliseconds = 0;
            }
            else if (milliseconds > AudioLength)
            {
                milliseconds = AudioLength;
            }

            if (AudioState != AudioStates.Stopped)
            {
                if (Math.Abs(milliseconds - Time) > 200)
                {
                    Bass.BASS_ChannelSetPosition(audioStream, (float)(milliseconds + Offset) / 1000);
                }
                AudioState = AudioStates.Seeking;
            }
            else
            {
                cachedSeek = milliseconds + Offset;
            }

            //Time = milliseconds;
            UpdateAudioTime();
        }
 // Token: 0x060000B5 RID: 181 RVA: 0x0001A734 File Offset: 0x00018934
 public void method_36(float float_1)
 {
     if (!this.isSongLoaded)
     {
         return;
     }
     this.PauseSong();
     if (float_1 < 0f)
     {
         float_1 = 0f;
     }
     if ((double)float_1 > this.double_1)
     {
         this.bool_2 = true;
         return;
     }
     this.bool_2 = false;
     for (int i = 0; i < this.stemChannels.Length; i++)
     {
         if (this.stemChannels[i] != 0)
         {
             long num = Bass.BASS_ChannelGetLength(this.stemChannels[i]);
             if (Bass.BASS_ChannelSeconds2Bytes(this.stemChannels[i], (double)float_1) < num)
             {
                 Bass.BASS_ChannelSetPosition(this.stemChannels[i], (double)float_1);
             }
         }
     }
 }
示例#3
0
        //-----------------------------------------------------------------------------------------------
        //ファイルを再生する
        //-----------------------------------------------------------------------------------------------
        public bool PlaySound(string fileName, int vol = 255, bool isLoop = false, double second = 0)
        {
            StopSound();
            playHandle = GetHandle(fileName);

            //if ((Bass.BASS_ChannelFlags(playHandle, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_DEFAULT) & BASSFlag.BASS_SAMPLE_LOOP) == BASSFlag.BASS_SAMPLE_LOOP)
            if (isLoop == false)
            {
                // loop flag was set, so remove it
                Bass.BASS_ChannelFlags(playHandle, BASSFlag.BASS_DEFAULT, BASSFlag.BASS_SAMPLE_LOOP);
            }
            else
            {
                // loop flag was not set, so set it
                Bass.BASS_ChannelFlags(playHandle, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP);
            }

            Bass.BASS_ChannelPlay(playHandle, false);

//			int syncHandle = Bass.BASS_ChannelSetSync(playHandle, BASSSync.BASS_SYNC_END, 0, proc, IntPtr.Zero);
            //		if (syncHandle == 0) throw new InvalidOperationException("cannot set sync");

            Bass.BASS_ChannelSetPosition(playHandle, second);
            SetVolume(vol);
            //ret = Bass.BASS_ChannelGetLength(playHandle);
            m_length = Bass.BASS_ChannelBytes2Seconds(playHandle, Bass.BASS_ChannelGetLength(playHandle));

            return(true);
        }
示例#4
0
        public void Play(List <string> albumTracksUrls)
        {
            if (Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero))
            {
                int stream1 = Bass.BASS_StreamCreateURL(albumTracksUrls[0], 0, BASSFlag.BASS_SAMPLE_MONO, null, IntPtr.Zero);
                int stream2 = Bass.BASS_StreamCreateURL(albumTracksUrls[1], 0, BASSFlag.BASS_SAMPLE_MONO, null, IntPtr.Zero);
                int stream3 = Bass.BASS_StreamCreateURL(albumTracksUrls[2], 0, BASSFlag.BASS_SAMPLE_MONO, null, IntPtr.Zero);

                Bass.BASS_ChannelSetPosition(stream1, Bass.BASS_ChannelSeconds2Bytes(stream1, 0.01), BASSMode.BASS_POS_BYTES);
                Bass.BASS_ChannelSlideAttribute(stream1, BASSAttribute.BASS_ATTRIB_VOL, 0, 0);
                Bass.BASS_ChannelPlay(stream1, false);
                VolumeUpSlow(stream1);
                Bass.BASS_ChannelSlideAttribute(stream1, BASSAttribute.BASS_ATTRIB_VOL, 0, 3000);//volume down
                Thread.Sleep(2500);
                Bass.BASS_ChannelSetPosition(stream2, Bass.BASS_ChannelSeconds2Bytes(stream2, 0.5), BASSMode.BASS_POS_BYTES);
                Bass.BASS_ChannelSlideAttribute(stream2, BASSAttribute.BASS_ATTRIB_VOL, 0, 0);
                Bass.BASS_ChannelPlay(stream2, false);
                Bass.BASS_StreamFree(stream1);
                VolumeUpSlow(stream2);
                Thread.Sleep(3000);
                Bass.BASS_ChannelSlideAttribute(stream2, BASSAttribute.BASS_ATTRIB_VOL, 0, 3000);//volume down
                Bass.BASS_ChannelSlideAttribute(stream3, BASSAttribute.BASS_ATTRIB_VOL, 0, 0);
                Bass.BASS_ChannelPlay(stream3, false);
                VolumeUpSlow(stream3);
                Bass.BASS_StreamFree(stream2);
                Thread.Sleep(5000);
                Bass.BASS_ChannelSlideAttribute(stream3, BASSAttribute.BASS_ATTRIB_VOL, 0, 3000);//volume down
                Thread.Sleep(3000);
                Bass.BASS_StreamFree(stream3);
                // free BASS
                Bass.BASS_Free();
            }
        }
示例#5
0
文件: BASSControl.cs 项目: walney/KMC
        public static void BASSPlayBackEngine(Int64 length, Int64 pos)
        {
            if (MainWindow.Seeking)
            {
                BassMidi.BASS_MIDI_StreamEvent(MainWindow.KMCGlobals._recHandle, 0, BASSMIDIEvent.MIDI_EVENT_NOTESOFF, 0);
                BassVst.BASS_VST_ProcessEvent(MainWindow.VSTs._VSTiHandle, 0, BASSMIDIEvent.MIDI_EVENT_NOTESOFF, 0);

                Bass.BASS_ChannelSetPosition(MainWindow.KMCGlobals._recHandle, MainWindow.CurrentSeek, BASSMode.BASS_POS_MIDI_TICK);
                MainWindow.Seeking = false;
                return;
            }

            Int32 tempo = BassMidi.BASS_MIDI_StreamGetEvent(MainWindow.KMCGlobals._recHandle, 0, BASSMIDIEvent.MIDI_EVENT_TEMPO);

            MainWindow.KMCGlobals.OriginalTempo = 60000000 / tempo;

            Bass.BASS_ChannelFlags(MainWindow.KMCGlobals._recHandle, Properties.Settings.Default.DisableEffects ? BASSFlag.BASS_MIDI_NOFX : 0, BASSFlag.BASS_MIDI_NOFX);
            Bass.BASS_ChannelFlags(MainWindow.KMCGlobals._recHandle, Properties.Settings.Default.NoteOff1 ? BASSFlag.BASS_MIDI_NOTEOFF1 : 0, BASSFlag.BASS_MIDI_NOTEOFF1);

            for (Int32 i = 0; i <= 15; i++)
            {
                BassMidi.BASS_MIDI_StreamEvent(MainWindow.KMCGlobals._recHandle, i, BASSMIDIEvent.MIDI_EVENT_MIXLEVEL, MainWindow.KMCStatus.ChannelsVolume[i]);
            }

            MainWindow.KMCGlobals._VolFXParam.fCurrent = 1.0f;
            MainWindow.KMCGlobals._VolFXParam.fTarget  = Properties.Settings.Default.Volume;
            MainWindow.KMCGlobals._VolFXParam.fTime    = 0.0f;
            MainWindow.KMCGlobals._VolFXParam.lCurve   = 0;
            Bass.BASS_FXSetParameters(MainWindow.KMCGlobals._VolFX, MainWindow.KMCGlobals._VolFXParam);

            Bass.BASS_ChannelSetAttribute(MainWindow.KMCGlobals._recHandle, BASSAttribute.BASS_ATTRIB_MIDI_VOICES, Properties.Settings.Default.Voices);
        }
示例#6
0
 public void Stop()
 {
     this._positionInByte = 0L;
     Bass.BASS_ChannelSetPosition(this._stream, this._positionInByte);
     Bass.BASS_StreamFree(this._stream);
     this._stream = 0;
 }
示例#7
0
 public void SetPosition(int seconds)
 {
     if (_deviceReady && _handle != 0 && GetTrackLength() >= seconds)
     {
         Bass.BASS_ChannelSetPosition(_handle, (double)seconds);
     }
 }
示例#8
0
 public void SetCurrentStreamPosition(double value)
 {
     if (ActiveStreamHandle != 0)
     {
         Bass.BASS_ChannelSetPosition(ActiveStreamHandle, value);
     }
 }
        private static void TransferBytes(int channel, long startByte, long endByte)
        {
            var totalTransferLength = endByte - startByte;

            Bass.BASS_ChannelSetPosition(channel, startByte, BASSMode.BASS_POS_BYTES);
            while (totalTransferLength > 0)
            {
                var buffer = new byte[65536];

                var transferLength = totalTransferLength;
                if (transferLength > buffer.Length)
                {
                    transferLength = buffer.Length;
                }

                // get the decoded sample data
                var transferred = Bass.BASS_ChannelGetData(channel, buffer, (int)transferLength);

                if (transferred < 1)
                {
                    break;                  // error or the end
                }
                totalTransferLength -= transferred;
            }
        }
 private void SliderTrack_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e)
 {
     if (!(Math.Abs(e.NewValue - e.OldValue) <= 1.1))
     {
         Bass.BASS_ChannelSetPosition(Stream, SliderTrack.Value);
     }
 }
示例#11
0
        private Bitmap DrawSpectrogram(string fileName, int height, int stepsPerSecond, IntPtr Handle)
        {
            Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, Handle);
            int channel = Bass.BASS_StreamCreateFile(fileName, 0, 0, BASSFlag.BASS_DEFAULT);

            long   len  = Bass.BASS_ChannelGetLength(channel, BASSMode.BASS_POS_BYTES); // the length in bytes
            double time = Bass.BASS_ChannelBytes2Seconds(channel, len);                 // the length in seconds

            int steps = (int)Math.Floor(stepsPerSecond * time);

            Bitmap   result = new Bitmap(steps, height);
            Graphics g      = Graphics.FromImage(result);

            Visuals visuals = new Visuals();

            Bass.BASS_ChannelPlay(channel, false);

            for (int i = 0; i < steps; i++)
            {
                Bass.BASS_ChannelSetPosition(channel, 1.0 * i / stepsPerSecond);
                visuals.CreateSpectrum3DVoicePrint(channel, g, new Rectangle(0, 0, result.Width, result.Height), Color.Black, Color.White, i, true, true);
            }

            Bass.BASS_ChannelStop(channel);

            Bass.BASS_Stop();
            Bass.BASS_Free();

            return(result);
        }
示例#12
0
 /// <summary>
 /// Sets the current stream position in samples.
 /// </summary>
 /// <param name="position">Number of samples to set the current position to.</param>
 public void SetSamplePosition(long position)
 {
     if (!Bass.BASS_ChannelSetPosition(Handle, position * BassConstants.FloatBytes))
     {
         CheckException("BASS_ChannelSetPosition");
     }
 }
示例#13
0
文件: BassLib.cs 项目: tynidev/BPM
        public int ChangeSpeed(int chan, string loc, float speed)
        {
            // get position to resume playback at
            long pos = Bass.BASS_ChannelGetPosition(chan, BASSMode.BASS_POS_BYTES);

            if (!Bass.BASS_StreamFree(chan))
            {
                GetBassErrorTrow("Could not free stream: " + chan);
            }

            chan = OpenFile(loc, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT);

            chan = BassFx.BASS_FX_TempoCreate(chan, BASSFlag.BASS_SAMPLE_LOOP);
            if (chan == 0)
            {
                GetBassErrorTrow("Could not open file: " + loc);
            }

            if (!Bass.BASS_ChannelSetPosition(chan, pos, BASSMode.BASS_POS_BYTES))
            {
                GetBassErrorTrow("Could not seek to " + pos + " bytes");
            }

            if (!Bass.BASS_ChannelSetAttribute(chan, BASSAttribute.BASS_ATTRIB_TEMPO, CheckTempoRange(speed) - 100))
            {
                GetBassErrorTrow("Could not set attribute: " + BASSAttribute.BASS_ATTRIB_TEMPO);
            }

            return(chan);
        }
        /// <summary>
        ///		This function makes sure your default device is being used, if not, reload Bass and the song back and continue as if nothing happened.
        /// </summary>
        private void CheckDevice()
        {
            if (!BassManager.CheckDevice(streamID))
            {
                var pos  = Bass.BASS_ChannelGetPosition(streamID, BASSMode.BASS_POS_BYTES);
                var secs = TimeSpan.FromSeconds(Bass.BASS_ChannelBytes2Seconds(streamID, pos));

                var state  = Bass.BASS_ChannelIsActive(streamID);
                var volume = 0.3f;

                Bass.BASS_ChannelGetAttribute(streamID, BASSAttribute.BASS_ATTRIB_VOL, ref volume);

                BassManager.Reload();

                Load(lastFile);

                Volume      = volume;
                CurrentTime = secs;

                switch (state)
                {
                case BASSActive.BASS_ACTIVE_PAUSED:
                case BASSActive.BASS_ACTIVE_STOPPED:
                    Bass.BASS_ChannelPause(streamID);
                    Bass.BASS_ChannelSetPosition(streamID, pos, BASSMode.BASS_POS_BYTES);
                    break;

                case BASSActive.BASS_ACTIVE_STALLED:
                case BASSActive.BASS_ACTIVE_PLAYING:
                    Bass.BASS_ChannelPlay(streamID, false);
                    break;
                }
            }
        }
示例#15
0
 private void ProcSync(int handle, int channel, int data, IntPtr user)
 {
     if (!Bass.BASS_ChannelSetPosition(channel, startPos, BASSMode.BASS_POS_BYTES))// try seeking to loop start
     {
         //Bass.BASS_ChannelSetPosition(channel, 0, BASSMode.BASS_POS_BYTES); // failed, go to start of file instead
     }
 }
        public void Stop()
        {
            CheckDevice();

            Bass.BASS_ChannelStop(streamID);
            Bass.BASS_ChannelSetPosition(streamID, 0, BASSMode.BASS_POS_BYTES);
        }
示例#17
0
        public void SetPosition(int iPositionInSecond)
        {
            double pos = System.Convert.ToDouble(iPositionInSecond);

            this._positionInByte = Bass.BASS_ChannelSeconds2Bytes(this._stream, pos);
            Bass.BASS_ChannelSetPosition(this._stream, this._positionInByte);
        }
 private void MainProgressBar_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
 {
     if (_stream != 0)
     {
         Bass.BASS_ChannelSetPosition(_stream, (double)MainProgressBar.Value);
     }
 }
示例#19
0
 public void SetPosition(double position)
 {
     Bass.BASS_ChannelPause(_stream);
     Bass.BASS_ChannelSetPosition(_stream, position);
     Bass.BASS_ChannelPlay(_stream, false);
     vm.AudioPosition = position;
 }
示例#20
0
        public void skipToPostition(double percent)
        {
            long len      = Bass.BASS_ChannelGetLength(Stream, BASSMode.BASS_POS_BYTES);
            long bytesPos = (len * (long)percent) / 100;

            Bass.BASS_ChannelSetPosition(Stream, bytesPos);
        }
示例#21
0
        async void Position_Change()
        {
            while (Visibility == Visibility.Visible)
            {
                if (IsEnded)
                {
                    await Task.Delay(500);

                    Bass.BASS_ChannelPause(Stream);
                    Bass.BASS_ChannelSetPosition(Stream, 0, BASSMode.BASS_POS_BYTES);
                    IsPaused         = true;
                    IsEnded          = false;
                    Location_S.Value = 0;
                    Location_T.Text  = "00:00";
                }
                if (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_PLAYING && !IsLocationChanging)
                {
                    long position = Bass.BASS_ChannelGetPosition(Stream);
                    Location_S.Value = Bass.BASS_ChannelBytes2Seconds(Stream, position);
                    TimeSpan Time    = TimeSpan.FromSeconds(Location_S.Value);
                    string   Minutes = Time.Minutes.ToString();
                    string   Seconds = Time.Seconds.ToString();
                    if (Time.Minutes < 10)
                    {
                        Minutes = "0" + Time.Minutes;
                    }
                    if (Time.Seconds < 10)
                    {
                        Seconds = "0" + Time.Seconds;
                    }
                    Location_T.Text = Minutes + ":" + Seconds;
                }
                await Task.Delay(100);
            }
        }
        public void Pause()
        {
            var pos = Bass.BASS_ChannelGetPosition(streamID, BASSMode.BASS_POS_BYTES);

            Bass.BASS_ChannelPause(streamID);

            Bass.BASS_ChannelSetPosition(streamID, pos, BASSMode.BASS_POS_BYTES);
        }
示例#23
0
 public void StopSample(int _stream)
 {
     if (_stream != 0)
     {
         Bass.BASS_SampleStop(_stream);
         Bass.BASS_ChannelSetPosition(Bass.BASS_SampleGetChannel(_stream, false), 0);
     }
 }
示例#24
0
 /// <summary>
 /// Sets the current playback position
 /// </summary>
 /// <param name="position">The desired position, in percent (0 - 1)</param>
 public void SetPosition(double position)
 {
     if (streamHandle != 0)
     {
         var channelLength = Bass.BASS_ChannelGetLength(streamHandle, 0);
         Bass.BASS_ChannelSetPosition(streamHandle, (long)(position * channelLength));
     }
 }
 private void MainProgressBar_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
 {
     if (_stream != 0)
     {
         _maintimer.Start();
     }
     Bass.BASS_ChannelSetPosition(_stream, (double)MainProgressBar.Value);
 }
示例#26
0
 /// <summary>
 /// 再生位置を変更する
 /// </summary>
 /// <param name="ms"></param>
 public void setPosition(uint ms)
 {
     if (sound[PlayerController.MainChannel] != 0)
     {
         long position = Bass.BASS_ChannelSeconds2Bytes(sound[PlayerController.MainChannel], (double)((double)ms / 1000));
         Bass.BASS_ChannelSetPosition(sound[PlayerController.MainChannel], position);
     }
 }
示例#27
0
 internal static void checkCachedSeek()
 {
     if (cachedSeek >= 0)
     {
         Bass.BASS_ChannelSetPosition(audioStream, (float)(cachedSeek - Offset) / 1000);
         cachedSeek = -1;
     }
 }
示例#28
0
 public void StopStream(int _stream)
 {
     if (_stream != 0)
     {
         Bass.BASS_ChannelStop(_stream);
         Bass.BASS_ChannelSetPosition(_stream, 0);
     }
 }
示例#29
0
        public void PlaySample(Sample sample)
        {
            BassMix.BASS_Mixer_ChannelPause(sample.Channel);

            Bass.BASS_ChannelSetPosition(sample.Channel, 1);

            BassMix.BASS_Mixer_ChannelPlay(sample.Channel);
        }
示例#30
0
 internal static void Stop()
 {
     Time       = 0;
     cachedSeek = -1;
     Bass.BASS_ChannelSetPosition(audioStream, 0);
     Bass.BASS_ChannelStop(audioStream);
     AudioState = AudioStates.Stopped;
 }