예제 #1
0
        private void _MusicTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (Music.IsActive == PlaybackState.Playing)
            {
                if (IsPlayNote && NoteTabSelected)
                {
                    NoteData note = NoteData
                                    .OrderBy(x => x.NoteTime)
                                    .Where(x => x.NoteTime + NoteOffset <= Music.CurrentTime)
                                    .LastOrDefault(x => x.NoteTime + NoteOffset > Music.PreviousNote);

                    if (note != null)
                    {
                        PlayNote(note.Note);
                        Music.PreviousNote = note.NoteTime + NoteOffset;

                        //SelectedNote 프로퍼티를 조작하면 끊기기 때문에 직접 접근으로 대체
                        _SelectedNote = note;
                        RaisePropertyChanged(nameof(SelectedNote));
                    }
                }
                if (_CurrentBPM.Value != 0)
                {
                    if (Music.PreviousBeat < _NextBeatTime && Music.CurrentTime >= _NextBeatTime)
                    {
                        Music.PreviousBeat = _NextBeatTime;
                        RaisePropertyChanged("BeatTime");

                        if (TimimgTabSelected || NoteDivPreview)
                        {
                            string beat = "beat.wav";

                            if (_BeatMul % 4 == 0 && !NoteDivPreview)
                            {
                                beat = "beat2.wav";
                            }

                            //EntryAssembly/sound/FileName
                            var soundPath = Path.Combine(
                                Path.GetDirectoryName(Assembly.GetEntryAssembly().Location),
                                "sound",
                                beat
                                );

                            int channel = Bass.CreateStream(soundPath, 0, 0, BassFlags.Prescan | BassFlags.AutoFree);
                            Bass.ChannelPlay(channel);
                        }
                    }
                }
            }

            RaisePropertyChanged(nameof(MusicTime));
            RaisePropertyChanged(nameof(MusicSlider));
        }
예제 #2
0
 public void OrderNote()
 {
     NoteData = new ObservableCollection <Models.NoteData>(NoteData.OrderBy(x => x.NoteTime));
     RaisePropertyChanged(nameof(NoteData));
 }