SoudPlayer 一遍又一遍地播放同一个文件[关闭]
Posted
技术标签:
【中文标题】SoudPlayer 一遍又一遍地播放同一个文件[关闭]【英文标题】:SoudPlayer plays the same file again and again [closed] 【发布时间】:2014-07-29 13:24:07 【问题描述】:我正在使用 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();
我不知道这里出了什么问题。
【问题讨论】:
"我不知道这里出了什么问题。" - 只要你抓住并忽略所有有价值的例外,你永远不会这样做。 实际加载和播放文件的代码在哪里? 所以有什么例外吗?录音方法呢? @UweKeim:try/catch 仅在我创建播放器时使用。 感谢您添加额外的代码。每次将新文件写入磁盘时都会调用整个 Play 函数吗? 【参考方案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
按预期加载流。
【讨论】:
谢谢,这有帮助,你知道为什么一些智者不赞成这个问题吗?周围都是奇怪的人…… 人们有时很快就会投反对票。但总的来说,它有助于确保您的问题在最初发布时格式正确且完整(例如,包括所有相关代码)。以上是关于SoudPlayer 一遍又一遍地播放同一个文件[关闭]的主要内容,如果未能解决你的问题,请参考以下文章