如何更改输入总线上的抽头频率?
How do I change the tap frequency on the input bus?
我有这段代码,我想从 iPhone 的麦克风输入。给定 44100 Hz 的采样率,我希望每秒输入十次。点击必须发生 "every 4410 samples"。但无论我怎么做,敲击每 ~400 毫秒发生一次,每次给我 16384 个样本。
攻丝频率的正确控制方法是什么?
self.audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setPreferredSampleRate(44100.0)
try audioSession.setPreferredIOBufferDuration(4410.0 / 44100.0)
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
audioSession.requestRecordPermission() {
[unowned self] (allowed: Bool) -> Void in
if allowed {
self.audioEngine = AVAudioEngine()
self.audioInputNode = self.audioEngine.inputNode!
let format: AVAudioFormat = self.audioInputNode.outputFormatForBus(0)
self.audioInputNode.installTapOnBus(0, bufferSize: UInt32(4410), format: format, block: {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in
// buffer length is 16384
})
do {
try self.audioEngine.start()
} catch {}
} else {...}
}
} catch {...}
我从这个问题中解脱出来,今天又回到了 XCode 8.1
上面的代码现在可以正常工作,我不知道为什么。早期版本的 AVAudioSession 有错误吗?
我有这段代码,我想从 iPhone 的麦克风输入。给定 44100 Hz 的采样率,我希望每秒输入十次。点击必须发生 "every 4410 samples"。但无论我怎么做,敲击每 ~400 毫秒发生一次,每次给我 16384 个样本。
攻丝频率的正确控制方法是什么?
self.audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setPreferredSampleRate(44100.0)
try audioSession.setPreferredIOBufferDuration(4410.0 / 44100.0)
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setActive(true)
audioSession.requestRecordPermission() {
[unowned self] (allowed: Bool) -> Void in
if allowed {
self.audioEngine = AVAudioEngine()
self.audioInputNode = self.audioEngine.inputNode!
let format: AVAudioFormat = self.audioInputNode.outputFormatForBus(0)
self.audioInputNode.installTapOnBus(0, bufferSize: UInt32(4410), format: format, block: {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in
// buffer length is 16384
})
do {
try self.audioEngine.start()
} catch {}
} else {...}
}
} catch {...}
我从这个问题中解脱出来,今天又回到了 XCode 8.1 上面的代码现在可以正常工作,我不知道为什么。早期版本的 AVAudioSession 有错误吗?