optimise hot-path audio pipeline: zero-copy ring buffer, pre-allocated converter buffers
- Replace Swift Array<UInt8> ring buffer with UnsafeMutableRawPointer to eliminate COW ref-count checks on every write/read - Add append(from:count:) to copy directly from Core Audio buffer pointer into the ring buffer, removing the per-callback Data heap allocation - Pre-allocate AVAudioPCMBuffer pair in AudioFormatConverter and reuse across transform() calls (lazy init, capacity-checked) - Fix float-to-int truncation in output frame count calculation (ceil) - Add comprehensive AudioBuffer test suite (12 tests) including proper wrap-around coverage for both append and read paths Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import XCTest
|
||||
|
||||
@testable import AudioTeeCore
|
||||
|
||||
final class AudioPacketTests: XCTestCase {
|
||||
@@ -6,25 +7,25 @@ final class AudioPacketTests: XCTestCase {
|
||||
let timestamp = Date()
|
||||
let duration = 1.0
|
||||
let data = Data([0x01, 0x02, 0x03, 0x04])
|
||||
|
||||
|
||||
let packet = AudioPacket(
|
||||
timestamp: timestamp,
|
||||
duration: duration,
|
||||
data: data
|
||||
)
|
||||
|
||||
|
||||
XCTAssertEqual(packet.timestamp, timestamp)
|
||||
XCTAssertEqual(packet.duration, duration)
|
||||
XCTAssertEqual(packet.data, data)
|
||||
}
|
||||
|
||||
|
||||
func testPacketDataSize() {
|
||||
let packet = AudioPacket(
|
||||
timestamp: Date(),
|
||||
duration: 0.5,
|
||||
data: Data(repeating: 0xFF, count: 1024)
|
||||
)
|
||||
|
||||
|
||||
XCTAssertEqual(packet.data.count, 1024)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user