Beispiel #1
0
        //设置播放源文件
        public void SelectFile(string fileName)
        {
            this._fileName = fileName;

            if (_stream != 0)
            {
                _updateTimer.Stop();
                Bass.BASS_StreamFree(_stream);
            }

            // create the stream
            _stream = Bass.BASS_StreamCreateFile(_fileName, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
            // set dsp
            _myDSPAddr = new DSPPROC(MyDSPGainUnsafe);
            Bass.BASS_ChannelSetDSP(_stream, _myDSPAddr, IntPtr.Zero, 2);

            //if (_stream != 0)
            //{
            //    // get some channel info
            //    //info = new BASS_CHANNELINFO();
            //    //Bass.BASS_ChannelGetInfo(_stream, info);
            //    // get the tags...
            //    //tagInfo = new TAG_INFO(_fileName);
            //}

            GetWaveForm();

        }
 public SampleVM()
 {
     /* set up the player and visualizer */
     timeline = new WavTimeline();
     effectVM = new EffectsVM();
     echo = new BASS_DX8_ECHO(50, 0, 0, 0, false);
     decimate = new BASS_DX8_DISTORTION(20, 0, 100, 100, 100);
     bitcrush = new DSPPROC(bitcrushCallback);
     effectVM.PropertyChanged += new PropertyChangedEventHandler(effectPropertyChanged);
 }
Beispiel #3
0
 public BaseDSP()
 {
     _bitwidth    = 0x10;
     _samplerate  = 0xac44;
     _numchans    = 2;
     _channelInfo = new BASS_CHANNELINFO();
     _user        = IntPtr.Zero;
     _dspProc     = new DSPPROC(DSPCallback);
     if (Un4seen.Bass.Bass.BASS_GetConfig(BASSConfig.BASS_CONFIG_FLOATDSP) == 1)
     {
         _bitwidth = 0x20;
     }
 }
Beispiel #4
0
 public BaseDSP()
 {
     _bitwidth = 0x10;
     _samplerate = 0xac44;
     _numchans = 2;
     _channelInfo = new BASS_CHANNELINFO();
     _user = IntPtr.Zero;
     _dspProc = new DSPPROC(DSPCallback);
     if (Un4seen.Bass.Bass.BASS_GetConfig(BASSConfig.BASS_CONFIG_FLOATDSP) == 1)
     {
         _bitwidth = 0x20;
     }
 }
Beispiel #5
0
        private void button1_Click(object sender, EventArgs e)
        {
            _updateTimer.Stop();
            Bass.BASS_StreamFree(stream);

            if (favorites.Count > 0 && playFavorites.Checked)
            {
                song = int.Parse(favorites[favoriteIndex]);
                favoriteIndex++;

                if (favoriteIndex >= favorites.Count)
                {
                    favoriteIndex = 0;
                }
            }
            else
            {
                song = rand.Next(1, 189357);
            }

            isFavorite.Checked = isFavorited(song);

            using (var client = new WebClient())
            {
                client.DownloadFile($@"https://api.modarchive.org/downloads.php?moduleid={song}", "song.tmp");
            }

            lblSong.Text = $"Mod Archive #{song}";
            lblSong.Tag  = song;

            stream = Bass.BASS_StreamCreateFile(@"song.tmp", 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);

            myDSPAddr = new DSPPROC(MyDSPGainUnsafe);
            Bass.BASS_ChannelSetDSP(stream, myDSPAddr, IntPtr.Zero, 2);

            Bass.BASS_ChannelPlay(stream, true);
            _updateTimer.Start();
        }
Beispiel #6
0
 public static extern int BASS_ChannelSetDSP(int handle, DSPPROC proc, IntPtr user, int priority);
Beispiel #7
0
        private void btnPlay_Click(object sender, EventArgs e)
        {
            updateTimer.Stop();
            Bass.BASS_StreamFree(stream);
            if (filename != string.Empty)
            {
                stream = Bass.BASS_StreamCreateFile(filename, 0, 0, BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
                if (stream != 0)
                {
                    mslength           = (int)Bass.BASS_ChannelSeconds2Bytes(stream, 0.03);
                    deviceLatencyBytes = (int)Bass.BASS_ChannelSeconds2Bytes(stream, deviceLatencyMS / 1000.0);

                    myDSPAddr = new DSPPROC(MyDSPGain);
                    Bass.BASS_ChannelSetDSP(stream, myDSPAddr, IntPtr.Zero, 2);

                    if (WF2 != null && WF2.IsRendered)
                    {
                        WF2.SyncPlayback(stream);

                        long cuein  = WF2.GetMarker("CUE");
                        long cueout = WF2.GetMarker("END");

                        int cueinFrame  = WF2.Position2Frames(cuein);
                        int cueoutFrame = WF2.Position2Frames(cueout);

                        if (cuein >= 0)
                        {
                            Bass.BASS_ChannelSetPosition(stream, cuein);
                        }
                        if (cueout >= 0)
                        {
                            Bass.BASS_ChannelRemoveSync(stream, syncer);
                            syncer = Bass.BASS_ChannelSetSync(stream, BASSSync.BASS_SYNC_POS, cueout, sync, IntPtr.Zero);
                        }
                    }
                }

                if (stream != 0 && Bass.BASS_ChannelPlay(stream, false))
                {
                    textBox1.Text = "";
                    updateTimer.Start();

                    BASS_CHANNELINFO info = new BASS_CHANNELINFO();
                    Bass.BASS_ChannelGetInfo(stream, info);

                    textBox1.Text += "Info: " + info.ToString() + Environment.NewLine;

                    TAG_INFO tagInfo = new TAG_INFO();
                    if (BassTags.BASS_TAG_GetFromFile(stream, tagInfo))
                    {
                        textBoxAlbum.Text   = tagInfo.album;
                        textBoxArtist.Text  = tagInfo.artist;
                        textBoxTitle.Text   = tagInfo.title;
                        textBoxComment.Text = tagInfo.comment;
                        textBoxGenre.Text   = tagInfo.genre;
                        textBoxYear.Text    = tagInfo.year;
                        textBoxTrack.Text   = tagInfo.track;
                    }

                    btnStop.Enabled = true;
                    btnPlay.Enabled = false;
                }
            }
        }
        public HttpInfinitePlaySource(string address, DownloadTypes downloadMode,
            IEventAggregator positionEventAggregator)
        {
            OnGetPosition += RefreshPositions;
            _positionEventAggregator = positionEventAggregator;
            _subscriptionToken = _positionEventAggregator.GetEvent<HttpPositionEvent>().Subscribe(GetReadPosition);
            _downloadType = downloadMode;
            _downloadProcURL = (_downloadType == DownloadTypes.NoDownload)
                ? null
                : new DOWNLOADPROC(DownloadProc);

            Path = address;

            DownloadStream = Bass.BASS_StreamCreateURL(Path, 0,
                BASSFlag.BASS_STREAM_AUTOFREE|BASSFlag.BASS_STREAM_STATUS |BASSFlag.BASS_SAMPLE_FLOAT, _downloadProcURL, IntPtr.Zero);

            BASSError error = Bass.BASS_ErrorGetCode();

            if (DownloadStream == 0)
                throw new ArgumentException("Parameter cannot be null", error.ToString());

            _syncProcMeta = new SYNCPROC(SyncMethodMeta);

            Bass.BASS_ChannelSetSync(DownloadStream, BASSSync.BASS_SYNC_WMA_META, 0, _syncProcMeta, IntPtr.Zero);
            Bass.BASS_ChannelSetSync(DownloadStream, BASSSync.BASS_SYNC_OGG_CHANGE, 0, _syncProcMeta, IntPtr.Zero);
            Bass.BASS_ChannelSetSync(DownloadStream, BASSSync.BASS_SYNC_META, 0, _syncProcMeta, IntPtr.Zero);
            Bass.BASS_ChannelSetSync(DownloadStream, BASSSync.BASS_SYNC_WMA_CHANGE, 0, _syncProcMeta, IntPtr.Zero);

            _previousTags = new List<Tag>();
            Tags = new TrackTags(DownloadStream, SourceType);
            Tags.GetIcyMetaTags(DownloadStream);
            ChannelInfo = Bass.BASS_ChannelGetInfo(DownloadStream);

            if (ProcessMusic())
            {
                _bufferFileStream = new FileStream("RadioBuffer", FileMode.OpenOrCreate, FileAccess.ReadWrite);
                _DSPHandler = new DSPPROC(DSPProc);
                _streamProc = new STREAMPROC(StreamRead);
                DSP = Bass.BASS_ChannelSetDSP(DownloadStream, _DSPHandler, IntPtr.Zero, 0);
                Stream = Bass.BASS_StreamCreate(ChannelInfo.freq, ChannelInfo.chans,
                    BASSFlag.BASS_STREAM_DECODE|BASSFlag.BASS_SAMPLE_FLOAT, _streamProc, IntPtr.Zero);

                Bass.BASS_ChannelPlay(DownloadStream, false);
                Bass.BASS_ChannelSetAttribute(DownloadStream, BASSAttribute.BASS_ATTRIB_VOL, 0);
                StreamFX = BassFx.BASS_FX_TempoCreate(Stream, BASSFlag.BASS_FX_FREESOURCE | BASSFlag.BASS_SAMPLE_FX);
            }
            else
            {
                error = Bass.BASS_ErrorGetCode();
                throw new ArgumentException("Parameter cannot be null", error.ToString());
            }
        }
Beispiel #9
0
 public static extern int BASS_ChannelSetDSP(int handle, DSPPROC proc, IntPtr user, int priority);
        internal HolofunkBassAsioInput(HolofunkBassAsio bassAsio, int asioChannel, BufferAllocator<float> audioAllocator)
        {
            m_bassAsio = bassAsio;
            m_asioChannel = asioChannel;

            // buffer one second's worth of audio; that will always be more than we need to look at
            m_recentPastStream = new DenseSampleFloatStream(
                default(Time<Sample>),
                audioAllocator,
                1, // input channels are mono
                maxBufferedDuration: Clock.TimepointRateHz);

            m_inputToInputPushStreamAsioProc = new ASIOPROC(InputToInputPushStreamAsioProc);

            // create input push stream; this receives data pushed from ASIO's input, and feeds the mixer
            m_inputPushStream = (StreamHandle)Bass.BASS_StreamCreatePush(
                Clock.TimepointRateHz,
                HolofunkBassAsio.InputChannelCount,
                BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT,
                new IntPtr(m_asioChannel));

            // connect to ASIO input channel
            CheckError(BassAsio.BASS_ASIO_ChannelEnable(
                HolofunkBassAsio.IsInputChannel,
                m_asioChannel,
                m_inputToInputPushStreamAsioProc,
                new IntPtr(m_asioChannel)));

            // join right channel if we have more than one input channel
            // (this is not generalized for >stereo)
            if (HolofunkBassAsio.InputChannelCount == 2) {
                CheckError(BassAsio.BASS_ASIO_ChannelJoin(HolofunkBassAsio.IsInputChannel, 1, m_asioChannel));
            }

            // set format and rate of input channel
            CheckError(BassAsio.BASS_ASIO_ChannelSetFormat(HolofunkBassAsio.IsInputChannel, m_asioChannel, BASSASIOFormat.BASS_ASIO_FORMAT_FLOAT));
            CheckError(BassAsio.BASS_ASIO_ChannelSetRate(HolofunkBassAsio.IsInputChannel, m_asioChannel, Clock.TimepointRateHz));

            // add input push stream to mixer
            CheckError(BassMix.BASS_Mixer_StreamAddChannel(
                (int)m_bassAsio.MixerHStream,
                (int)m_inputPushStream,
                BASSFlag.BASS_MIXER_DOWNMIX | BASSFlag.BASS_MIXER_NORAMPIN));

            // set up the input effects (aka microphone effects)
            m_inputPushEffects = AllEffects.CreateLoopEffectSet(m_inputPushStream, m_bassAsio.BaseForm);

            // connect peak level meter to input push stream
            m_plmRec = new DSP_PeakLevelMeter((int)m_inputPushStream, 0);
            m_plmRec.Notification += new EventHandler(Plm_Rec_Notification);

            // Register DSPPROC handler for input channel.  Make sure to hold the DSPPROC itself.
            // See documentation for BassAsioHandler.InputChannel
            m_inputDspProc = new DSPPROC(InputDspProc);

            // set up our recording DSP -- priority 10 hopefully means "run first first first!"
            CheckError(Bass.BASS_ChannelSetDSP((int)m_inputPushStream, m_inputDspProc, new IntPtr(0), 10) != 0);
        }