我正在尝试构建一个可靠的固体系统,使用SWIFT在我的应用程序中构建一个节拍器.
到目前为止,我已经构建了使用NSTimer的可靠系统.我现在唯一的问题是当计时器启动时,前两次点击是关闭时间,但随后它会进入一个稳定的时间范围.
现在经过我所有的研究后,我看到人们提到你应该使用其他不依赖于NSTimer的音频工具..或者如果你选择使用NSTimer那么它应该在它自己的线程上.现在我看到很多人对此感到困惑,包括我自己,我希望能够深入到这个节拍器业务的底层并解决这个问题并与所有挣扎的人分享.
UPDATE
因此,在我上次收到反馈后,我已经实施并清理了.在这一点上,这是我的代码的结构.它的回放.但是我在开始时仍然获得2次快速点击,然后它就会安顿下来.
我为这个无知而道歉.我希望我走在正确的道路上.
我目前正在为另一种方法进行原型设计.我有一个非常小的音频文件,只需一次点击,并在其末尾有一个死区,持续时间正确,直到特定节奏的循环点.我正在循环这个并且工作得非常好.但唯一的问题是我没有检测到视觉更新的循环点,所以我让我的基本NStimer只检测正在处理的音频下面的时间间隔,它似乎在整个过程中非常好地匹配并且没有延迟.但是我仍然宁愿用这个NSTimer来完成它.如果你能够轻松发现我的错误,那将是一个很好的方向,并确保它可以很快工作!非常感谢.
//VARIABLES
//AUDIO
var clickPlayer:AVAudioPlayer = AVAudioPlayer()
let soundFileClick = NSBundle.mainBundle().pathForResource("metronomeClick", ofType: ".mp3")
//TIMERS
var metroTimer = NSTimer()
var nextTimer = NSTimer()
var previousClick = CFAbsoluteTimeGetCurrent() //When Metro Starts Last Click
//Metro Features
var isOn = false
var bpm = 60.0 //Tempo Used for beeps, calculated into time value
var barNoteValue = 4 //How Many Notes Per Bar (Set To Amount Of Hits Per Pattern)
var noteInBar = 0 //What Note You Are On …Run Code Online (Sandbox Code Playgroud)