我正在构建一个voip应用程序,我们需要从麦克风录制音频并以8kHz采样率发送到某处.现在我以默认采样率录制它,在我的情况下总是为44,4k.然后使用此算法将其手动转换为8k .
这种天真的方法产生了"正常"的质量,但我认为使用AudioUnit的原生下采样功能会好得多.
但是当我更改录音AudioUnit上的采样率属性时,它只输出静音帧(~0.0),我不知道为什么.
我已经提取了负责声音的应用程序部分.它应该从麦克风录制 - >写入环形缓冲区 - >播放缓冲区中的数据:
RecordingUnit:
import Foundation
import AudioToolbox
import AVFoundation
class RecordingUnit : NSObject
{
public static let AudioPacketDataSize = 160
public static var instance: RecordingUnit!
public var micBuffers : AudioBufferList?;
public var OutputBuffer = RingBuffer<Float>(count: 1 * 1000 * AudioPacketDataSize);
public var currentAudioUnit: AudioUnit?
override init()
{
super.init()
RecordingUnit.instance = self
micBuffers = AudioBufferList(
mNumberBuffers: 1,
mBuffers: AudioBuffer(
mNumberChannels: UInt32(1),
mDataByteSize: UInt32(1024),
mData: UnsafeMutableRawPointer.allocate(byteCount: 1024, alignment: 1)))
}
public func start() …
Run Code Online (Sandbox Code Playgroud)