public void Stop() { if (Duration > 2) { _audioPlayer.Stop(); } }
public void Stop() { //HACK: Stopping or pausing NSSound is really slow (~200ms), don't if the sample is short :/ //Uncomment the if clause if you have trouble with stopping sounds. //Note that with the if active it is impossible to stop looped sounds that are shorter than x seconds! //if (Duration > 2) { _audioPlayer.Stop(); //} }
public override void FinishedLaunching(NSObject notification) { // Configure logger string path = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "log4net.config"); XmlConfigurator.ConfigureAndWatch(new FileInfo(path)); logger.Info("Ventriliquest 1.0 Starting up..."); // Get list of available audio out devices xamspeech ham = new xamspeech(); OutputDevices = ham.GetDevices(); // Setup UI statusMenu = new NSMenu(); statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30); var outputItem = new NSMenuItem("Output Device", (a, b) => { }); var deviceList = new NSMenu(); outputItem.Submenu = deviceList; OutputDeviceUID = "Built-in Output"; foreach (var entry in OutputDevices) { var test = new NSMenuItem(entry.Key.ToString(), (a, b) => { foreach (NSMenuItem item in deviceList.ItemArray()) { item.State = NSCellStateValue.Off; } NSMenuItem theItem = (NSMenuItem)a; theItem.State = NSCellStateValue.On; config.OutputDevice = theItem.Title; foreach (var e in OutputDevices) { if (e.Key.ToString().Equals(theItem.Title)) { OutputDeviceUID = e.Value.ToString(); } } }); if (entry.Key.ToString().Equals(config.OutputDevice)) { test.State = NSCellStateValue.On; OutputDeviceUID = entry.Value.ToString(); } deviceList.AddItem(test); } var daItem = new NSMenuItem("Local Connections Only", (a, b) => { NSMenuItem theItem = (NSMenuItem)a; if (theItem.State == NSCellStateValue.On) { config.LocalOnly = false; theItem.State = NSCellStateValue.Off; } else { config.LocalOnly = true; theItem.State = NSCellStateValue.On; } }); if (config.LocalOnly) { daItem.State = NSCellStateValue.On; } var quitItem = new NSMenuItem("Quit", (a, b) => Shutdown()); var voiceconfigItem = new NSMenuItem("Voice Configuration", (a, b) => Process.Start("http://127.0.0.1:7888/config")); statusMenu.AddItem(new NSMenuItem("Version: 1.1")); statusMenu.AddItem(outputItem); statusMenu.AddItem(daItem); statusMenu.AddItem(voiceconfigItem); statusMenu.AddItem(quitItem); statusItem.Menu = statusMenu; statusItem.Image = NSImage.ImageNamed("tts-1.png"); statusItem.AlternateImage = NSImage.ImageNamed("tts-2.png"); statusItem.HighlightMode = true; speechdelegate.DidComplete += delegate { synthesis.Set(); }; sounddelegate.DidComplete += delegate { playback.Set(); IsSounding = false; IsSpeaking = false; sound.Dispose(); }; speech.Delegate = speechdelegate; queuetimer = new System.Timers.Timer(250); queuetimer.Elapsed += (object sender, ElapsedEventArgs e) => { TTSRequest r; if (Queue.TryDequeue(out r)) { if (r.Interrupt) { // stop current TTS NSApplication.SharedApplication.InvokeOnMainThread(delegate { if (IsSpeaking) { speech.StopSpeaking(); } if (IsSounding) { sound.Stop(); } }); // clear queue SpeechQueue.Clear(); } if (!r.Reset) { SpeechQueue.Enqueue(r); } RequestCount++; } var eventdata = new Hashtable(); eventdata.Add("ProcessedRequests", RequestCount); eventdata.Add("QueuedRequests", SpeechQueue.Count); eventdata.Add("IsSpeaking", IsSpeaking); InstrumentationEvent ev = new InstrumentationEvent(); ev.EventName = "status"; ev.Data = eventdata; NotifyGui(ev.EventMessage()); }; // when this timer fires, it will pull off of the speech queue and speak it // the 1000ms delay also adds a little pause between tts requests. speechtimer = new System.Timers.Timer(250); speechtimer.Elapsed += (object sender, ElapsedEventArgs e) => { if (IsSpeaking.Equals(false)) { if (SpeechQueue.Count > 0) { TTSRequest r = SpeechQueue.Dequeue(); IsSpeaking = true; speechtimer.Enabled = false; var oink = Path.Combine(audiopath, "temp.aiff"); NSApplication.SharedApplication.InvokeOnMainThread(delegate { ConfigureSpeechEngine(r); speech.StartSpeakingStringtoURL(r.Text, new NSUrl(oink, false)); }); synthesis.WaitOne(); NSApplication.SharedApplication.InvokeOnMainThread(delegate { IsSounding = true; sound = new NSSound(Path.Combine(audiopath, "temp.aiff"), false); sound.Delegate = sounddelegate; //if(OutputDeviceUID != "Default") { sound.PlaybackDeviceID = OutputDeviceUID; //} sound.Play(); }); playback.WaitOne(); IsSounding = false; speechtimer.Enabled = true; } } }; queuetimer.Enabled = true; queuetimer.Start(); speechtimer.Enabled = true; speechtimer.Start(); InitHTTPServer(); }
public void Stop() { _audioPlayer.Stop(); }