Answer: See the code below
using System;
using System.Windows.Forms;
using System.Net;
using System.IO;
using Alvas.Audio;
namespace RadioCs
{
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
t.Interval = 15 * 60 * 1000;
t.Tick += new EventHandler(t_Tick);
t.Enabled = true;
}
Timer t = new Timer();
void t_Tick(object sender, EventArgs e)
{
if (CheckSilent("http://www.wmph.org:7050/wmph64k", 10000, -14))
{
Console.WriteLine("Alert!");
}
}
private static short dB2Short(double dB)
{
double times = Math.Pow(10, dB / 10);
return (short)(short.MaxValue * times);
}
private bool CheckSilent(string StreamURL, int timeOut, double mindb)
{
HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(StreamURL);
Uri MyURI = new Uri(StreamURL);
WebReq.Headers.Clear();
WebReq.Timeout = timeOut;
WebReq.Headers.Add("GET", MyURI.AbsolutePath + " HTTP/1.0");
WebReq.UserAgent = "WinampMPEG/5.0";
WebReq.Headers.Add("Icy-MetaData", "1");
WebResponse WebRes = WebReq.GetResponse();
Stream oReader = WebRes.GetResponseStream();
int MetaInterval = int.Parse(WebRes.Headers["icy-metaint"]);
byte[] data = new byte[MetaInterval];
byte b = 0;
int BlockCount = 0;
int pass = 0;
MemoryStream ms = new MemoryStream();
try
{
while (true)
{
b = (byte)oReader.ReadByte();
if (BlockCount == MetaInterval)
{
ms.Write(data, 0, data.Length);
pass += 1;
if (pass >= 5)
{
Mp3Reader mr = new Mp3Reader(ms);
IntPtr format = mr.ReadFormat();
short[] buffer = AudioCompressionManager.RecalculateData(format, ms.ToArray(), -1);
mr.Close();
int silentLevel = dB2Short(mindb);
for (int i = 0; i < buffer.Length; i++)
{
if (buffer[i] > silentLevel)
{
return false;
}
}
return true;
}
int MetaDataLength = b * 16;
if (MetaDataLength > 0)//skip metadata
{
byte[] MetaArray = new byte[MetaDataLength];
oReader.Read(MetaArray, 0, MetaDataLength);
}
BlockCount = 0;
continue;
}
else
{
data[BlockCount] = b;
}
BlockCount = BlockCount + 1;
}
}
finally
{
oReader.Close();
}
}
}
}
Audio Library needed for this example is here(Alvas.Audio Free Trial).
No comments:
Post a Comment