gpt4 book ai didi

swift - Mac 上的 AVAudioPlayer 无法播放/崩溃

转载 作者:行者123 更新时间:2023-11-30 11:23:16 24 4
gpt4 key购买 nike

我正在尝试从我的 Mac Cocoa 应用程序播放 mp3。使用 AVAudioPlayer 看起来非常简单。但它不起作用。我在网上查看过,我看到的大多数问题都与释放玩家对象有关,但我不认为这是我的问题。玩家对象是持久的并响应成员函数调用。

我从这样的 URL 创建 AVAudioPlayer:

class Soundtrack:Bobject, AVAudioPlayerDelegate {

var player:AVAudioPlayer!
var volume:Float = 1.0
var pan:Float = 0.0
var rate:Float = 1.0
var numberOfLoops:Int = -1
var url:URL?
var reference = false

...

func setFile(_ url:URL) throws {
self.url = url
player = try AVAudioPlayer(contentsOf: url)
player.prepareToPlay()
print("player duration: \(player.duration)")
print("player settings: \(player.settings)")
player.play() // this is commented / uncommented out for testing
}

Soundtrack 对象是我在调用 setFile 函数之前创建并添加到对象的持久层次结构中的对象。该 URL 指向我在创建原声带之前在桌面上浏览到的文件 - 例如“file:///Users/bob/Desktop/2_02_Cycle.mp3”。

如果我立即调用player.play(),如上所示,那么它就可以工作。这首歌一直播放到我暂停为止。但是,如果我注释掉 play() 并稍后调用它(例如按一个键),那么它就不会播放。表示成功:

player.prepareToPlay()
let ok = player!.play(atTime:atTime)
print("play \(ok)")

这里“ok”返回 true。另外,如果我随着时间的推移检查player.isPlaying的值,大约一秒左右(80-90帧)它也会返回TRUE,然后停止。但我从来没有听到任何声音。检查播放器设置报告持续时间正确,为 175 秒,并且所有速率/音量/声相信息也正确。我可以重复调用 play() 和pause(),每次播放时,它都会认为播放了大约一秒钟。

但是,我提到如果我在创建 AVAudioPlayer 后立即启动歌曲,歌曲就会播放。在这种情况下,我可以通过调用pause()来暂停歌曲,但是如果我随后尝试使用play()或play(atTime:)再次播放它,那么它就会崩溃,并显示:“com.apple.audio.IOThread .client(36):EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)”。我附上了堆栈跟踪的图片。

编辑:昨天出现问题后,今天早上,它不再崩溃了。除非我在创建后立即播放它,否则它不会播放。尽管它说正在播放,但持续了大约一秒钟。另外,我打印了第二个它确实“播放”的player.currentTime变量,默默地,它说时间是一个巨大的数字,比如297130或594407。尽管我请求开始播放时间为0事实上,经过进一步测试,这个数字似乎是随机的——有时它很低,比如 10 或 35。当它是一个合理的数字时,玩家确实会报告它继续播放——一秒钟后它不会停止。但我从来没有听到任何声音。

我不认为这可能是播放器被释放的问题,因为我能够在整个过程中继续引用它并调用它的函数。有人知道还有什么问题吗?

enter image description here

最佳答案

好的 - 我解决了这个问题。我没有意识到 play(atTime:) 使用音频设备的当前时间。一旦我使用了 deviceCurrentTime,它就播放了。我的错误相当愚蠢。我不知道为什么昨天崩溃了。这种情况没有再次发生。

关于swift - Mac 上的 AVAudioPlayer 无法播放/崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com