当 AKMicrophone 存在时,来自 AKMIDISampler 的连续正弦波
Posted
技术标签:
【中文标题】当 AKMicrophone 存在时,来自 AKMIDISampler 的连续正弦波【英文标题】:Continuous Sine Wave From AKMIDISampler when AKMicrophone is Present 【发布时间】:2018-11-30 18:50:37 【问题描述】:当有一个初始化的 AKMicrophone 时,我在我的项目中使用 AKMIDISampler 时遇到问题。除了在采样器上调用“播放”时正确播放木版样本,第一次调用“播放”时,一个恒定的正弦波开始播放 - 它永远不会停止。
我在下面用最少的代码复制了这个问题。初始化类然后调用 playTestSample() 时会发生问题。
请注意,如果 AKMicrophone 相关代码全部静音,则 AKMIDISampler 可以正常播放,并且当前困扰我的正弦波不会发生。
(我尝试切换到使用 AKSampler() 只是为了看看那里是否存在问题,但我无法从中获得任何声音)。
仅供参考:我在 info.plist 的“必需的背景模式”中有“应用程序使用 AirPlay 播放音频或流式传输音频/视频” - 这可以解决另一个正弦波问题。
非常感谢您的帮助。
顺便说一句:AudioKit 非常棒,对这个项目有很大的帮助! :^)
AK 4.5.4 Xcode 10.1
import Foundation
import AudioKit
class AudioKitTESTManager
var mixer = AKMixer()
var sampler = AKMIDISampler()
var mic = AKMicrophone()
var micMixer = AKMixer()
var micBooster = AKBooster()
init()
mixer = AKMixer(sampler, micBooster)
do
let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)
try sampler.loadAudioFiles([woodblock])
catch
print("Error loading audio files into sampler")
micMixer = AKMixer(mic)
micBooster = AKBooster(micMixer)
micBooster.gain = 0.0
AudioKit.output = mixer
AKSettings.playbackWhileMuted = true
AKSettings.defaultToSpeaker = true
AKSettings.sampleRate = 44100
do
print("Attempting to start AudioKit")
try AudioKit.start()
catch
AKLog("AudioKit did not start!")
func playTestSample()
// You hear the sample and a continuous sine wave starts playing through the samplerMixer
try? sampler.play(noteNumber: 60, velocity: 90, channel: 1)
【问题讨论】:
【参考方案1】:哇哦。我相信我已经找到了解决方案。也许它会帮助别人?
似乎在 AudioKit.start() 之后将文件加载到采样器中可以修复 Sine Wave of Terror!
//..
do
print("Attempting to start AudioKit")
try AudioKit.start()
catch
AKLog("AudioKit did not start!")
do
let woodblock = try AKAudioFile(readFileName: RhythmGameConfig.woodblockSoundName)
try sampler.loadAudioFiles([woodblock])
catch
print("Error loading audio files into sampler")
【讨论】:
以上是关于当 AKMicrophone 存在时,来自 AKMIDISampler 的连续正弦波的主要内容,如果未能解决你的问题,请参考以下文章