如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?
Posted
技术标签:
【中文标题】如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?【英文标题】:how can a 1 second audio effect be played for 0.5 seconds in AVAudioPlayer? 【发布时间】:2015-12-18 13:18:02 【问题描述】:我正在使用以下代码在我的 Swift SpriteKit 游戏中播放音效。
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer
let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
let url = NSURL.fileURLWithPath(path!)
var audioPlayer:AVAudioPlayer?
do
try audioPlayer = AVAudioPlayer(contentsOfURL: url)
catch
print("NO AUDIO PLAYER")
return audioPlayer!
音效的持续时间是一秒,我每次以 0.5 秒的间隔创建一个精灵时调用它。由于音效比创建间隔长,所以音效只播放一次。我相信减少效果持续时间可以解决这个问题,尽管我对解决我的问题的其他方法持开放态度。
【问题讨论】:
如果你需要这首歌在其他地方有秒,那么我的问题是你想如何播放声音,超快或只有一半的声音。如果声音只有 0.5 秒的剪辑,那么我会进入 iTunes 并创建一个 0.5 秒的剪辑 我希望播放速度更快,半秒内 那么我建议切换到使用带有 SKAction 的 SKNode 子节点,并使用 SKAction.playSoundWithFileNamed 播放声音,然后以 2 倍的速度运行(当然,除非这个声音总是以 2 倍的速度播放,那么我会预先生成 2x 版本并将节点保持在 1x)如果这是您想要采取的路线,我会做出解释说明这一点的答案 尝试使用SKAction.playSoundWithFileNamed每间隔int需要播放,并在update()函数中控制时间间隔。 【参考方案1】:你也可以使用AVAudioEngine()
只需将您的音频文件放入AVAudioEngine()
并使用以下参数更改速度:
// The default value is 1.0. The range of supported values is 1/32 to 32.0.
changeAudioUnitTime.rate = 1.0
示例代码如下:
var audioPlayer: AVAudioPlayer!
var audioEngine = AVAudioEngine()
var audioFile: AVAudioFile!
var audioPlayerNode: AVAudioPlayerNode?
audioPlayer = try AVAudioPlayer(contentsOfURL: currentAudio!)
audioFile = try! AVAudioFile(forReading: audioPlayer!.url!)
audioEngine.attachNode(audioPlayerNode!)
let changeAudioUnitTime = AVAudioUnitTimePitch()
// The default value is 1.0. The range of supported values is 1/32 to 32.0.
changeAudioUnitTime.rate = 1.0
audioEngine.attachNode(changeAudioUnitTime)
audioEngine.connect(audioPlayerNode!, to: changeAudioUnitTime, format: nil)
audioEngine.connect(changeAudioUnitTime, to: audioEngine.outputNode, format: nil)
audioPlayerNode!.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
do
try audioEngine.start()
catch
print("audio Engine could not be started: \(error)")
// play the costumized sound
audioPlayerNode!.play()
希望这个例子对你有所帮助....如果我理解错了,请随时纠正我。问候,亚历克斯
【讨论】:
以上是关于如何在 AVAudioPlayer 中播放 0.5 秒的 1 秒音效?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AVAudioPlayer 中循环播放多个音频文件?
如何在 Swift 3 中使用 AVAudioPlayer 播放 .ogg 音频文件?
如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?
如何在 ios5 中播放本地方法的 AVAudioPlayer?