Пример #1
0
        public static void BeginAudioPlayback(string filePath, AudioOutputDevice audioOutputDevice, float volume, double beginTime, double endTime)
        {
            try
            {
                AudioFileReader audioFileReader = new AudioFileReader(filePath);

                // Configure mixer
                MixingSampleProvider mixer = new MixingSampleProvider(WaveFormat.CreateIeeeFloatWaveFormat(audioFileReader.WaveFormat.SampleRate, 2));

                // Force audio to stereo 2-channel
                MultiplexingWaveProvider waveProvider = new MultiplexingWaveProvider(new IWaveProvider[] { audioFileReader.ToWaveProvider() }, audioFileReader.WaveFormat.Channels > 1 ? 2 : 1);

                // Apply volume preferences
                VolumeSampleProvider volumeSampleProvider = new VolumeSampleProvider(waveProvider.ToSampleProvider())
                {
                    Volume = volume
                };

                // Force sample rate
                ISampleProvider convertedSampleProvider = ConvertToMixerSampleRate(mixer, ConvertToMixerChannelCount(mixer, volumeSampleProvider));

                // Seek
                OffsetSampleProvider offsetSampleProvider = new OffsetSampleProvider(convertedSampleProvider);
                offsetSampleProvider.SkipOver = TimeSpan.FromSeconds(beginTime);
                offsetSampleProvider.Take     = TimeSpan.FromSeconds(endTime) - offsetSampleProvider.SkipOver;

                // Configure mixer
                mixer.AddMixerInput(offsetSampleProvider);

                audioOutputDevice.InitializeAndPlay(mixer);
                audioOutputDevice.PlaybackStopped += (sender, e) =>
                {
                    //audioFileReader.Close();
                    audioFileReader.Dispose();
                };
            }
            catch (Exception ex)
            {
                ApplicationLogger.Log(ex.Message, ex.StackTrace);
            }
        }