public void NewInstrument() { instruments.CreateInstrument( ); UpdateEnvelopes(); view.UpdatePatternData(); UpdateInstruments(); SetSelectedInstrument(instruments.presets.Length - 1); }
public void SetSelectedRow(MatrixRow select) { if (selection != null) { selection.SetSelected(false); } if (select != null) { select.SetSelected(true); selection = select; } if (playback.isPlaying && selection != null) { if (!scrollRect.viewport.rect.Contains(selection.transform.localPosition + scrollRect.content.localPosition)) { Vector3 pos = scrollRect.content.localPosition; pos.y = -selection.transform.localPosition.y - 150; scrollRect.content.localPosition = pos; } } patternView.UpdatePatternData(); }
public void ImportVGMFile(BinaryReader reader) { /* TODO: * Make sure that instrument editor is updated * Make sure tracker controls are updated (specifically pattern length) */ instruments.CreateInstrument(); instruments.presets[0].volumeTable = new int[] { 0xF }; instruments.presets[1].volumeTable = new int[] { 0xF }; data.SetPatternLength(128); data.SetData(0, 0, 3, 0xf); data.SetData(0, 0, 4, 0x1); reader.BaseStream.Position = 0x40; data.currentPattern = 0; m_LastVol = new int[4]; bool eof = false; while (reader.BaseStream.Position < reader.BaseStream.Length && !eof) { byte cmd = reader.ReadByte(); switch (cmd) { case 0x50: byte val = reader.ReadByte(); ParsePSGData(val); break; case 0x61: int inc = Mathf.FloorToInt(reader.ReadUInt16() / 735.0f); m_CurrRow += inc; if (m_CurrRow >= data.patternLength) { m_CurrRow -= data.patternLength; data.AddPatternLine(); } break; case 0x62: case 0x63: m_CurrRow++; if (m_CurrRow >= data.patternLength) { m_CurrRow = 0; data.AddPatternLine(); } break; case 0x66: eof = true; break; } } matrix.UpdateMatrix(); view.UpdatePatternData(); }
void Update() { if (!ExclusiveFocus.currentFocus && Input.GetKeyDown(KeyCode.Return)) { if (m_IsPlaying) { Stop(); } else { Play(true); } } if (follow && m_IsPlaying && Time.time - m_LastLineTick > 1f / 50f) { while (m_MoveLine > 0) { m_MoveLine--; if (m_PatternBreakTarget >= 0) { data.currentPattern++; view.selectedLine = m_PatternBreakTarget; m_PatternBreakTarget = -1; view.UpdatePatternData(); continue; } view.selectedLine++; if (view.selectedLine == 0) { data.currentPattern++; if (data.currentPattern >= data.numPatterns) { data.currentPattern = m_PatternLoop; } view.UpdatePatternData( ); } m_LastLineTick = Time.time; } } }
private void ApplyEvent(FiniteStack <HistoryEvent> apply) { if (apply.count <= 0) { return; } HistoryEvent next = apply.Pop(); next.Restore(data.songData); data.currentPattern = next.pattern; view.UpdatePatternData(); Debug.Log("Next line is " + next.position.line); view.SetSelection(next.position); }
public void OptimizeSong() { if (!TinyFileDialogs.MessageBox("Optimizing song", "This will erase any unused patterns! Are you sure?", TinyFileDialogs.DialogType.YESNO, TinyFileDialogs.IconType.WARNING, false)) { return; } Dictionary <int, int> sortedIndicies = new Dictionary <int, int> ( ); List <ColumnEntry> sortedData = new List <ColumnEntry> ( ); foreach (int[] row in m_LookupTable) { for (int i = 0; i < 4; i++) { int oldIndex = row [i]; int newIndex = sortedData.Count; if (oldIndex >= 0 && !sortedIndicies.ContainsKey(oldIndex)) { sortedData.Add(m_SongData [row [i]]); sortedIndicies.Add(oldIndex, newIndex); } } } foreach (int [] row in m_LookupTable) { for (int i = 0; i < 4; i++) { if (sortedIndicies.ContainsKey(row [i])) { row [i] = sortedIndicies [row [i]]; } } } m_SongData = sortedData; patternMatrix.UpdateMatrix(); patternView.UpdatePatternData(); }
public void OpenFile() { if (fileModified && !TinyFileDialogs.MessageBox("Opening tune", "Are you sure? You will lose all unsaved progress.", TinyFileDialogs.DialogType.YESNO, TinyFileDialogs.IconType.WARNING, false)) { return; } playback.Stop( ); data.currentPattern = 0; if (m_TuneOpen.ShowDialog()) { IFormatter formatter = new BinaryFormatter( ); Stream fs = m_TuneOpen.OpenFile( ); SongFile open = (SongFile)formatter.Deserialize(fs); fs.Close( ); if (!open.success) { return; } data.SetPatternLength(open.patternLength); data.lookupTable = open.lookupTable; if (open.transposeTable != null && open.transposeTable.Count == open.lookupTable.Count) { data.transposeTable = open.transposeTable; } else { Debug.Log("Transpose table too shourt!!"); data.transposeTable = new List <int []> ( ); for (int i = 0; i < data.lookupTable.Count; i++) { int [] transposeEntry; if (open.transposeTable != null && i < open.transposeTable.Count) { transposeEntry = open.transposeTable [i]; } else { transposeEntry = new int [data.channels]; } data.transposeTable.Add(transposeEntry); } } data.songData = open.songData; SongData.songName = open.songName ?? ""; SongData.artistName = open.artistName ?? ""; keyboard.currentInstrument = 0; int presetCount = open.instruments.Length; Array.Resize(ref instruments.presets, presetCount); Array.Copy(open.instruments, instruments.presets, presetCount); m_OpenFile = m_TuneOpen.filePath; fileModified = false; if (onFileOpen != null) { onFileOpen( ); } patternMatrix.UpdateMatrix(); patternView.UpdatePatternData(); insEditor.UpdateInstruments(); insEditor.UpdateInstrumentInfo(); insEditor.SetSelectedInstrument(0); playback.playbackSpeed = 6; } }