/// <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; }
/// <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); }
/// <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() + "."); } }
/// <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; }
/// <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); }