From df8f3a145311cf3884ae3e8f690d9dce2530823b Mon Sep 17 00:00:00 2001 From: hiroshihorie <548776+hiroshihorie@users.noreply.github.com> Date: Fri, 4 Oct 2024 00:27:04 +0900 Subject: [PATCH] Generic ring buffer --- Sources/LiveKit/Convenience/AudioProcessing.swift | 2 +- .../{FloatRingBuffer.swift => RingBuffer.swift} | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) rename Sources/LiveKit/Support/{FloatRingBuffer.swift => RingBuffer.swift} (86%) diff --git a/Sources/LiveKit/Convenience/AudioProcessing.swift b/Sources/LiveKit/Convenience/AudioProcessing.swift index fce0919ff..5f7dba34a 100644 --- a/Sources/LiveKit/Convenience/AudioProcessing.swift +++ b/Sources/LiveKit/Convenience/AudioProcessing.swift @@ -117,7 +117,7 @@ public class AudioVisualizeProcessor { // MARK: - Private - private let ringBuffer = FloatRingBuffer(size: AudioVisualizeProcessor.bufferSize) + private let ringBuffer = RingBuffer(size: AudioVisualizeProcessor.bufferSize) private let processor: FFTProcessor public init(minFrequency: Float = 10, diff --git a/Sources/LiveKit/Support/FloatRingBuffer.swift b/Sources/LiveKit/Support/RingBuffer.swift similarity index 86% rename from Sources/LiveKit/Support/FloatRingBuffer.swift rename to Sources/LiveKit/Support/RingBuffer.swift index 524396626..ddbc1e682 100644 --- a/Sources/LiveKit/Support/FloatRingBuffer.swift +++ b/Sources/LiveKit/Support/RingBuffer.swift @@ -17,28 +17,28 @@ import Foundation // Simple ring-buffer used for internal audio processing. Not thread-safe. -class FloatRingBuffer { +class RingBuffer { private var _isFull = false - private var _buffer: [Float] + private var _buffer: [T] private var _head: Int = 0 init(size: Int) { - _buffer = Array(repeating: 0, count: size) + _buffer = [T](repeating: 0, count: size) } - func write(_ value: Float) { + func write(_ value: T) { _buffer[_head] = value _head = (_head + 1) % _buffer.count if _head == 0 { _isFull = true } } - func write(_ sequence: [Float]) { + func write(_ sequence: [T]) { for value in sequence { write(value) } } - func read() -> [Float]? { + func read() -> [T]? { guard _isFull else { return nil } if _head == 0 {