예제 #1
0
            /// <summary>
            /// questionで指定された曲ファイルをオープンします。
            /// オープンが完了すると、MediaOpenedイベントが発生します。
            /// </summary>
            /// <param name="question"></param>
            public void Open(SweetQuestion question)
            {
                Close();

                _questionTimeLine = new MediaTimeline(new Uri(question.FileName));
                //_questionTimeLine.Completed += question_Completed;
                CurrentQuestion = question;
            }
예제 #2
0
		// (0.2.0.2)
		#region *Order削除時
		private void MyDocument_OrderRemoved(object sender, GrandMutus.Data.OrderEventArgs e)
		{
			this.CurrentPhase = PlayingPhase.Talking;
			MyQuestionPlayer.Close();
			this.CurrentQuestion = null;
		}
예제 #3
0
		// (0.2.0.2)
		#region *Order追加時
		private void MyDocument_OrderAdded(object sender, GrandMutus.Data.OrderEventArgs e)
		{
			var q_id = e.QuestionID;
			if (q_id.HasValue)
			{
				var nextQuestion = MyDocument.Questions.Get(q_id.Value);
				this.CurrentQuestion = nextQuestion;
				MyQuestionPlayer.Open(nextQuestion);
				this.CurrentPhase = PlayingPhase.Ready;
			}
		}
예제 #4
0
		//AutoResetEvent _mediaOpenedEvent = new AutoResetEvent(false);

		// (0.1.0)再生開始位置から再生するように修正。
		#region Playコマンド
		void Play_Executed(object sender, ExecutedRoutedEventArgs e)
		{
			if (e.Parameter is SweetQuestion)
			{
				var song = (SweetQuestion)e.Parameter;
				_songPlayer.Open(song.FileName);

				// このまま次の処理に進むと、まだファイルが開いていないうちにCurrentPositionを設定しまうことがある!
				// =ここでの設定が反映されない!
				// 同期をとればよい?が、そのやり方がよくわからないので適当にDelayを挟む。
				Task.Delay(10);

				this.CurrentSong = song;
				_songPlayer.CurrentPosition = song.PlayPos;
				_songPlayer.Play();

				this.expanderSongPlayer.IsExpanded = true;  // ←これはここに書くべきものなのか?
			}
		}
예제 #5
0
			/// <summary>
			/// questionで指定された曲ファイルをオープンします。
			/// オープンが完了すると、MediaOpenedイベントが発生します。
			/// </summary>
			/// <param name="question"></param>
			public void Open(SweetQuestion question)
			{
				Close();

				_questionTimeLine = new MediaTimeline(new Uri(question.FileName));
				//_questionTimeLine.Completed += question_Completed;
				CurrentQuestion = question;
			}
예제 #6
0
		bool LoadGrandMutusDocument(XElement root, string fileName)
		{
			// rootからMutusDocumentというメソッドはないんだっけ?
			MutusDocument doc = new MutusDocument();
			
			doc.LoadGrandMutusDocument(root, fileName);	// 0.6.4.2以降!

			NowLoading = true;
			try {
				foreach (var q in doc.Questions)
				{
					IntroQuestion question = (IntroQuestion)q;
					var sweet_question = new SweetQuestion(question.Song);
					sweet_question.PlayPos = question.PlayPos;
					// intro_question側で未実装.
					//sweet_question.StopPos = question.StopPos;
					sweet_question.Category = question.Category;
					sweet_question.No = question.No;

					this.AddQuestion(sweet_question);
				}
			}
			finally { NowLoading = false; }
			return true;
		}
예제 #7
0
		// (0.3.1)
		//void Questions_QuestionsRemoved(object sender, ItemEventArgs<IEnumerable<SweetQuestion>> e)
		//{
		//	AddOperationHistory(new SweetQuestionsRemovedCache(this, e.Item));
		//}

		// (0.2.0)staticを解除。boolを返すように変更。
		// (0.1.7)再生開始位置もロードするように変更.
		// HyperMutusからのパクリ.古いメソッドだけど,とりあえずそのまま使う.
		// 場所も未定.とりあえずstatic化してここに置いておく.
		#region *ファイルからメタデータを読み込み(LoadInformation)
		/// <summary>
		/// songのFileNameプロパティで指定されたファイルからメタデータを読み込みます.
		/// </summary>
		bool LoadInformation(SweetQuestion question)
		{
			SPP.Aldente.IID3Tag tag;
			try
			{
				tag = SPP.Aldente.AldenteMP3TagAccessor.ReadFile(question.FileName);
			}
			catch (IOException ex)
			{
				// 通知したい。
				if (Confirm(string.Format(
					"読み込みに失敗しました。 - {0} \n曲情報を読み込まずに曲ファイルを追加しますか?", ex.Message)))
				{
					tag = null;
				}
				else
				{
					return false;
				}
			}
			catch (ApplicationException)
			{
				tag = null;
			}
			question.Title = tag == null ? string.Empty : tag.Title;
			question.Artist = tag == null ? string.Empty : tag.Artist;
			question.SabiPos = tag == null ? TimeSpan.Zero : TimeSpan.FromSeconds(Convert.ToDouble(tag.SabiPos));
			question.PlayPos = tag == null ? TimeSpan.Zero : TimeSpan.FromSeconds(Convert.ToDouble(tag.StartPos));
			return true;
		}
예제 #8
0
		/// <summary>
		/// questionがnullの場合は、何もせずにnullを返します。
		/// </summary>
		/// <param name="question"></param>
		/// <returns></returns>
		private SweetQuestion AddQuestion(SweetQuestion question)
		{
			if (question == null)
			{
				return null;
			}
			try
			{
				_questions.Add(question);	// この後の処理でSongDuplicateExceptionが発生する。
				_addedSongFiles.Add(question.FileName);
				//SongAdded(this, new ItemEventArgs<Song> { Item = song });
				return question;
			}
			catch (SongDuplicateException)
			{
				// この時点ではsongが_songsに追加された状態になっているので、ここで削除する。
				_questions.Remove(question);
				return null;
			}
		}
예제 #9
0
		// (0.2.2.1)カテゴリを設定できるように改良。
		// (0.2.0)曲を追加しない場合にnullを返すように変更。
		#region *曲を追加(AddQuestions)
		/// <summary>
		/// このメソッドが直接呼び出されることは想定していません.
		/// 呼び出し元でAddSongsActionに設定されるActionの中で呼び出して下さい(ややこしい...).
		/// </summary>
		/// <param name="fileName"></param>
		/// <returns></returns>
		public SweetQuestion AddQuestion(string fileName, string category = null)
		{
			SweetQuestion question = new SweetQuestion { FileName = fileName, Category = string.IsNullOrEmpty(category) ? string.Empty : category };
			if (LoadInformation(question))
			{
				return this.AddQuestion(question);
			}
			else
			{
				return null;
			}
		}