我正在使用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();
}
}
}
我不知道这里有什么问题。
答案 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
按预期加载流。