Exemple #1
0
        public static Task PlaySound(Stream stream)
        {
            var soundstream = new SoundStream(stream);
            var buffer      = new AudioBufferAndMetaData()
            {
                Stream             = soundstream.ToDataStream(),
                AudioBytes         = (int)soundstream.Length,
                Flags              = BufferFlags.EndOfStream,
                WaveFormat         = soundstream.Format,
                DecodedPacketsInfo = soundstream.DecodedPacketsInfo
            };

            var sourceVoice = new SourceVoice(XAudio, buffer.WaveFormat, true);

            sourceVoice.SetVolume(Volume, SharpDX.XAudio2.XAudio2.CommitNow);
            sourceVoice.SubmitSourceBuffer(buffer, buffer.DecodedPacketsInfo);


            //var effect = new SharpDX.XAPO.Fx.Echo(XAudio);
            //EffectDescriptor effectDescriptor = new EffectDescriptor(effect);
            //sourceVoice.SetEffectChain(effectDescriptor);
            //sourceVoice.EnableEffect(0);

            sourceVoice.Start();

            TaskCompletionSource <object> mediaDone = new TaskCompletionSource <object>();

            sourceVoice.StreamEnd += () => {
                mediaDone.SetResult(null);
            };

            return(mediaDone.Task);
        }
Exemple #2
0
        /// <summary>
        /// Возвращает аудио буфер для файла.
        /// </summary>
        /// <param name="source">Путь к файлу.</param>
        private async Task <AudioBufferAndMetaData> GetBuffer(string source)
        {
            if (cachedBuffers.ContainsKey(source))
            {
                return(cachedBuffers[source]);
            }

            var stream = (await(await StorageFile.GetFileFromApplicationUriAsync(new Uri(source)))
                          .OpenReadAsync()).AsStreamForRead();

            lock (lockObject)
            {
                var soundstream = new SoundStream(stream);
                var buffer      = new AudioBufferAndMetaData
                {
                    Stream             = soundstream.ToDataStream(),
                    AudioBytes         = (int)soundstream.Length,
                    Flags              = BufferFlags.EndOfStream,
                    WaveFormat         = soundstream.Format,
                    DecodedPacketsInfo = soundstream.DecodedPacketsInfo
                };

                cachedBuffers[source] = buffer;
                return(buffer);
            }
        }
        public void ChangeSpeed(double modifier)
        {
            AudioBufferAndMetaData newBuffer = firstWave.Buffer;

            voice.Stop();

            newBuffer.Stream.Read(firstWave.Buffer.Stream.PositionPointer, 100000, 3);
            voice = new SourceVoice(xAudio, newBuffer.WaveFormat, true);
            voice.SourceSampleRate = (int)(defaultSampleRate * modifier);
            voice.SubmitSourceBuffer(newBuffer, newBuffer.DecodedPacketsInfo);
            voice.Start();
        }
        private AudioBufferAndMetaData GetBuffer(string soundfile)
        {
            var nativefilestream = new NativeFileStream(soundfile, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);
            var soundstream      = new SoundStream(nativefilestream);
            var buffer           = new AudioBufferAndMetaData
            {
                Stream             = soundstream.ToDataStream(),
                AudioBytes         = (int)soundstream.Length,
                Flags              = BufferFlags.EndOfStream,
                WaveFormat         = soundstream.Format,
                DecodedPacketsInfo = soundstream.DecodedPacketsInfo
            };

            return(buffer);
        }
Exemple #5
0
        private static AudioBufferAndMetaData GetBuffer(string soundfile)
        {
            if (!AudioBuffers.ContainsKey(soundfile))
            {
                var nativefilestream = new NativeFileStream(
                    soundfile,
                    NativeFileMode.Open,
                    NativeFileAccess.Read,
                    NativeFileShare.Read);

                var soundstream = new SoundStream(nativefilestream);

                var buffer = new AudioBufferAndMetaData()
                {
                    Stream             = soundstream.ToDataStream(),
                    AudioBytes         = (int)soundstream.Length,
                    Flags              = BufferFlags.EndOfStream,
                    WaveFormat         = soundstream.Format,
                    DecodedPacketsInfo = soundstream.DecodedPacketsInfo
                };
                AudioBuffers[soundfile] = buffer;
            }
            return(AudioBuffers[soundfile]);
        }
        private static AudioBufferAndMetaData GetBuffer(string soundfile)
        {
            if (!AudioBuffers.ContainsKey(soundfile))
            {
                var nativefilestream = new NativeFileStream(
                        soundfile,
                        NativeFileMode.Open,
                        NativeFileAccess.Read,
                        NativeFileShare.Read);

                var soundstream = new SoundStream(nativefilestream);

                var buffer = new AudioBufferAndMetaData()
                {
                    Stream = soundstream.ToDataStream(),
                    AudioBytes = (int)soundstream.Length,
                    Flags = BufferFlags.EndOfStream,
                    WaveFormat = soundstream.Format,
                    DecodedPacketsInfo = soundstream.DecodedPacketsInfo
                };
                AudioBuffers[soundfile] = buffer;
            }
            return AudioBuffers[soundfile];

        }
        private static AudioBufferAndMetaData GetBuffer(Stream soundfile)
        {
            var soundstream = new SoundStream(soundfile);

            var buffer = new AudioBufferAndMetaData()
            {
                Stream = soundstream.ToDataStream(),
                AudioBytes = (int)soundstream.Length,
                Flags = BufferFlags.EndOfStream,
                WaveFormat = soundstream.Format,
                DecodedPacketsInfo = soundstream.DecodedPacketsInfo
            };
            return buffer;

        }