Files
HaishinKit.swift/HaishinKit/Tests/Mixer/AudioMixerBySingleTrackTests.swift
2025-07-06 23:01:37 +09:00

113 lines
4.6 KiB
Swift

import AVFoundation
import Foundation
import Testing
@testable import HaishinKit
@Suite struct AudioMixerBySingleTrackTests {
final class Result: AudioMixerDelegate {
var outputs: [AVAudioPCMBuffer] = []
func audioMixer(_ audioMixer: some AudioMixer, track: UInt8, didInput buffer: AVAudioPCMBuffer, when: AVAudioTime) {
}
func audioMixer(_ audioMixer: some AudioMixer, didOutput audioFormat: AVAudioFormat) {
}
func audioMixer(_ audioMixer: some AudioMixer, didOutput audioBuffer: AVAudioPCMBuffer, when: AVAudioTime) {
outputs.append(audioBuffer)
}
func audioMixer(_ audioMixer: some AudioMixer, errorOccurred error: AudioMixerError) {
}
}
@Test func keep44100_1ch() {
let mixer = AudioMixerBySingleTrack()
mixer.settings = .init(
sampleRate: 44100, channels: 1
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(48000, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 44100)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 44100)
}
@Test func test44100to48000_1ch() {
let mixer = AudioMixerBySingleTrack()
mixer.settings = .init(
sampleRate: 44100, channels: 1
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(48000, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 44100)
mixer.settings = .init(
sampleRate: 48000, channels: 1
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 48000)
}
@Test func test44100to48000_4ch_2ch() {
let result = Result()
let mixer = AudioMixerBySingleTrack()
mixer.delegate = result
mixer.settings = .init(
sampleRate: 44100, channels: 0
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(48000, numSamples: 1024, channels: 4)!)
#expect(mixer.outputFormat?.channelCount == 2)
#expect(mixer.outputFormat?.sampleRate == 44100)
mixer.settings = .init(
sampleRate: 48000, channels: 0
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 4)!)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 4)!)
#expect(mixer.outputFormat?.channelCount == 2)
#expect(mixer.outputFormat?.sampleRate == 48000)
#expect(result.outputs.count == 2)
}
@Test func test44100to48000_4ch() {
let result = Result()
let mixer = AudioMixerBySingleTrack()
mixer.delegate = result
mixer.settings = .init(
sampleRate: 44100, channels: 0
)
mixer.settings.maximumNumberOfChannels = 4
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(48000, numSamples: 1024, channels: 4)!)
#expect(mixer.outputFormat?.channelCount == 4)
#expect(mixer.outputFormat?.sampleRate == 44100)
mixer.settings = .init(
sampleRate: 48000, channels: 0
)
mixer.settings.maximumNumberOfChannels = 4
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 4)!)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 4)!)
#expect(mixer.outputFormat?.channelCount == 4)
#expect(mixer.outputFormat?.sampleRate == 48000)
#expect(result.outputs.count == 2)
}
@Test func passthrough16000_48000() {
let mixer = AudioMixerBySingleTrack()
mixer.settings = .init(
sampleRate: 0, channels: 1
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(16000, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 16000)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(44100, numSamples: 1024, channels: 1)!)
#expect(mixer.outputFormat?.sampleRate == 44100)
}
@Test func inputFormats() {
let mixer = AudioMixerBySingleTrack()
mixer.settings = .init(
sampleRate: 44100, channels: 1
)
mixer.append(0, buffer: CMAudioSampleBufferFactory.makeSinWave(48000, numSamples: 1024, channels: 1)!)
let inputFormats = mixer.inputFormats
#expect(inputFormats[0]?.sampleRate == 48000)
}
}