C# Dispose对象Speakasync到wav流

C# Dispose对象Speakasync到wav流,c#,audio,C#,Audio,我的代码创建了一个power point演示文稿和三个音频文件。 我想知道演示文稿创建后这些音频文件的长度,因此我使用: double duration = 0; WindowsMediaPlayer wmp = new WindowsMediaPlayer(); IWMPMedia mediainfo = wmp.newMedia(file); duration = mediainfo.durati

我的代码创建了一个power point演示文稿和三个音频文件。 我想知道演示文稿创建后这些音频文件的长度,因此我使用:

            double duration = 0;
            WindowsMediaPlayer wmp = new WindowsMediaPlayer();
            IWMPMedia mediainfo = wmp.newMedia(file);
            duration = mediainfo.duration;
            wmp.close();
            return duration;
创建我使用的音频文件

public void CreateAudio(string text)
            {
                y++;
                synth = new SpeechSynthesizer();
                AudioStream = new FileStream(folder + @"\audio\a" + @y.ToString() + @".wav", FileMode.OpenOrCreate);
                //synth.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(synth)
                synth.SetOutputToWaveStream(AudioStream);
                synth.SpeakAsync(text);                
            }
            private void synth_SpeakCompleted(object sender, SpeakCompletedEventArgs e)
            {
                synth.Dispose();
            }
public void CreateAudio(字符串文本)
{
y++;
synth=新的语音合成器();
AudioStream=newfilestream(文件夹+@“\audio\a”++@y.ToString()++@.wav”,FileMode.OpenOrCreate);
//synth.SpeakCompleted+=新事件处理程序(synth)
synth.SetOutputToWaveStream(音频流);
合成语音同步(文本);
}
私有void synth_SpeakCompleted(对象发送方,SpeakCompletedEventArgs e)
{
synth.Dispose();
}
问题是,创建演示文稿后,只有最短的音频文件返回长度,其余文件返回0。 如果我手动检查,我会看到3个具有有效长度属性的音频文件,但由于某种原因,程序不会读取这些文件。 我处理synth的尝试没有改变任何事情,使用syth.speak也没有改变任何事情。因此,我肯定在使用和管理我的对象和内存时犯了严重错误,但我不知道是什么或在哪里


例如,如果我使用代码来检查用不同代码创建的音频文件的长度,它工作得很好,就在我创建音频文件并希望检查其长度时,出现了一些问题。

您必须阅读该代码的备注部分。WMP太笨重了。这不是正确的方法,你问的问题是错误的。那么,在代码中刚刚创建这些文件之后,有什么更好、更简单的方法来检查这些文件的持续时间呢?你必须阅读。WMP太笨重了。这不是正确的方法,你问的问题是错误的。那么,在代码中创建这些文件之后,有什么更好、更简单的方法来检查这些文件的持续时间呢?