79 lines
1.3 KiB
C#
79 lines
1.3 KiB
C#
|
using System;
|
|||
|
using System.Threading;
|
|||
|
using System.Collections.Generic;
|
|||
|
namespace AudioStreamer
|
|||
|
{
|
|||
|
public class AudioStreamer
|
|||
|
{
|
|||
|
Thread thread;
|
|||
|
bool exitRequested;
|
|||
|
|
|||
|
List<AudioSource> sources;
|
|||
|
|
|||
|
public AudioStreamer()
|
|||
|
{
|
|||
|
this.sources = new List<AudioSource>();
|
|||
|
exitRequested = false;
|
|||
|
this.thread = null;
|
|||
|
}
|
|||
|
|
|||
|
public void addAudioSource(AudioSource source){
|
|||
|
this.sources.Add(source);
|
|||
|
}
|
|||
|
public void removeAudioSource(AudioSource source){
|
|||
|
this.sources.Remove(source);
|
|||
|
}
|
|||
|
|
|||
|
public void Start(){
|
|||
|
Monitor.Enter(this);
|
|||
|
|
|||
|
if (thread == null){
|
|||
|
Console.WriteLine("AudioStreamer.Start():");
|
|||
|
exitRequested = false;
|
|||
|
thread = new Thread(pusher);
|
|||
|
thread.Start();
|
|||
|
}
|
|||
|
|
|||
|
Monitor.Exit(this);
|
|||
|
}
|
|||
|
|
|||
|
public void Stop(){
|
|||
|
Monitor.Enter(this);
|
|||
|
|
|||
|
exitRequested = true;
|
|||
|
Monitor.Wait(this, 1000);
|
|||
|
|
|||
|
this.thread = null;
|
|||
|
|
|||
|
Monitor.Exit(this);
|
|||
|
}
|
|||
|
|
|||
|
private void pusher(){
|
|||
|
Monitor.Enter(this);
|
|||
|
try
|
|||
|
{
|
|||
|
Console.WriteLine("pusher(): start");
|
|||
|
|
|||
|
while (!exitRequested){
|
|||
|
Monitor.Exit(this);
|
|||
|
|
|||
|
foreach (AudioSource source in this.sources){
|
|||
|
source.Source();
|
|||
|
}
|
|||
|
|
|||
|
Monitor.Enter(this);
|
|||
|
}
|
|||
|
}
|
|||
|
catch (Exception e){
|
|||
|
Console.WriteLine("pusher(): Exception: {0}", e);
|
|||
|
}
|
|||
|
|
|||
|
Console.WriteLine("pusher(): stop");
|
|||
|
|
|||
|
Monitor.PulseAll(this);
|
|||
|
Monitor.Exit(this);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|