void ISpEngineSite.LoadResource(string uri, ref string mediaType, out IStream stream) { mediaType = null; try { Stream stream2 = _site.LoadResource(new Uri(uri, UriKind.RelativeOrAbsolute), mediaType); BinaryReader br = new BinaryReader(stream2); byte[] waveFormat = AudioBase.GetWaveFormat(br); mediaType = null; if (waveFormat != null) { WAVEFORMATEX wAVEFORMATEX = WAVEFORMATEX.ToWaveHeader(waveFormat); WaveFormatId wFormatTag = (WaveFormatId)wAVEFORMATEX.wFormatTag; if (wFormatTag == WaveFormatId.Pcm || (uint)(wFormatTag - 6) <= 1u) { mediaType = "audio/x-wav"; } } stream2.Position = 0L; stream = new SpStreamWrapper(stream2); } catch { stream = null; } }
internal void InitRun(AudioBase audioDevice, int defaultRate, Prompt prompt) { _audio = audioDevice; _prompt = prompt; _defaultRate = defaultRate; _actions = SPVESACTIONS.SPVES_RATE | SPVESACTIONS.SPVES_VOLUME; }
internal override void End() { if (!_deviceOpen) { throw new InvalidOperationException(); } _deviceOpen = false; if (!_aborted && _hasHeader) { long position = _stream.Position; AudioBase.WriteWaveHeader(_stream, _wfxOut, _startStreamPosition, _totalByteWrittens); _stream.Seek(position, SeekOrigin.Begin); } }
internal override void Begin(byte[] wfx) { if (_deviceOpen) { throw new InvalidOperationException(); } _wfxIn = WAVEFORMATEX.ToWaveHeader(wfx); _doConversion = _pcmConverter.PrepareConverter(ref _wfxIn, ref _wfxOut); if (_totalByteWrittens == 0 && _hasHeader) { AudioBase.WriteWaveHeader(_stream, _wfxOut, _startStreamPosition, 0); } _bytesWritten = 0; _aborted = false; _deviceOpen = true; }