CRVM-redis-6/IDExcuter/AlarmRing.cs
2025-11-07 02:02:31 +08:00

118 lines
3.9 KiB
C#

using System;
using System.Threading;
using CRVM.Entity;
namespace CRVM.SIDExcuter
{
class AlarmRing
{
/// <summary>
/// 播放波形文件
/// </summary>
/// <param name="Filename">文件路径</param>
/// <param name="Mod">一般情况下为0</param>
/// <param name="Flags"></param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("winmm.dll")]
public static extern bool PlaySound(String Filename, int Mod, int Flags);
protected const int SND_SYNC = 0x0; //同步播放,线程阻塞
protected const int SND_ASYNC = 0x1;//异步播放
protected const int SND_NODEFAULT = 0x2;
protected const int SND_MEMORY = 0x4;
protected const int SND_LOOP = 0x8;
protected const int SND_NOSTOP = 0x10;
protected const int SND_NOWAIT = 0x2000;
protected const int SND_ALIAS = 0x10000;
protected const int SND_ALIAS_ID = 0x110000;
protected const int SND_FILENAME = 0x20000;
protected const int SND_RESOURCE = 0x40004;
protected const int SND_PURGE = 0x40;
protected const int SND_APPLICATION = 0x80;
private Thread vp;
/// <summary>
/// 开启报警铃声
/// </summary>
public void Ring(bool low,bool mid ,bool high)
{
if (vp != null && vp.IsAlive)
{
vp.Abort();
}
if (mid)
{
//PlaySound("mid.wav", 0, SND_FILENAME | SND_ASYNC);
PlaySound("low.wav", 0, SND_FILENAME | SND_ASYNC);
}
else if (high)
{
//PlaySound("high.wav", 0, SND_FILENAME | SND_ASYNC);
PlaySound("low.wav", 0, SND_FILENAME | SND_ASYNC);
}
else if (low)
{
PlaySound("low.wav", 0, SND_FILENAME | SND_ASYNC);
}
}
/// <summary>
/// 根据报警标记播放报警信息
/// </summary>
/// <param name="alarmFlag">报警标记[机架号,类型]</param>
public void AlarmVoice(bool[,] alarmFlag)
{
if (vp != null && vp.IsAlive)
{
vp.Abort();
}
vp = new Thread(() => AlarmVoicePlay(alarmFlag));
vp.Start();
}
internal void DefectVoice(bool[,] tempDefectFlag, bool[,] alarmFlag)
{
if (vp != null && vp.IsAlive)
{
vp.Abort();
}
vp = new Thread(() => DefectVoicePlay(tempDefectFlag, alarmFlag));
vp.Start();
//Console.WriteLine(DateTime.Now.ToString("HH:mm:ss.fff") + " 线程号:" + Thread.CurrentThread.ManagedThreadId + " 线程池:" + Thread.CurrentThread.IsThreadPoolThread);
}
private void AlarmVoicePlay(bool[,] alarmFlag)
{
for (int i = 5; i >= 1; i--)
{
for (int j = 3; j >= 1; j--)
{
if (alarmFlag[i - 1, j - 1])
{
PlaySound(SysParam.Instance.appPath+@"\ring\alarm" + i + "-" + j + ".wav", 0, SND_FILENAME | SND_ASYNC);
Thread.Sleep(2000);
}
}
}
}
private void DefectVoicePlay(bool[,] defectFlag, bool[,] alarmFlag)
{
//for (int i = 5; i >= 1; i--)
//{
// for (int j = 3; j >= 1; j--)
// {
// if (defectFlag[i - 1, j - 1])
// {
// PlaySound(SysParam.Instance.appPath+@"\ring\defect" + i + "-" + j + ".wav", 0, SND_FILENAME | SND_ASYNC);
// Thread.Sleep(2000);
// }
// }
//}
AlarmVoicePlay(alarmFlag);
}
}
}