public static StreamingSourceVoice Create(XAudio2 xaudio2, IWaveSource waveSource, int bufferSize = 100) { var voiceCallback = new VoiceCallback(); IntPtr ptr = xaudio2.CreateSourceVoicePtr(waveSource.WaveFormat, VoiceFlags.None, XAudio2.DefaultFrequencyRatio, voiceCallback, null, null); return(new StreamingSourceVoice(ptr, voiceCallback, waveSource, bufferSize)); }
/// <summary> /// Initializes a new instance of the <see cref="StreamingSourceVoice" /> class. /// </summary> /// <param name="ptr">Pointer to a <see cref="XAudio2SourceVoice" /> object.</param> /// <param name="voiceCallback"> /// <see cref="VoiceCallback" /> instance which receives notifications from the /// <see cref="XAudio2SourceVoice" /> which got passed as a pointer (see the <paramref name="ptr" /> argument). /// </param> /// <param name="waveSource"><see cref="IWaveSource" /> which provides the audio data to stream.</param> /// <param name="bufferSize"> /// Buffersize of the internal used buffers in milliseconds. Values in the range from 70ms to /// 200ms are recommended. /// </param> /// <remarks>It is recommended to use the <see cref="Create(XAudio2,IWaveSource,int)" /> method instead of the this constructor.</remarks> internal StreamingSourceVoice(IntPtr ptr, VoiceCallback voiceCallback, IWaveSource waveSource, int bufferSize) { BasePtr = ptr; _voiceCallback = voiceCallback; _waveSource = waveSource; var maxBufferBytes = (int)waveSource.WaveFormat.MillisecondsToBytes(bufferSize); _buffer = new byte[maxBufferBytes]; for (int i = 0; i < _buffers.Length; i++) { var buffer = new XAudio2Buffer(maxBufferBytes); _buffers[i] = buffer; } InitializeForStreaming(); }
internal StreamingSourceVoice(XAudio2 xaudio2, IWaveSource waveSource, VoiceCallback voiceCallback, int bufferSize) : base(CreateSourceVoice(xaudio2, waveSource, voiceCallback), xaudio2.Version) { _voiceCallback = voiceCallback; _waveSource = waveSource; var maxBufferBytes = (int)waveSource.WaveFormat.MillisecondsToBytes(bufferSize); _buffer = new byte[maxBufferBytes]; for (int i = 0; i < _buffers.Length; i++) { var buffer = new XAudio2Buffer(maxBufferBytes); _buffers[i] = buffer; } InitializeForStreaming(); }
private static IntPtr CreateSourceVoice(XAudio2 xaudio2, IWaveSource waveSource, VoiceCallback callback) { if (xaudio2 == null) { throw new ArgumentNullException("xaudio2"); } if (waveSource == null) { throw new ArgumentNullException("waveSource"); } return(xaudio2.CreateSourceVoicePtr(waveSource.WaveFormat, VoiceFlags.None, XAudio2.DefaultFrequencyRatio, callback, null, null)); }