Closed. This question needs
debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为
on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我正在使用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();
}
}
}
我不知道这是怎么回事。
在setter中的SoundLocation
属性里面是一个有趣的检查:
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
如预期那样加载流。
我是一名优秀的程序员,十分优秀!