/// <summary> /// Creates a timer to release the iTunes library after so many minutes of inactivity /// </summary> /// <param name="maximumMinutes"></param> private static void LibraryTimer(int maximumMinutes) { Timer timer = new Timer(60 * 1000.0) { AutoReset = true }; timer.Elapsed += (sender, e) => { lock (syncRoot) { idleTimer++; if (idleTimer >= maximumMinutes) { if (library != null) { library.Quit(); } library = null; timer.Stop(); timer.Dispose(); timer = null; } } }; timer.Start(); }
private void CloseITunes() { while (ReadyForSync == null) { ; // Wait if still opening iTunes before trying to close } ReadyForSync = false; if (Device.DeviceName != null) { Device.DeviceName = null; // Tell MusicBee to call Eject() Plugin.MbApiInterface.MB_SendNotification(Plugin.CallbackType.StorageEject); } if (iTunes != null) { try { iTunes.Quit(); } catch (Exception x) { Trace.WriteLine(x); } Marshal.ReleaseComObject(iTunes); iTunes = null; } OpenMenu.Enabled = true; }
/// <summary> /// Dispose of this instance, optionally exiting iTunes. /// </summary> /// <param name="finalRelease"><b>true</b> to exit iTunes.</param> public void Dispose(bool finalRelease) { if (!isDisposed) { // invoke Cleanup on behalf of the derived class Cleanup(finalRelease); if (isPrimaryController) { isConnected = false; if (itunes != null) { try { itunes.OnCOMCallsDisabledEvent -= disabledEvent; itunes.OnCOMCallsEnabledEvent -= enabledEvent; } catch (InvalidComObjectException) { // RCW may be released already... why? } disabledEvent = null; enabledEvent = null; if (finalRelease) { try { itunes.Quit(); } catch { // no-op } finally { Release(itunes); itunes = null; } } reset.Set(); reset.Close(); reset = null; } } isDisposed = true; GC.SuppressFinalize(this); } }
private void Dispose(bool disposing) { if (!disposing) { return; } try { _itunes.Quit(); } catch { Debug.Write("Unable to quit iTunes while disposing."); } finally { Marshal.ReleaseComObject(_itunes); } }
/// <summary> /// Adds a file to the iTunes library /// </summary> /// <param name="filePath">File path and name</param> /// <returns>True if successful, false if unable to add</returns> public static bool AddFileToiTunesLibrary(string filePath, Log jobLog) { iTunesApp iTunes = null; jobLog.WriteEntry("About to add " + filePath + " to the iTunes library", Log.LogEntryType.Debug); try { iTunes = new iTunesApp(); // Create a new iTunes object iTunes.Windows[1].Minimized = true; // Minimize the window IITLibraryPlaylist iTunesLibrary = iTunes.LibraryPlaylist; IITOperationStatus libStatus = iTunesLibrary.AddFile(filePath); if (libStatus == null) jobLog.WriteEntry("WARNING: Unsupported file type, file NOT added to iTunes library", Log.LogEntryType.Warning); else { int counter = 0; while (libStatus.InProgress && (++counter < 200)) Thread.Sleep(300); // Wait upto 60 seconds for iTunes to finish if (libStatus.InProgress) jobLog.WriteEntry("iTunes add to library still in progress, iTunes may have hung", Log.LogEntryType.Warning); else jobLog.WriteEntry("Added " + filePath + " successfully to the iTunes library", Log.LogEntryType.Information); } // Release the COM object and clean up otherwise it hangs later iTunes.Quit(); // Close the app Marshal.FinalReleaseComObject(iTunes); iTunes = null; return true; } catch (Exception e) { jobLog.WriteEntry("ERROR: Unable to communicate with iTunes Library, iTunes may not be installed. File not added to the iTunes library.\r\nError : " + e.ToString(), Log.LogEntryType.Error); // Release the COM object if (iTunes != null) { iTunes.Quit(); // Close the app Marshal.FinalReleaseComObject(iTunes); iTunes = null; } return false; } }
private static void createPlaylist() { try { iTunesApp app = new iTunesApp(); app.ForceToForegroundOnDialog = true; //app.SetOptions(); would be nice to kill autoarrange IITPlaylistCollection pl = app.LibrarySource.Playlists; IITUserPlaylist playlist = null; playlist = findPlaylist(pl, playlist); if (playlist == null) { playlist = (IITUserPlaylist)app.CreatePlaylist(playlistName); } else { // remove tracks, how? foreach (IITTrack t in playlist.Tracks) { //t.Delete(); <== ? } } iTunesLib.IITLibraryPlaylist lp = app.LibraryPlaylist; IITTrackCollection itTracks = app.LibraryPlaylist.Tracks; Dictionary <string, int> libraryTrackDictionary = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); List <string> libraryTrackFiles = new List <string>(); foreach (IITTrack t in itTracks) { if (Cancel) { break; } if (t.Kind == ITTrackKind.ITTrackKindFile) { string l = (t as IITFileOrCDTrack).Location; if (l != null) { libraryTrackFiles.Add(l); if (!libraryTrackDictionary.ContainsKey(l)) { libraryTrackDictionary.Add(l, t.Index); } } } } List <string> allTracks = new List <string>(); foreach (Track t in tracks) { allTracks.Add(t.FilePath); } object oo = (object)(allTracks.ToArray()); playlist.AddFiles(ref oo); Controller.ShowMessage("Completed sending playlist to iTunes."); app.Quit(); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Clock.DoOnMainThread(ShowError); } Busy = false; }
private void initRecognizer() { mRecognizerRule = new SpeechLib.SpInProcRecoContext(); bool hit = false; foreach (SpObjectToken recoPerson in mRecognizerRule.Recognizer.GetRecognizers()) { if (recoPerson.GetAttribute("Language") == "411") { mRecognizerRule.Recognizer.Recognizer = recoPerson; hit = true; break; } } if (!hit) { MessageBox.Show("日本語認識が利用できません"); Application.Exit(); } mRecognizerRule.Recognizer.AudioInput = createMicrofon(); if (mRecognizerRule.Recognizer.AudioInput == null) { MessageBox.Show("マイク初期化エラー"); Application.Exit(); } mRecognizerRule.Hypothesis += delegate(int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult result) { string strText = result.PhraseInfo.GetText(); textBox1.Text = strText; }; mRecognizerRule.Recognition += delegate(int streamNumber, object streamPosition, SpeechLib.SpeechRecognitionType srt, SpeechLib.ISpeechRecoResult isrr) { SpeechEngineConfidence confidence = isrr.PhraseInfo.Rule.Confidence; switch (confidence) { case SpeechEngineConfidence.SECHighConfidence: label3.Text = "Confidence is High"; break; case SpeechEngineConfidence.SECNormalConfidence: label3.Text = "Confidence is Normal"; break; case SpeechEngineConfidence.SECLowConfidence: label3.Text = "Confidence is Low"; textBox2.Text = "信頼性が低すぎます"; return; } string strText = isrr.PhraseInfo.GetText(); //isrr.PhraseInfo. label4.Text = isrr.RecoContext.Voice.Volume.ToString(); if (strText == "えんいー") { Application.Exit(); } if (itunes != null) { switch (strText) { case "あいちゅーんず.つぎのきょく": case "あいちゅーんず.つぎ": itunes.NextTrack(); break; case "あいちゅーんず.まえのきょく": case "あいちゅーんず.まえ": itunes.PreviousTrack(); break; case "あいちゅーんず.いちじていし": itunes.Pause(); break; case "あいちゅーんず.ていし": itunes.Stop(); break; case "あいちゅーんず.さいせい": itunes.Play(); break; case "あいちゅーんず.しね": itunes.Quit(); unhockiTunes(); break; case "あいちゅーんず.しずかに": itunes.SoundVolume = 50; break; case "あいちゅーんず.おおきく": itunes.SoundVolume = 100; break; case "あいちゅーんず.らんだむ": itunes.CurrentPlaylist.Shuffle = !itunes.CurrentPlaylist.Shuffle; break; } } else { if (strText == "あいちゅーんず.おきろ") { initiTunes(); } } textBox2.Text = strText; }; mRecognizerRule.StartStream += delegate(int streamNumber, object streamPosition) { textBox1.Text = textBox2.Text = ""; }; mRecognizerRule.FalseRecognition += delegate(int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult isrr) { textBox1.Text = textBox2.Text = label3.Text = "--Error!--"; }; mRecognizerGrammarRule = mRecognizerRule.CreateGrammar(); mRecognizerGrammarRule.Reset(); mRecognizerGrammarRuleGrammarRule = mRecognizerGrammarRule.Rules.Add("TopLevelRule", SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.おきろ"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.つぎのきょく"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.まえのきょく"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.つぎ"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.まえ"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.いちじていし"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.ていし"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.さいせい"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.しね"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.しずかに"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.おおきく"); mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.らんだむ"); // mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "えんいー"); mRecognizerGrammarRule.Rules.Commit(); mRecognizerGrammarRule.CmdSetRuleState("TopLevelRule", SpeechRuleState.SGDSActive); }