Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SoudPlayer反复播放同一个文件_C#_Audio - Fatal编程技术网

C# SoudPlayer反复播放同一个文件

C# SoudPlayer反复播放同一个文件,c#,audio,C#,Audio,我正在应用程序中使用C#进行录制 我将语音录制到同一个文件并播放,但SoundPlayer会播放第一次录制的内容 例如,我有一个文件test.wav,其中我记录了“hello”,然后我将“hi”记录到同一个文件中 通过覆盖文件。当我播放文件test.wav时,播放器播放“hello” 我只有一个player实例,例如 public static System.Media.SoundPlayer Player; static void Main() {

我正在应用程序中使用C#进行录制

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

例如,我有一个文件
test.wav
,其中我记录了
“hello”
,然后我将
“hi”
记录到同一个文件中

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

我只有一个player实例,例如

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();
        }
    }
}

我不知道这里出了什么问题。

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
按预期加载流。

“我不知道这里出了什么问题。”-而且你永远不会知道,只要你捕获并忽略所有有价值的异常。你实际加载和播放文件的代码在哪里?那么有异常吗?录音方法如何?@UweKeim:try/catch仅在我创建播放器时使用。谢谢添加额外代码。每次你将新文件写入磁盘时,整个播放函数都会被调用吗?谢谢,这很有帮助,你知道为什么一些聪明的人会投票否决我这个问题吗?周围都是奇怪的人……人们有时很快就投了反对票。但一般来说,当您最初发布问题时(例如,包括所有相关代码),它有助于确保您的问题格式正确且完整。