mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-02 06:30:22 +00:00
68 lines
2.4 KiB
Swift
68 lines
2.4 KiB
Swift
import AVFoundation
|
|
import Testing
|
|
@testable import OpenClaw
|
|
|
|
struct VoicePushToTalkTests {
|
|
@Test func `speech normalizer passes through mono buffers`() throws {
|
|
let format = try #require(AVAudioFormat(
|
|
commonFormat: .pcmFormatFloat32,
|
|
sampleRate: 16_000,
|
|
channels: 1,
|
|
interleaved: false))
|
|
let buffer = try #require(AVAudioPCMBuffer(pcmFormat: format, frameCapacity: 4))
|
|
buffer.frameLength = 4
|
|
|
|
let normalized = SpeechAudioBufferNormalizer.speechCompatibleBuffer(from: buffer)
|
|
|
|
#expect(normalized === buffer)
|
|
}
|
|
|
|
@Test func `speech normalizer downmixes multichannel float buffers to mono`() throws {
|
|
var layout = AudioChannelLayout()
|
|
layout.mChannelLayoutTag = kAudioChannelLayoutTag_Quadraphonic
|
|
let channelLayout = AVAudioChannelLayout(layout: &layout)
|
|
let format = AVAudioFormat(
|
|
commonFormat: .pcmFormatFloat32,
|
|
sampleRate: 16_000,
|
|
interleaved: false,
|
|
channelLayout: channelLayout)
|
|
let buffer = try #require(AVAudioPCMBuffer(pcmFormat: format, frameCapacity: 2))
|
|
buffer.frameLength = 2
|
|
let channels = try #require(buffer.floatChannelData)
|
|
for frame in 0..<2 {
|
|
channels[0][frame] = 1
|
|
channels[1][frame] = 3
|
|
channels[2][frame] = 5
|
|
channels[3][frame] = 7
|
|
}
|
|
|
|
let normalized = SpeechAudioBufferNormalizer.speechCompatibleBuffer(from: buffer)
|
|
|
|
#expect(normalized.format.channelCount == 1)
|
|
#expect(normalized.frameLength == 2)
|
|
let output = try #require(normalized.floatChannelData?[0])
|
|
#expect(output[0] == 4)
|
|
#expect(output[1] == 4)
|
|
}
|
|
|
|
@Test func `delta trims committed prefix`() {
|
|
let delta = VoicePushToTalk._testDelta(committed: "hello ", current: "hello world again")
|
|
#expect(delta == "world again")
|
|
}
|
|
|
|
@Test func `delta falls back when prefix differs`() {
|
|
let delta = VoicePushToTalk._testDelta(committed: "goodbye", current: "hello world")
|
|
#expect(delta == "hello world")
|
|
}
|
|
|
|
@Test func `attributed colors differ when not final`() {
|
|
let colors = VoicePushToTalk._testAttributedColors(isFinal: false)
|
|
#expect(colors.0 != colors.1)
|
|
}
|
|
|
|
@Test func `attributed colors match when final`() {
|
|
let colors = VoicePushToTalk._testAttributedColors(isFinal: true)
|
|
#expect(colors.0 == colors.1)
|
|
}
|
|
}
|