/// <summary>
        ///     Removes and audio stream from a mixer.
        /// </summary>
        /// <param name="audioStream">The audio stream.</param>
        /// <param name="mixerChannel">The mixer channel.</param>
        public static void RemoveFromMixer(AudioStream audioStream, MixerChannel mixerChannel)
        {
            if (audioStream == null || !audioStream.IsAudioLoaded())
            {
                return;
            }

            //throw new Exception("Audio file null or not audio not loaded");

            if (mixerChannel.ChannelId == int.MinValue)
            {
                throw new Exception("Mixer channel not initialized");
            }

            //lock (Lock)
            {
                // DebugHelper.WriteLine($"RemoveFromMixer {audioStream.Description} {audioStream.Channel}...");
                BassMix.BASS_Mixer_ChannelPause(audioStream.ChannelId);
                Bass.BASS_ChannelLock(mixerChannel.ChannelId, true);

                foreach (var channel in audioStream.ChannelIds)
                {
                    BassMix.BASS_Mixer_ChannelRemove(channel);
                }

                Bass.BASS_ChannelLock(mixerChannel.ChannelId, false);
                // DebugHelper.WriteLine("done");


                if (audioStream.MixerChannelId == mixerChannel.ChannelId)
                {
                    audioStream.MixerChannelId = int.MinValue;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///   Recode the file
        /// </summary>
        /// <param name = "fileName">Initial file</param>
        /// <param name = "outFileName">Target file</param>
        /// <param name = "targetSampleRate">Target sample rate</param>
        public void RecodeTheFile(string fileName, string outFileName, int targetSampleRate)
        {
            int      stream = Un4seen.Bass.Bass.BASS_StreamCreateFile(fileName, 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_MONO | BASSFlag.BASS_SAMPLE_FLOAT);
            TAG_INFO tags   = new TAG_INFO();

            BassTags.BASS_TAG_GetFromFile(stream, tags);
            int mixerStream = BassMix.BASS_Mixer_StreamCreate(targetSampleRate, 1, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_MONO | BASSFlag.BASS_SAMPLE_FLOAT);

            if (BassMix.BASS_Mixer_StreamAddChannel(mixerStream, stream, BASSFlag.BASS_MIXER_FILTER))
            {
                WaveWriter waveWriter = new WaveWriter(outFileName, mixerStream, true);
                const int  length     = 5512 * 10 * 4;
                float[]    buffer     = new float[length];
                while (true)
                {
                    int bytesRead = Un4seen.Bass.Bass.BASS_ChannelGetData(mixerStream, buffer, length);
                    if (bytesRead == 0)
                    {
                        break;
                    }
                    waveWriter.Write(buffer, bytesRead);
                }
                waveWriter.Close();
            }
            else
            {
                throw new Exception(Un4seen.Bass.Bass.BASS_ErrorGetCode().ToString());
            }
        }
Beispiel #3
0
        /// <summary>
        /// Attach a stream to the Mixer
        /// </summary>
        /// <param name="stream"></param>
        /// <returns></returns>
        public bool AttachStream(MusicStream stream)
        {
            Bass.BASS_ChannelLock(_mixer, true);

            // Set SynyPos at end of stream
            SetSyncPos(stream, 0.0);

            bool result = BassMix.BASS_Mixer_StreamAddChannel(_mixer, stream.BassStream,
                                                              BASSFlag.BASS_MIXER_NORAMPIN | BASSFlag.BASS_MIXER_BUFFER |
                                                              BASSFlag.BASS_MIXER_MATRIX | BASSFlag.BASS_MIXER_DOWNMIX |
                                                              BASSFlag.BASS_STREAM_AUTOFREE);

            if (!result)
            {
                Log.Error("BASS: Error attaching stream to mixer. {0}", Bass.BASS_ErrorGetCode());
            }

            Bass.BASS_ChannelLock(_mixer, false);

            if (result && _mixingMatrix != null)
            {
                Log.Debug("BASS: Setting mixing matrix...");
                result = BassMix.BASS_Mixer_ChannelSetMatrix(stream.BassStream, _mixingMatrix);
                if (!result)
                {
                    Log.Error("BASS: Error attaching Mixing Matrix. {0}", Bass.BASS_ErrorGetCode());
                }
            }

            return(result);
        }
 internal override void DisconnectFile(clsMP3Bass mp3bass)
 {
     CheckOK(Bass.ChannelStop(mp3bass.StreamHandle));
     CheckOK(BassMix.MixerRemoveChannel(mp3bass.StreamHandle));
     CheckOK(Bass.StreamFree(mp3bass.StreamHandle));
     mp3bass.StreamHandle = 0;
 }
Beispiel #5
0
        /// <summary>
        /// Creates a new instance of <see cref="MixedAudioProvider"/>.
        /// </summary>
        public MixedAudioProvider(IEnumerable <BassItem> Devices, int FrameRate, bool MuteOutput = true)
        {
            if (Devices == null)
            {
                throw new ArgumentNullException();
            }

            var updatePeriod = 1000 / FrameRate;

            Bass.UpdatePeriod = updatePeriod.Clip(5, 100);

            Console.WriteLine($"BASS Update Period: {Bass.UpdatePeriod}");

            for (var i = 0; i < BufferCount; ++i)
            {
                _buffers.Add(new byte[0]);
            }

            _mixer = BassMix.CreateMixerStream(44100, 2, BassFlags.MixerNonStop);

            foreach (var recordingDevice in Devices)
            {
                InitDevice(recordingDevice);
            }

            if (MuteOutput)
            {
                // mute the mixer
                Bass.ChannelSetAttribute(_mixer, ChannelAttribute.Volume, 0);
            }

            Bass.ChannelSetDSP(_mixer, Procedure);
        }
Beispiel #6
0
        private void buttonAddFile_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == openFileDialog.ShowDialog(this))
            {
                if (File.Exists(openFileDialog.FileName))
                {
                    lock (listBoxPlaylist)
                    {
                        Track track = new Track(openFileDialog.FileName);
                        listBoxPlaylist.Items.Add(track);

                        // in the demo we already add each new track to the mixer
                        // this is in real life not the best place to do so (especially with larger playlists)
                        // but for the demo it is okay ;-)

                        // add the new track to the mixer (in PAUSED mode!)
                        BassMix.BASS_Mixer_StreamAddChannel(_mixer, track.Channel, BASSFlag.BASS_MIXER_PAUSE | BASSFlag.BASS_MIXER_DOWNMIX | BASSFlag.BASS_STREAM_AUTOFREE);

                        // an BASS_SYNC_END is used to trigger the next track in the playlist (if no POS sync was set)
                        track.TrackSync = new SYNCPROC(OnTrackSync);
                        BassMix.BASS_Mixer_ChannelSetSync(track.Channel, BASSSync.BASS_SYNC_END, 0L, track.TrackSync, new IntPtr(0));
                    }

                    if (_currentTrack == null)
                    {
                        PlayNextTrack();
                    }
                }
            }
        }
Beispiel #7
0
 private void buttonRemoveEnvelope_Click(object sender, EventArgs e)
 {
     BassMix.BASS_Mixer_ChannelSetEnvelope(_currentTrack.Channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, null);
     _WF.ClearAllVolumePoints();
     _WF.DrawVolume = WaveForm.VOLUMEDRAWTYPE.None;
     DrawWave();
 }
        /// <summary>
        ///     Clears the automation sync positions.
        /// </summary>
        /// <param name="track">The track.</param>
        private void ClearAutomationSyncPositions(AudioStream track)
        {
            foreach (var trigger in AutomationAttributesHelper.GetAutomationAttributes(track.Description).TrackFXTriggers)
            {
                if (trigger.StartSyncId != int.MinValue)
                {
                    BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.StartSyncId);
                    trigger.StartSyncId = int.MinValue;
                }
                if (trigger.EndSyncId == int.MinValue)
                {
                    continue;
                }

                BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.EndSyncId);
                trigger.EndSyncId = int.MinValue;
            }

            foreach (var trigger in GetCurrentSampleTriggers())
            {
                if (trigger.StartSyncId != int.MinValue)
                {
                    BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.StartSyncId);
                    trigger.StartSyncId = int.MinValue;
                }

                if (trigger.EndSyncId == int.MinValue)
                {
                    continue;
                }

                BassMix.BASS_Mixer_ChannelRemoveSync(track.ChannelId, trigger.EndSyncId);
                trigger.EndSyncId = int.MinValue;
            }
        }
        public SplitDecoder(Decoder Source, Resolution BufferKind = Resolution.Short)
            : base(BufferKind)
        {
            this.Source = Source;

            Handle = BassMix.CreateSplitStream(Source.Handle, BassFlags.Decode | BufferKind.ToBassFlag(), null);
        }
Beispiel #10
0
        protected override void Update()
        {
            base.Update();

            if (!(Mixer is BassAudioMixer bassMixer))
            {
                return;
            }

            int[] channels = BassMix.MixerGetChannels(bassMixer.Handle);

            if (channels == null)
            {
                return;
            }

            foreach (int channel in channels)
            {
                if (mixerChannelsContainer.All(ch => ch.ChannelHandle != channel))
                {
                    mixerChannelsContainer.Add(new AudioChannelDisplay(channel));
                }
            }

            mixerChannelsContainer.RemoveAll(ch => !channels.Contains(ch.ChannelHandle));
        }
Beispiel #11
0
        /// <summary>
        /// Adds to the mixer channel, and sets the sync points.
        /// </summary>
        /// <param name="sample">The sample to sync.</param>
        private void AddSampleToMixer(Sample sample)
        {
            if (sample == null)
            {
                return;
            }

            Debug.Print("Add sample to mixer " + sample.Description);

            // load audio data if not loaded
            if (sample.Channel == int.MinValue)
            {
                LoadSampleAudioData(sample);
            }

            //if (sample != this.PreviousSample && sample != this.CurrentSample)
            //{
            // add the new sample to the mixer (in paused mode)
            //BassMix.BASS_Mixer_StreamAddChannel(_mixerChannel, sample.Channel, BASSFlag.BASS_MIXER_PAUSE | BASSFlag.BASS_MIXER_DOWNMIX | BASSFlag.BASS_STREAM_AUTOFREE);
            BassMix.BASS_Mixer_StreamAddChannel(_sampleMixerChannel, sample.Channel, BASSFlag.BASS_MIXER_PAUSE | BASSFlag.BASS_MIXER_DOWNMIX);

            //// set sample sync event
            //sample.SampleSync = new SYNCPROC(OnSampleSync);

            //// set replay gain
            //BassHelper.SetSampleReplayGain(sample.Channel, sample.Gain);
            //}
        }
Beispiel #12
0
        protected override void Update()
        {
            base.Update();

            float[] levels = new float[2];
            BassMix.ChannelGetLevel(ChannelHandle, levels, 1 / 1000f * sample_window, LevelRetrievalFlags.Stereo);

            float curPeakL = levels[0];
            float curPeakR = levels[1];
            float curPeak  = (curPeakL + curPeakR) / 2f;

            if (curPeak > maxPeak || Clock.CurrentTime - lastMaxPeakTime > peak_hold_time)
            {
                lastMaxPeakTime = Clock.CurrentTime;
                maxPeak         = float.MinValue;
            }

            maxPeak = Math.Max(maxPeak, curPeak);

            volBarL.ResizeHeightTo(curPeakL, sample_window * 4);
            volBarR.ResizeHeightTo(curPeakR, sample_window * 4);

            string peakDisplay    = curPeak == 0 ? "-∞ " : $"{BassUtils.LevelToDb(curPeak):F}";
            string maxPeakDisplay = maxPeak == 0 ? "-∞ " : $"{BassUtils.LevelToDb(maxPeak):F}";

            peakText.Text      = $"curr: {peakDisplay}dB";
            maxPeakText.Text   = $"peak: {maxPeakDisplay}dB";
            peakText.Colour    = BassUtils.LevelToDb(curPeak) > 0 ? Colour4.Red : Colour4.White;
            maxPeakText.Colour = BassUtils.LevelToDb(maxPeak) > 0 ? Colour4.Red : Colour4.White;
        }
Beispiel #13
0
        private Player()
        {
            var enginedir = AppDomain.CurrentDomain.BaseDirectory;

            if (Is64Bit)
            {
                enginedir = Path.Combine(enginedir, @"Engine\x64");
            }
            else
            {
                enginedir = Path.Combine(enginedir, @"Engine\x86");
            }
            Bass.Load(enginedir);
            BassMix.Load(enginedir);
            BassCd.Load(enginedir);
            BassFx.Load(enginedir);
            Bass.PluginLoad(enginedir + "\\bass_aac.dll");
            Bass.PluginLoad(enginedir + "\\bass_ac3.dll");
            Bass.PluginLoad(enginedir + "\\bass_ape.dll");
            Bass.PluginLoad(enginedir + "\\bass_mpc.dll");
            Bass.PluginLoad(enginedir + "\\bass_spx.dll");
            Bass.PluginLoad(enginedir + "\\bass_tta.dll");
            Bass.PluginLoad(enginedir + "\\bassalac.dll");
            Bass.PluginLoad(enginedir + "\\bassdsd.dll");
            Bass.PluginLoad(enginedir + "\\bassflac.dll");
            Bass.PluginLoad(enginedir + "\\bassopus.dll");
            Bass.PluginLoad(enginedir + "\\basswma.dll");
            Bass.PluginLoad(enginedir + "\\basswv.dll");
            Bass.PluginLoad(enginedir + "\\bassmidi.dll");
            _callback = MyDownloadProc;
            _maxfft   = (int)(DataFlags.Available | DataFlags.FFT2048);
        }
Beispiel #14
0
 /// <summary>
 /// Free used resources
 /// </summary>
 public void Dispose()
 {
     if (_source != 0)
     {
         if (_mixer != 0)
         {
             Stop();
         }
         RemoveEq(ref _mixer);
         Bass.StreamFree(_source);
         Bass.MusicFree(_source);
         Bass.StreamFree(_mixer);
         _mixer  = 0;
         _source = 0;
     }
     if (_handle.IsAllocated)
     {
         _handle.Free();
     }
     if (_initialized)
     {
         Bass.Free();
     }
     BassCd.Unload();
     BassFx.Unload();
     BassMix.Unload();
     Bass.PluginFree(0);
 }
Beispiel #15
0
        private void MyWaveFormCallback(int framesDone, int framesTotal, TimeSpan elapsedTime, bool finished)
        {
            if (finished)
            {
                _WF.SyncPlayback(_currentTrack.Channel);

                // and do pre-calculate the next track position
                // in this example we will only use the end-position
                long startPos = 0L;
                long endPos   = 0L;
                if (_WF.GetCuePoints(ref startPos, ref endPos, -24.0, -12.0, true))
                {
                    _currentTrack.NextTrackPos = endPos;
                    // if there is already a sync set, remove it first
                    if (_currentTrack.NextTrackSync != 0)
                    {
                        BassMix.BASS_Mixer_ChannelRemoveSync(_currentTrack.Channel, _currentTrack.NextTrackSync);
                    }

                    // set the next track sync automatically
                    _currentTrack.NextTrackSync = BassMix.BASS_Mixer_ChannelSetSync(_currentTrack.Channel, BASSSync.BASS_SYNC_POS | BASSSync.BASS_SYNC_MIXTIME, _currentTrack.NextTrackPos, _currentTrack.TrackSync, new IntPtr(1));

                    _WF.AddMarker("Next", _currentTrack.NextTrackPos);
                }
            }
            // will be called during rendering...
            DrawWave();
        }
Beispiel #16
0
        protected void Dispose(bool bManagedDispose)
        {
            this.e出力デバイス = ESoundDeviceType.Unknown;                    // まず出力停止する(Dispose中にクラス内にアクセスされることを防ぐ)
            if (hMixer_DeviceOut != 0)
            {
                BassMix.BASS_Mixer_ChannelPause(this.hMixer_DeviceOut);
                Bass.BASS_StreamFree(this.hMixer_DeviceOut);
                this.hMixer_DeviceOut = 0;
            }
            if (hMixer != 0)
            {
                BassMix.BASS_Mixer_ChannelPause(this.hMixer);
                Bass.BASS_StreamFree(this.hMixer);
                this.hMixer = 0;
            }
            if (!this.bIsBASSFree)
            {
                BassAsio.BASS_ASIO_Free();                  // システムタイマより先に呼び出すこと。(tAsio処理() の中でシステムタイマを参照してるため)
                Bass.BASS_Free();
            }

            if (bManagedDispose)
            {
                CCommon.tDispose(this.tmシステムタイマ);
                this.tmシステムタイマ = null;
            }
        }
Beispiel #17
0
        private void ToggleZoom()
        {
            if (_WF == null)
            {
                return;
            }

            // WF is not null, so the stream must be playing...
            if (_zoomed)
            {
                // unzoom...(display the whole wave form)
                _zoomStart      = -1;
                _zoomStartBytes = -1;
                _zoomEnd        = -1;
            }
            else
            {
                // zoom...(display only a partial wave form)
                long pos = BassMix.BASS_Mixer_ChannelGetPosition(_currentTrack.Channel);
                // calculate the window to display
                _zoomStart      = _WF.Position2Frames(pos);
                _zoomStartBytes = _WF.Frame2Bytes(_zoomStart);
                _zoomEnd        = _zoomStart + _WF.Position2Frames(_zoomDistance) - 1;
                if (_zoomEnd >= _WF.Wave.data.Length)
                {
                    // beyond the end, so we zoom from end - _zoomDistance.
                    _zoomEnd        = _WF.Wave.data.Length - 1;
                    _zoomStart      = _zoomEnd - _WF.Position2Frames(_zoomDistance) + 1;
                    _zoomStartBytes = _WF.Frame2Bytes(_zoomStart);
                }
            }
            _zoomed = !_zoomed;
            // and display this new wave form
            DrawWave();
        }
        /// <summary>
        /// Creates a new instance of <see cref="MixedAudioProvider"/>.
        /// </summary>
        public MixedAudioProvider(IEnumerable <BassItem> Devices, bool MuteOutput = true)
        {
            if (Devices == null)
            {
                throw new ArgumentNullException();
            }

            for (var i = 0; i < BufferCount; ++i)
            {
                _buffers.Add(new byte[0]);
            }

            _mixer = BassMix.CreateMixerStream(44100, 2, BassFlags.MixerNonStop);

            foreach (var recordingDevice in Devices)
            {
                InitDevice(recordingDevice);
            }

            if (MuteOutput)
            {
                // mute the mixer
                Bass.ChannelSetAttribute(_mixer, ChannelAttribute.Volume, 0);
            }

            Bass.ChannelSetDSP(_mixer, Procedure);
        }
Beispiel #19
0
        private void buttonSetEnvelope_Click(object sender, EventArgs e)
        {
            if (_currentTrack.Channel != 0)
            {
                BASS_MIXER_NODE[] nodes =
                {
                    new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 10d), 1f),
                    new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 13d), 0f),
                    new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 17d), 0f),
                    new BASS_MIXER_NODE(Bass.BASS_ChannelSeconds2Bytes(_mixer, 20d), 1f)
                };
                BassMix.BASS_Mixer_ChannelSetEnvelope(_currentTrack.Channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes);
                // already align the envelope position to the current playback position
                // pause mixer
                Bass.BASS_ChannelLock(_mixer, true);
                long pos = BassMix.BASS_Mixer_ChannelGetPosition(_currentTrack.Channel);
                // convert source pos to mixer pos
                long envPos = Bass.BASS_ChannelSeconds2Bytes(_mixer, Bass.BASS_ChannelBytes2Seconds(_currentTrack.Channel, pos));
                BassMix.BASS_Mixer_ChannelSetEnvelopePos(_currentTrack.Channel, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, envPos);
                // resume mixer
                Bass.BASS_ChannelLock(_mixer, false);

                // and show it in our waveform
                _WF.DrawVolume = WaveForm.VOLUMEDRAWTYPE.Solid;
                foreach (BASS_MIXER_NODE node in nodes)
                {
                    _WF.AddVolumePoint(node.pos, node.val);
                }
                DrawWave();
            }
        }
Beispiel #20
0
        public override int GetData(float[] buffer)
        {
            var length = default(uint);

            switch (buffer.Length)
            {
            case 128:
                length = FFT256;
                break;

            case 256:
                length = FFT512;
                break;

            case 512:
                length = FFT1024;
                break;

            default:
                throw new NotImplementedException();
            }
            foreach (var channelHandle in this.MixerChannelHandles)
            {
                return(BassMix.ChannelGetData(channelHandle, buffer, unchecked ((int)length)));
            }
            return(0);
        }
        /// <summary>
        /// Attach a stream to the Mixer
        /// </summary>
        /// <returns></returns>
        public bool AttachStream()
        {
            try
            {
                Bass.BASS_ChannelLock(_mixerHandle, true);

                RegisterStreamFreedEvent(_inputStream);

                bool result = BassMix.BASS_Mixer_StreamAddChannel(_mixerHandle, _inputStream.Handle,
                                                                  BASSFlag.BASS_MIXER_NORAMPIN | BASSFlag.BASS_MIXER_BUFFER |
                                                                  BASSFlag.BASS_MIXER_MATRIX | BASSFlag.BASS_MIXER_DOWNMIX |
                                                                  BASSFlag.BASS_STREAM_AUTOFREE
                                                                  );
                if (!result)
                {
                    throw new BassLibraryException("BASS_Mixer_StreamAddChannel");
                }

                return(true);
            }
            finally
            {
                Bass.BASS_ChannelLock(_mixerHandle, false);
            }
        }
        public void TestFreedChannelRemovedFromDefault()
        {
            track.Dispose();
            bass.Update();

            Assert.That(BassMix.ChannelGetMixer(getHandle()), Is.Zero);
        }
Beispiel #23
0
 internal override void DisconnectMidiDev(clsBassOutMidi bassoutmidi)
 {
     CheckOK(Bass.ChannelStop(bassoutmidi.MidiStream));
     CheckOK(BassMix.MixerRemoveChannel(bassoutmidi.MidiStream));
     CheckOK(Bass.StreamFree(bassoutmidi.MidiStream));
     bassoutmidi.MidiStream = 0;
 }
        public void TestCannotBeRemovedFromGlobalMixer()
        {
            bass.Mixer.Remove(track);
            bass.Update();

            Assert.That(BassMix.ChannelGetMixer(getHandle()), Is.EqualTo(bass.Mixer.Handle));
        }
        private bool HasPotentialHumanSpeech(int visualChannel, long pos)
        {
            Bass.ChannelSetPosition(visualChannel, pos);

            const int scaleFactor  = _scaleFactorSqr * ushort.MaxValue;
            var       buffer       = new float[2048];
            var       bufferResult = _isMixerUsed
                ? BassMix.ChannelGetData(visualChannel, buffer, (int)_maxFft)
                : Bass.ChannelGetData(visualChannel, buffer, (int)_maxFft);

            var verticalSamplesWithSound = 0;

            if (bufferResult > 0)
            {
                for (var n = 0; n < buffer.Length; n++)
                {
                    // TODO: Don't convert to percentage, just check the threshold raw from the buffer
                    // TODO: Skip parts of the spectrogram that cannot be human speech
                    var percentage = (float)Math.Min(1d, Math.Sqrt(buffer[n]) * scaleFactor / ushort.MaxValue);
                    if (percentage > 0.35)
                    {
                        verticalSamplesWithSound++;
                        if (verticalSamplesWithSound > 4)
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Beispiel #26
0
 public void clearDeckB()
 {
     // remove deck A, set to zero
     BassMix.BASS_Mixer_ChannelRemove(_deckB);
     Bass.BASS_StreamFree(_deckB);
     _deckB = 0;
 }
Beispiel #27
0
        /// <summary>
        /// Initialize Bass Library
        /// </summary>
        public static void Init()
        {
            if (!_initialized)
            {
                //Call to avoid the freeware splash screen. Didn't see it, but maybe it will appear if the Forms are used :D
                BassNet.Registration("*****@*****.**", "2X155323152222");

                //Dummy calls made for loading the assemblies
                int bassVersion    = Un4seen.Bass.Bass.BASS_GetVersion();
                int bassMixVersion = BassMix.BASS_Mixer_GetVersion();
                int bassfxVersion  = BassFx.BASS_FX_GetVersion();

                int plg = Un4seen.Bass.Bass.BASS_PluginLoad("bassflac.dll");
                if (plg == 0)
                {
                    throw new Exception(Un4seen.Bass.Bass.BASS_ErrorGetCode().ToString());
                }
                if (!Un4seen.Bass.Bass.BASS_Init(-1, DEFAULT_SAMPLE_RATE, BASSInit.BASS_DEVICE_DEFAULT | BASSInit.BASS_DEVICE_MONO, IntPtr.Zero))                 //Set Sample Rate / MONO
                {
                    throw new Exception(Un4seen.Bass.Bass.BASS_ErrorGetCode().ToString());
                }
                if (!Un4seen.Bass.Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_MIXER_FILTER, 50))                 /*Set filter for anti aliasing*/
                {
                    throw new Exception(Un4seen.Bass.Bass.BASS_ErrorGetCode().ToString());
                }
                if (!Un4seen.Bass.Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_FLOATDSP, true))                 /*Set floating parameters to be passed*/
                {
                    throw new Exception(Un4seen.Bass.Bass.BASS_ErrorGetCode().ToString());
                }

                _initialized = true;
            }
        }
Beispiel #28
0
        private void Simple_Load(object sender, System.EventArgs e)
        {
            // BassNet.Registration("your email", "your regkey");

            if (!Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, this.Handle))
            {
                MessageBox.Show(this, "Bass_Init error!");
                this.Close();
                return;
            }
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_BUFFER, 200);
            Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_UPDATEPERIOD, 20);

            // already create a mixer
            _mixer = BassMix.BASS_Mixer_StreamCreate(44100, 2, BASSFlag.BASS_SAMPLE_FLOAT);
            if (_mixer == 0)
            {
                MessageBox.Show(this, "Could not create mixer!");
                Bass.BASS_Free();
                this.Close();
                return;
            }

            _mixerStallSync = new SYNCPROC(OnMixerStall);
            Bass.BASS_ChannelSetSync(_mixer, BASSSync.BASS_SYNC_STALL, 0L, _mixerStallSync, IntPtr.Zero);

            timerUpdate.Start();
            Bass.BASS_ChannelPlay(_mixer, false);
        }
Beispiel #29
0
        public void AttachChannel(ChannelInfo info)
        {
            if (info is InputChannelInfo)
            {
                InputChannelInfo iinfo = (InputChannelInfo)info;
                if (this.BassHandle.HasValue)
                {
                    BassMix.BASS_Mixer_StreamAddChannel(this.BassHandle.Value, iinfo.Handler.OutputChannel, BASSFlag.BASS_MIXER_MATRIX | BASSFlag.BASS_MIXER_BUFFER);
                }
            }
            else
            {
                if (!info.BassHandle.HasValue)
                {
                    //Initialize to no sound as it's decoding anyway
                    info.Initialize(0);
                }
                this.streams.Add(info);

                if (this.BassHandle.HasValue)
                {
                    BassMix.BASS_Mixer_StreamAddChannel(this.BassHandle.Value, info.BassHandle.Value, BASSFlag.BASS_MIXER_MATRIX | BASSFlag.BASS_MIXER_BUFFER);
                }
                //Simple trick to refresh play status now it's attached
            }
            info.Play = info.Play;
        }
Beispiel #30
0
        /// <summary>
        /// Creates a new instance of <see cref="MixedAudioProvider"/>.
        /// </summary>
        public MixedAudioProvider(IEnumerable <BassItem> RecordingDevices, IEnumerable <BassItem> LoopbackDevices)
        {
            if (RecordingDevices == null || LoopbackDevices == null)
            {
                throw new ArgumentNullException();
            }

            _mixer  = BassMix.CreateMixerStream(44100, 2, BassFlags.Default);
            _filler = Bass.CreateStream(44100, 2, BassFlags.Float | BassFlags.Decode, ManagedBass.Extensions.SilenceStreamProcedure);

            foreach (var recordingDevice in RecordingDevices)
            {
                InitRecordingDevice(recordingDevice);
            }

            foreach (var loopbackDevice in LoopbackDevices)
            {
                InitLoopbackDevice(loopbackDevice);
            }

            // mute the mixer
            Bass.ChannelSetAttribute(_mixer, ChannelAttribute.Volume, 0);

            Bass.ChannelSetDSP(_mixer, Procedure);
        }