Skip to content

Commit efc0d67

Browse files
committed
Updated tests for Ensemble
Co-authored-by: <Marc-Andre Weibezahn> contact@maweibezahn.com
1 parent f5c0088 commit efc0d67

File tree

2 files changed

+146
-2
lines changed

2 files changed

+146
-2
lines changed

Tests/SoundpipeAudioKitTests/Effects Tests/EnsembleTests.swift

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,141 @@ class EnsembleTests: XCTestCase {
2020
let audio = engine.startTest(totalDuration: 5.0)
2121
input.play()
2222
audio.append(engine.render(duration: 5.0))
23-
audio.audition()
23+
testMD5(audio)
2424
}
25+
26+
func testAllVoicesActive() {
27+
let engine = AudioEngine()
28+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
29+
let input = AudioPlayer(url: url)!
30+
// Test with all 9 voices active in different pitch shifts
31+
let ensemble = Ensemble(input,
32+
shifts: [-12, -9, -6, -3, 0, 3, 6, 9, 12],
33+
pans: [-1, -0.5, -0.25, 0, 0, 0, 0.25, 0.5, 1],
34+
dryWetMix: 1.0)
35+
engine.output = ensemble
36+
let audio = engine.startTest(totalDuration: 5.0)
37+
input.play()
38+
audio.append(engine.render(duration: 5.0))
39+
testMD5(audio)
40+
}
41+
42+
func testArrayInitializer() {
43+
let engine = AudioEngine()
44+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
45+
let input = AudioPlayer(url: url)!
46+
// Test the array initializer with a C major chord
47+
let ensemble = Ensemble(input,
48+
shifts: [0, 4, 7],
49+
pans: [-1, 0, 1],
50+
dryWetMix: 1.0)
51+
engine.output = ensemble
52+
let audio = engine.startTest(totalDuration: 5.0)
53+
input.play()
54+
audio.append(engine.render(duration: 5.0))
55+
testMD5(audio)
56+
}
57+
58+
func testEmptyArrays() {
59+
let engine = AudioEngine()
60+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
61+
let input = AudioPlayer(url: url)!
62+
// Test with empty arrays (should default to single voice at 0 shift)
63+
let ensemble = Ensemble(input,
64+
shifts: [],
65+
pans: [],
66+
dryWetMix: 1.0)
67+
engine.output = ensemble
68+
let audio = engine.startTest(totalDuration: 5.0)
69+
input.play()
70+
audio.append(engine.render(duration: 5.0))
71+
testMD5(audio)
72+
}
73+
74+
func testSingleVoice() {
75+
let engine = AudioEngine()
76+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
77+
let input = AudioPlayer(url: url)!
78+
// Test with single voice
79+
let ensemble = Ensemble(input,
80+
shifts: [5],
81+
pans: [0.5],
82+
dryWetMix: 1)
83+
engine.output = ensemble
84+
let audio = engine.startTest(totalDuration: 5.0)
85+
input.play()
86+
audio.append(engine.render(duration: 5.0))
87+
testMD5(audio)
88+
}
89+
90+
func testDominantSeventhChord() {
91+
let engine = AudioEngine()
92+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
93+
let input = AudioPlayer(url: url)!
94+
// Test a dominant 7th chord: C, E, G, Bb (0, 4, 7, 10 semitones)
95+
let ensemble = Ensemble(input,
96+
shifts: [0, 4, 7, 10],
97+
pans: [-0.5, -0.25, 0.25, 0.5],
98+
dryWetMix: 1.0)
99+
engine.output = ensemble
100+
let audio = engine.startTest(totalDuration: 5.0)
101+
input.play()
102+
audio.append(engine.render(duration: 5.0))
103+
testMD5(audio)
104+
}
105+
106+
func testMicrotones() {
107+
let engine = AudioEngine()
108+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
109+
let input = AudioPlayer(url: url)!
110+
// Test with microtonal intervals (quarter tones)
111+
let ensemble = Ensemble(input,
112+
shifts: [0, 0.5, 1.0, 1.5, 2.0],
113+
pans: [-1, -0.5, 0, 0.5, 1],
114+
dryWetMix: 1.0)
115+
engine.output = ensemble
116+
let audio = engine.startTest(totalDuration: 5.0)
117+
input.play()
118+
audio.append(engine.render(duration: 5.0))
119+
testMD5(audio)
120+
}
121+
122+
123+
func testDrySignalOnly() {
124+
let engine = AudioEngine()
125+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
126+
let input = AudioPlayer(url: url)!
127+
// Test with completely dry signal
128+
let ensemble = Ensemble(input,
129+
shifts: [0, 12, 24],
130+
pans: [-1, 0, 1],
131+
dryWetMix: 0.0)
132+
engine.output = ensemble
133+
let audio = engine.startTest(totalDuration: 5.0)
134+
input.play()
135+
audio.append(engine.render(duration: 5.0))
136+
testMD5(audio)
137+
}
138+
139+
func testParameterAutomation() {
140+
let engine = AudioEngine()
141+
let url = Bundle.module.url(forResource: "12345", withExtension: "wav", subdirectory: "TestResources")!
142+
let input = AudioPlayer(url: url)!
143+
let ensemble = Ensemble(input,
144+
shifts: [0, 4, 7],
145+
pans: [-1, 0, 1],
146+
dryWetMix: 0.5)
147+
148+
// Test parameter automation
149+
ensemble.$shift2.ramp(to: 12, duration: 2.0)
150+
ensemble.$pan2.ramp(to: -1, duration: 2.0)
151+
ensemble.$dryWetMix.ramp(to: 1.0, duration: 2.0)
152+
153+
engine.output = ensemble
154+
let audio = engine.startTest(totalDuration: 5.0)
155+
input.play()
156+
audio.append(engine.render(duration: 5.0))
157+
testMD5(audio)
158+
}
159+
25160
}

Tests/SoundpipeAudioKitTests/ValidatedMD5s.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,14 @@ let validatedMD5s: [String: String] = [
5454
"-[VocoderTests testVocoder]": "3836def448fed8ac901b179e943e6922",
5555
"-[VibratoTests testVibrato]": "4bad4a6d951683cf6745a79b96b6aae2",
5656
"-[VibratoTests testParameterSweep]": "cc3613847ed31d6566bbd4f6907e26e5",
57-
"-[PitchCorrectTests testPitchCorrect]": "9128a5a1eb68d491af693028fcbc9668"
57+
"-[PitchCorrectTests testPitchCorrect]": "9128a5a1eb68d491af693028fcbc9668",
58+
"-[EnsembleTests testAllVoicesActive]": "524b59ceb689d76e0ec5af4d8c2cddeb",
59+
"-[EnsembleTests testArrayInitializer]": "7ea6bf4e50e6463b468df5984fff4042",
60+
"-[EnsembleTests testDominantSeventhChord]": "254dede98cc20371240a0e0a74741db5",
61+
"-[EnsembleTests testDrySignalOnly]": "f0096d990a5621665c5378ce39c104b5",
62+
"-[EnsembleTests testEmptyArrays]": "68938c8097d4347c6acbe7b7f18fd6b6",
63+
"-[EnsembleTests testMajorChord]": "f8bb616ea1b9e7caffd3e7ff3d3da163",
64+
"-[EnsembleTests testMicrotones]": "e1b58fcb2e37b5108f1a53a07a0d122c",
65+
"-[EnsembleTests testParameterAutomation]": "9071f70f9536ecf746e810aa676d8544",
66+
"-[EnsembleTests testSingleVoice]": "8d3e03cd3ff04f5d299f0399e1bdd4e7"
5867
]

0 commit comments

Comments
 (0)