//设置播放源文件 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); }
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; } }
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(); }
public static extern int BASS_ChannelSetDSP(int handle, DSPPROC proc, IntPtr user, int priority);
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()); } }
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); }