Model manual auto musical parameters
This commit is contained in:
@@ -154,6 +154,38 @@ public extension SongProject {
|
|||||||
dialects.removeAll { $0.id == dialectID }
|
dialects.removeAll { $0.id == dialectID }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutating func setBPMManually(_ value: Int) {
|
||||||
|
bpm = ManualAutoValue(mode: .manual, value: value)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setBPMAutomatic() {
|
||||||
|
bpm = ManualAutoValue(mode: .auto)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setKeyManually(_ value: String) {
|
||||||
|
key = ManualAutoValue(mode: .manual, value: value)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setKeyAutomatic() {
|
||||||
|
key = ManualAutoValue(mode: .auto)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setScaleManually(_ value: String) {
|
||||||
|
scale = ManualAutoValue(mode: .manual, value: value)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setScaleAutomatic() {
|
||||||
|
scale = ManualAutoValue(mode: .auto)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setMaqamManually(_ value: String) {
|
||||||
|
maqam = ManualAutoValue(mode: .manual, value: value)
|
||||||
|
}
|
||||||
|
|
||||||
|
mutating func setMaqamAutomatic() {
|
||||||
|
maqam = ManualAutoValue(mode: .auto)
|
||||||
|
}
|
||||||
|
|
||||||
var selectedInstrumentTracks: [InstrumentTrack] {
|
var selectedInstrumentTracks: [InstrumentTrack] {
|
||||||
instruments.filter(\.selected)
|
instruments.filter(\.selected)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -279,4 +279,32 @@ final class SongProjectModelTests: XCTestCase {
|
|||||||
XCTAssertEqual(project.dialects(forLanguageID: arabic.id), [])
|
XCTAssertEqual(project.dialects(forLanguageID: arabic.id), [])
|
||||||
XCTAssertEqual(project.languageIDs, ["english"])
|
XCTAssertEqual(project.languageIDs, ["english"])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testMusicalParametersSupportManualAndAutoModes() {
|
||||||
|
var project = SongProject(
|
||||||
|
id: "project-8",
|
||||||
|
title: "Musical Parameters",
|
||||||
|
idea: "Control tempo and harmony"
|
||||||
|
)
|
||||||
|
|
||||||
|
project.setBPMManually(104)
|
||||||
|
project.setKeyManually("D")
|
||||||
|
project.setScaleAutomatic()
|
||||||
|
project.setMaqamManually("Bayati")
|
||||||
|
|
||||||
|
XCTAssertEqual(project.bpm, ManualAutoValue(mode: .manual, value: 104))
|
||||||
|
XCTAssertEqual(project.key, ManualAutoValue(mode: .manual, value: "D"))
|
||||||
|
XCTAssertEqual(project.scale, ManualAutoValue(mode: .auto))
|
||||||
|
XCTAssertEqual(project.maqam, ManualAutoValue(mode: .manual, value: "Bayati"))
|
||||||
|
|
||||||
|
project.setBPMAutomatic()
|
||||||
|
project.setKeyAutomatic()
|
||||||
|
project.setScaleManually("minor")
|
||||||
|
project.setMaqamAutomatic()
|
||||||
|
|
||||||
|
XCTAssertEqual(project.bpm, ManualAutoValue(mode: .auto))
|
||||||
|
XCTAssertEqual(project.key, ManualAutoValue(mode: .auto))
|
||||||
|
XCTAssertEqual(project.scale, ManualAutoValue(mode: .manual, value: "minor"))
|
||||||
|
XCTAssertEqual(project.maqam, ManualAutoValue(mode: .auto))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -26,7 +26,7 @@ requirement is missing and blocks implementation, record it in
|
|||||||
- [x] Model instruments, variants, roles and placements.
|
- [x] Model instruments, variants, roles and placements.
|
||||||
- [x] Model multiple vocalists and section assignments.
|
- [x] Model multiple vocalists and section assignments.
|
||||||
- [x] Model language/dialect and Arabic pronunciation settings.
|
- [x] Model language/dialect and Arabic pronunciation settings.
|
||||||
- [ ] Model BPM, key, scale and maqam with Manual/Auto state.
|
- [x] Model BPM, key, scale and maqam with Manual/Auto state.
|
||||||
- [ ] Model emotional arc and production directions.
|
- [ ] Model emotional arc and production directions.
|
||||||
- [ ] Add serialization tests.
|
- [ ] Add serialization tests.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user