SoudPlayer一次又一次播放相同的文件

时间:2014-07-29 13:24:07

标签: c# audio

我正在使用C#在我的应用程序中录制。

我将语音录制到同一个文件并播放,但SoundPlayer播放第一次录制的内容。

例如,我有test.wav文件,我记录"hello"然后我将"hi"记录到同一个文件

通过覆盖文件。当我播放test.wav文件时,播放器会播放"hello"

我只有一个播放器实例,例如

public static System.Media.SoundPlayer Player;      

static void Main()
{           
    try
    {
        Player = new System.Media.SoundPlayer();
    }
    catch (Exception ex)
    {
    }
}

播放文件的代码:

public static void Play(string fileName)
{
    if (File.Exists(fileName))
    {
        Program.Player.SoundLocation = fileName;
        Program.Player.Load();
        if (Program.Player.IsLoadCompleted)
        {
            Program.Player.Play();
        }
    }
}

我不知道这里有什么问题。

1 个答案:

答案 0 :(得分:1)

SoundLocation属性的Setter内部是一个有趣的检查:

set
{
    if (value == null)
    {
        value = string.Empty;
    }
    if (!this.soundLocation.Equals(value))
    {
        this.SetupSoundLocation(value);
        this.OnSoundLocationChanged(EventArgs.Empty);
    }
}

您可以看到它查看新位置是否与旧位置不同。如果是,那么它会进行一些设置工作。如果没有,它基本上什么都不做。

我打赌你可以通过做这样的事情来解决这个问题:

public static void Play(string fileName)
{
    if (File.Exists(fileName))
    {
        Program.Player.SoundLocation = "";
        Program.Player.SoundLocation = fileName;
        Program.Player.Load();
        if (Program.Player.IsLoadCompleted)
        {
            Program.Player.Play();
        }
    }
}

第一次调用SoundLocation setter会清除加载的流。然后,第二个将再次使用该位置进行正确设置,并允许Load按预期加载流。