mirror of
https://github.com/HaishinKit/HaishinKit.swift.git
synced 2026-05-07 20:12:28 +00:00
113 lines
4.6 KiB
Swift
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)
|
|
}
|
|
}
|