Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions OpenUtau.Core/Util/NotePresets.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using OpenUtau.Core.Ustx;
Expand Down Expand Up @@ -73,12 +74,22 @@ public class PortamentoPreset {
public string Name = "Default";
public int PortamentoLength = 80;
public int PortamentoStart = -40;
public List<PitchPoint> PitchPoints = new List<PitchPoint>();
public PortamentoPreset() { }

public PortamentoPreset (string name, int length, int start) {
Name = name;
PortamentoLength = length;
PortamentoStart = start;
}
public PortamentoPreset(string name, List<PitchPoint>points) {
Name = name;
var start = points.FirstOrDefault()?.X ?? 0;
var end = points.LastOrDefault()?.X ?? 0;
PortamentoLength = (int)(end - start);
PortamentoStart = (int)(start);
PitchPoints = points;
}

public override string ToString() => Name;
}
Expand Down
25 changes: 22 additions & 3 deletions OpenUtau/ViewModels/NotePropertiesViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public NotePropertiesViewModel() {
PanelControlPressed = true;
SetNoteParams("PortamentoLength", portamentoPreset.PortamentoLength);
SetNoteParams("PortamentoStart", portamentoPreset.PortamentoStart);
SetNoteParams("PortamentoPoints", portamentoPreset.PitchPoints);
PanelControlPressed = false;
DocManager.Inst.EndUndoGroup();
}
Expand Down Expand Up @@ -474,11 +475,11 @@ public void SetNoteParams(string tag, object? obj) {
if (string.IsNullOrEmpty(newOverride)) {
newOverride = null;
}

DocManager.Inst.StartUndoGroup("command.property.edit");
foreach (UNote note in selectedNotes) {
if (note.PhonemizerOverride != newOverride) {
DocManager.Inst.ExecuteCmd(new ChangeNotePhonemizerCommand(Part, note, newOverride));
DocManager.Inst.ExecuteCmd(new ChangeNotePhonemizerCommand(Part, note, newOverride));
}
}
DocManager.Inst.EndUndoGroup();
Expand Down Expand Up @@ -548,6 +549,15 @@ public void SetNoteParams(string tag, object? obj) {
}
}
}
} else if (tag == "PortamentoPoints") {
foreach (var note in selectedNotes) {
if (obj is List<PitchPoint> list) {
if (list.Count < 2) {
return;
}
DocManager.Inst.ExecuteCmd(new SetPitchPointsCommand(Part, note, new UPitch() { data = list }));
}
}
} else if (tag == "PitchCurveShape") {
if (obj != null && (obj is int value || int.TryParse(obj.ToString(), out value)) && Enum.IsDefined(typeof(PitchPointShape), value)) {
DocManager.Inst.ExecuteCmd(new SetPitchPointShapeCommand(Part, selectedNotes, (PitchPointShape)value));
Expand Down Expand Up @@ -699,7 +709,16 @@ public void SavePortamentoPreset(string name) {
if (string.IsNullOrEmpty(name)) {
return;
}
NotePresets.Default.PortamentoPresets.Add(new NotePresets.PortamentoPreset(name, (int)PortamentoLength, (int)PortamentoStart));
var note = selectedNotes.FirstOrDefault();
if (note != null) {
if (note.pitch.data.Count > 2) {
NotePresets.Default.PortamentoPresets.Add(new NotePresets.PortamentoPreset(name, note.pitch.data));
} else {
NotePresets.Default.PortamentoPresets.Add(new NotePresets.PortamentoPreset(name, (int)PortamentoLength, (int)PortamentoStart));
}
} else {
NotePresets.Default.PortamentoPresets.Add(new NotePresets.PortamentoPreset(name, (int)PortamentoLength, (int)PortamentoStart));
}
NotePresets.Save();
PortamentoPresets = new ObservableCollection<NotePresets.PortamentoPreset>(NotePresets.Default.PortamentoPresets);
}
Expand Down
Loading