每秒在c#windows窗体应用程序中自定义.wav文件
我在播放4秒长波时遇到一些问题。。。我现在正在做的是运行一个计时器 因此,计时器设置为第二个间隔。。。所以每一秒,我都跑去检查一些东西。。。如果该检查失败。。我播放一个wav文件,上面写着“回去工作!” 当前,它暂停计时器。。。。所以我听到“回去工作”,但当它播放时,我已经失去了4秒的计数时间,因为它仍然在播放完声音。。。。这是我的电话和我的功能每秒在c#windows窗体应用程序中自定义.wav文件,c#,audio,C#,Audio,我在播放4秒长波时遇到一些问题。。。我现在正在做的是运行一个计时器 因此,计时器设置为第二个间隔。。。所以每一秒,我都跑去检查一些东西。。。如果该检查失败。。我播放一个wav文件,上面写着“回去工作!” 当前,它暂停计时器。。。。所以我听到“回去工作”,但当它播放时,我已经失去了4秒的计数时间,因为它仍然在播放完声音。。。。这是我的电话和我的功能 playSimpleSound(); private void playSimpleSound() { SoundP
playSimpleSound();
private void playSimpleSound()
{
SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\shortwav.wav");
simpleSound.PlaySync();
}
如果我把它们关掉,这样每次点击都能播放。。。。我只听到wav文件的开头
playSimpleSound();
private void playSimpleSound()
{
SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\shortwav.wav");
simpleSound.Play();
}
所以我的问题是
如何继续计数并播放整个wav文件?
我是否应该计算出wav文件的长度,然后用mod进行计数
所以我基本上每x秒播放一次文件
因此,基本上每次只需调用playsound函数,但在该函数中,计算它被访问的次数,并且只在第4秒播放它?您可以这样做……在不同的线程上播放声音并切换标志:
public partial class Form1 : Form
{
private SoundPlayer simpleSound;
private bool SoundPlaying = false;
public Form1()
{
InitializeComponent();
this.Load += Form1_Load;
}
void Form1_Load(object sender, EventArgs e)
{
simpleSound = new SoundPlayer(@"c:\Windows\Media\shortwav.wav");
simpleSound.LoadAsync();
}
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine("Tick");
if (true) // check your condition
{
this.PlaySound();
}
}
private void PlaySound()
{
if (!this.SoundPlaying)
{
Console.WriteLine("Starting Sound");
this.SoundPlaying = true;
Task.Factory.StartNew(() => {
simpleSound.PlaySync();
this.SoundPlaying = false;
});
}
}
}
好主意。。效果很好:D