public override void OnStarted()
    {
      int channelBitwidth = base.ChannelBitwidth;
      switch (channelBitwidth)
      {
        case 0x20:
          this._streamFlags &= ~BASSFlag.BASS_SAMPLE_8BITS;
          this._streamFlags |= BASSFlag.BASS_SAMPLE_FLOAT;
          channelBitwidth = 4;
          break;

        case 8:
          this._streamFlags &= ~BASSFlag.BASS_SAMPLE_FLOAT;
          this._streamFlags |= BASSFlag.BASS_SAMPLE_8BITS;
          channelBitwidth = 1;
          break;

        default:
          this._streamFlags &= ~BASSFlag.BASS_SAMPLE_FLOAT;
          this._streamFlags &= ~BASSFlag.BASS_SAMPLE_8BITS;
          channelBitwidth = 2;
          break;
      }
      this._streamBuffer = new BASSBuffer(2f, base.ChannelSampleRate, base.ChannelNumChans, channelBitwidth);
      this._stream = Un4seen.Bass.Bass.BASS_StreamCreate(base.ChannelSampleRate, base.ChannelNumChans, this._streamFlags,
                                                         null, IntPtr.Zero);
      Un4seen.Bass.Bass.BASS_ChannelSetLink(base.ChannelHandle, this._stream);
      if (Un4seen.Bass.Bass.BASS_ChannelIsActive(base.ChannelHandle) == BASSActive.BASS_ACTIVE_PLAYING)
      {
        Bass.BASS_ChannelPlay(this._stream, false);
      }
    }
Beispiel #2
0
        public int EnqueueSamples(int channels, int rate, byte[] samples, int frames)
        {
            int consumed = 0;
            if (_basbuffer == null)
            {
                Bass.BASS_Init(-1, rate, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
                _basbuffer = new BASSBuffer(0.5f, rate, channels, 2);
                _streamproc = new STREAMPROC(Reader);

                if (_lazyVolumeSet)
                {
                    Volume = _lazyVolumeValue;
                }

                Bass.BASS_ChannelPlay(
                    Bass.BASS_StreamCreate(rate, channels, BASSFlag.BASS_DEFAULT, _streamproc, IntPtr.Zero),
                    false
                    );
            }

            if (_basbuffer.Space(0) > samples.Length)
            {
                _basbuffer.Write(samples, samples.Length);
                consumed = frames;
            }

            return consumed;
        }
Beispiel #3
0
        public void Dispose()
        {
            if (_bassBuffer != null)
            {
                _bassBuffer.Dispose();
                _bassBuffer = null;
            }

            Bass.BASS_Free();
        }
Beispiel #4
0
        public int EnqueueSamples(int channels, int rate, byte[] samples, int frames)
        {
            int consumed = 0;
            if (basbuffer == null)
            {
                Bass.BASS_Init(-1, rate, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
                basbuffer = new BASSBuffer(0.5f, rate, channels, 2);
                streamproc = Reader;
                currentHandle = Bass.BASS_StreamCreate(rate, channels, BASSFlag.BASS_DEFAULT, streamproc, IntPtr.Zero);
                Bass.BASS_ChannelPlay(currentHandle, false);
            }

            if (basbuffer.Space(0) > samples.Length)
            {
                basbuffer.Write(samples, samples.Length);
                consumed = frames;
            }

            return consumed;
        }