Exemple #1
0
        /// <summary>
        /// Cleans up any resource being used.
        /// </summary>
        public void Dispose()
        {
            if (m_IsDisposed)
            {
                return;
            }

            Stop();

            this.Error        = null;
            m_pAudioOutDevice = null;
            m_pRTP_Stream     = null;
            m_pAudioCodecs    = null;
            m_pActiveCodec    = null;
        }
Exemple #2
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="device">Audio output device.</param>
        /// <param name="format">Audio output format.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>device</b> or <b>format</b> is null reference.</exception>
        public AudioOut(AudioOutDevice device, AudioFormat format)
        {
            if (device == null)
            {
                throw new ArgumentNullException("device");
            }
            if (format == null)
            {
                throw new ArgumentNullException("format");
            }

            m_pDevice      = device;
            m_pAudioFormat = format;

            m_pWaveOut = new WaveOut(device, format.SamplesPerSecond, format.BitsPerSample, format.Channels);
        }
Exemple #3
0
            /// <summary>
            /// Default constructor.
            /// </summary>
            /// <param name="outputDevice">Output device.</param>
            /// <param name="samplesPerSec">Sample rate, in samples per second (hertz). For PCM common values are
            /// 8.0 kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz.</param>
            /// <param name="bitsPerSample">Bits per sample. For PCM 8 or 16 are the only valid values.</param>
            /// <param name="channels">Number of channels.</param>
            /// <exception cref="ArgumentNullException">Is raised when <b>outputDevice</b> is null.</exception>
            /// <exception cref="ArgumentException">Is raised when any of the aruments has invalid value.</exception>
            public WaveOut(AudioOutDevice outputDevice, int samplesPerSec, int bitsPerSample, int channels)
            {
                if (outputDevice == null)
                {
                    throw new ArgumentNullException("outputDevice");
                }
                if (samplesPerSec < 8000)
                {
                    throw new ArgumentException("Argument 'samplesPerSec' value must be >= 8000.");
                }
                if (bitsPerSample < 8)
                {
                    throw new ArgumentException("Argument 'bitsPerSample' value must be >= 8.");
                }
                if (channels < 1)
                {
                    throw new ArgumentException("Argument 'channels' value must be >= 1.");
                }

                m_pOutDevice    = outputDevice;
                m_SamplesPerSec = samplesPerSec;
                m_BitsPerSample = bitsPerSample;
                m_Channels      = channels;
                m_BlockSize     = m_Channels * (m_BitsPerSample / 8);
                m_pPlayItems    = new List <PlayItem>();

                // Try to open wav device.
                WAVEFORMATEX format = new WAVEFORMATEX();

                format.wFormatTag      = 0x0001; // PCM - 0x0001
                format.nChannels       = (ushort)m_Channels;
                format.nSamplesPerSec  = (uint)samplesPerSec;
                format.nAvgBytesPerSec = (uint)(m_SamplesPerSec * m_Channels * (m_BitsPerSample / 8));
                format.nBlockAlign     = (ushort)m_BlockSize;
                format.wBitsPerSample  = (ushort)m_BitsPerSample;
                format.cbSize          = 0;
                // We must delegate reference, otherwise GC will collect it.
                m_pWaveOutProc = new waveOutProc(this.OnWaveOutProc);
                int result = WavMethods.waveOutOpen(out m_pWavDevHandle, m_pOutDevice.Index, format, m_pWaveOutProc, 0, WavConstants.CALLBACK_FUNCTION);

                if (result != MMSYSERR.NOERROR)
                {
                    throw new Exception("Failed to open wav device, error: " + result.ToString() + ".");
                }
            }
Exemple #4
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="audioOutDevice">Audio-out device used to play out RTP audio.</param>
        /// <param name="stream">RTP receive stream which audio to play.</param>
        /// <param name="codecs">Audio codecs with RTP payload number. For example: 0-PCMU,8-PCMA.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>audioOutDevice</b>,<b>stream</b> or <b>codecs</b> is null reference.</exception>
        public AudioOut_RTP(AudioOutDevice audioOutDevice, RTP_ReceiveStream stream, Dictionary <int, AudioCodec> codecs)
        {
            if (audioOutDevice == null)
            {
                throw new ArgumentNullException("audioOutDevice");
            }
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            if (codecs == null)
            {
                throw new ArgumentNullException("codecs");
            }

            m_pAudioOutDevice = audioOutDevice;
            m_pRTP_Stream     = stream;
            m_pAudioCodecs    = codecs;
        }
Exemple #5
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="device">Audio output device.</param>
        /// <param name="samplesPerSec">Sample rate, in samples per second (hertz).</param>
        /// <param name="bitsPerSample">Bits per sample. For PCM 8 or 16 are the only valid values.</param>
        /// <param name="channels">Number of channels.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>device</b> is null reference.</exception>
        /// <exception cref="ArgumentException">Is raised when any of the arguments has invalid value.</exception>
        public AudioOut(AudioOutDevice device, int samplesPerSec, int bitsPerSample, int channels)
        {
            if (device == null)
            {
                throw new ArgumentNullException("device");
            }
            if (samplesPerSec < 1)
            {
                throw new ArgumentException("Argument 'samplesPerSec' value must be >= 1.", "samplesPerSec");
            }
            if (bitsPerSample < 8)
            {
                throw new ArgumentException("Argument 'bitsPerSample' value must be >= 8.", "bitsPerSample");
            }
            if (channels < 1)
            {
                throw new ArgumentException("Argument 'channels' value must be >= 1.", "channels");
            }

            m_pDevice      = device;
            m_pAudioFormat = new AudioFormat(samplesPerSec, bitsPerSample, channels);

            m_pWaveOut = new WaveOut(device, samplesPerSec, bitsPerSample, channels);
        }