feat: AudioLevel helper and AudioRecorder.onLevel

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 15:00:40 +02:00
co-authored by Claude Sonnet 5.5
parent 2c4b096850
commit c8e16145e1
4 changed files with 78 additions and 3 deletions
+31
View File
@@ -0,0 +1,31 @@
import Testing
@testable import SstCore
struct AudioLevelTests {
@Test func constantTenthIsMinusTwentyDbfs() {
let level = AudioLevel.rmsDbfs([Float](repeating: 0.1, count: 1_000))
#expect(abs(level - (-20)) < 0.01)
}
@Test func fullScaleIsZeroDbfs() {
let level = AudioLevel.rmsDbfs([Float](repeating: 1.0, count: 100))
#expect(abs(level) < 0.01)
}
@Test func negativeSamplesCountLikePositiveOnes() {
let level = AudioLevel.rmsDbfs([Float](repeating: -0.1, count: 1_000))
#expect(abs(level - (-20)) < 0.01)
}
@Test func emptyAndSilentBuffersHitTheFloor() {
#expect(AudioLevel.rmsDbfs([]) == AudioLevel.silenceFloorDbfs)
#expect(AudioLevel.rmsDbfs([Float](repeating: 0, count: 64)) == AudioLevel.silenceFloorDbfs)
}
@Test func vuIsRelativeToTheReference() {
#expect(AudioLevel.vu(fromDbfs: -20) == 0)
#expect(AudioLevel.vu(fromDbfs: -40) == -20)
#expect(AudioLevel.vu(fromDbfs: -17) == 3)
#expect(AudioLevel.vu(fromDbfs: -30, referenceDbfs: -18) == -12)
}
}