You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AudioKit 5.3中AudioPlayer节点致采样率变为44.1kHz如何解决

AudioKit 5.3 全链路锁定48kHz采样率解决方案

你的判断是对的,麦克风链路正常是因为麦克风硬件枚举的原生格式为48kHz,会在引擎启动时自动把整个AudioKit引擎的处理采样率拉到48kHz;而纯文件播放的链路中,AudioPlayer默认会在引擎未锁定采样率时,匹配系统音频会话默认的44.1kHz做内部重采样,最终输出文件就会落到44.1kHz。
AudioKit 5.3的AudioPlayer没有独立的“关闭重采样”开关,它的重采样行为完全由链路各节点的格式配置、AVAudioSession的实际采样率决定,按以下步骤配置即可强制全链路跑在48kHz:

前置配置(必须在创建任何音频节点前完成)

先强制设置系统音频会话的首选采样率,并校验实际生效值,避免系统回落到44.1kHz:

let audioSession = AVAudioSession.sharedInstance()
// 必须用playAndRecord分类,纯play分类在部分设备上会强制锁44.1kHz输出
try audioSession.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker, .mixWithOthers])
try audioSession.setPreferredSampleRate(48000)
try audioSession.setActive(true)
// 校验实际采样率,部分老旧设备/外接不支持48k的音频设备时会设置失败
guard audioSession.sampleRate == 48000 else {
    fatalError("当前环境无法启用48kHz采样率,实际生效值:\(audioSession.sampleRate)")
}

引擎初始化配置

显式指定引擎内部连接格式,禁止引擎自动推导采样率:

let engine = AudioEngine()
let targetFormat = AVAudioFormat(standardFormatWithSampleRate: 48000, channels: 2)!
// 显式指定主混音节点到输出节点的连接格式
engine.connect(engine.mainMixerNode, to: engine.outputNode, format: targetFormat)

AudioPlayer配置

加载音频文件前显式指定AudioPlayer的处理格式,禁用默认的自动格式匹配逻辑:

let player = AudioPlayer()
// 不要留空(默认nil会触发自动采样率匹配)
player.format = targetFormat
// 格式设置完成后再加载48kHz源文件
try player.load(url: your48kAudioFileURL)

NodeRecorder配置

初始化录制器时显式传入48kHz格式,不要依赖节点的自动输出格式:

// 按你的链路顺序连接节点:player -> 自定义处理节点
let customNode = YourCustomProcessNode()
engine.connect(player, to: customNode, format: targetFormat)
engine.connect(customNode, to: engine.mainMixerNode, format: targetFormat)
// 初始化录制器,显式指定录制格式
let recorder = try NodeRecorder(
    node: customNode,
    file: nil,
    fileType: .wav,
    format: targetFormat
)
// 所有节点连接、格式配置完成后再启动引擎
try engine.start()

校验配置生效

链路启动后可打印各节点的采样率确认无隐式重采样:

print("Player输出采样率:\(player.outputFormat(forBus: 0).sampleRate)")
print("自定义节点输出采样率:\(customNode.outputFormat(forBus: 0).sampleRate)")
print("录制器输入采样率:\(recorder.format.sampleRate)")

以上值全部为48000即为配置生效,AudioPlayer不会再触发自动重采样。

注意:所有格式配置、节点连接必须在engine.start()调用前完成,引擎启动后再修改节点连接/格式会触发AudioKit内部的隐式重采样,导致采样率不符合预期。

内容的提问来源于stack exchange,提问作者Jim Gardens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:03:32