macOS 上的 swift: AVAudioPlayer 立即停止
Posted
技术标签:
【中文标题】macOS 上的 swift: AVAudioPlayer 立即停止【英文标题】:swift on macOS: AVAudioPlayer stops immediately 【发布时间】:2017-11-22 04:49:38 【问题描述】:我在 Swift 中有一个 macOS(不是 ios)项目。
在我的主 AppDelegate.swift 中,我实例化了一个名为 PlaySound 的类,然后调用 startSound()
名为 PlaySound.swift 的类播放 mp3。但是,除非我在任一类文件中调用 play 后不久放置 sleep() ,否则我听不到任何声音。我以为我失去了对类实例化的引用,但我可以调用一个测试打印函数,如您所见,并且有效。
有人知道为什么音频停止了吗?
感谢您的帮助 -比尔
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate
func applicationDidFinishLaunching(_ aNotification: Notification)
// Insert code here to initialize your application
let myCheck = PlaySound()
myCheck.startSound()
sleep(7)
myCheck.testPrint()
func applicationWillTerminate(_ aNotification: Notification)
// Insert code here to tear down your application
下面的 PlaySound 类...
import Foundation
import AVKit
class PlaySound
var soundFile = "crickets"
var myPlayer = AVAudioPlayer()
func startSound()
do
self.myPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: soundFile, ofType: "mp3")!))
//set the number of loops to "infinite"
self.myPlayer.numberOfLoops = -1
self.myPlayer.prepareToPlay()
//set the volume to muted
self.myPlayer.volume = 0
//play the sound
self.myPlayer.play()
//fade in the sound
self.myPlayer.setVolume(1, fadeDuration: 2)
catch
print(error)
// end of startSound
func fadeOutSound()
myPlayer.setVolume(0, fadeDuration: 10)
myPlayer.stop()
func testPrint()
print("yes this works")
// end of aclass
【问题讨论】:
在使用 sleep() 之前,了解它的作用。 @ElTomato 感谢您的回信。你的意思是我应该研究一下 sleep() 的作用吗?或者,我应该在调用 sleep() 之前立即找出代码在做什么? 你解决了吗?我有这个问题。 【参考方案1】:一旦 applicationDidFinishLaunching
完成,myCheck
就会超出范围并被取消初始化,因此没有任何东西可以播放声音。您可以像这样将其保存在内存中:
class AppDelegate: NSObject, NSApplicationDelegate
let myCheck = PlaySound()
func applicationDidFinishLaunching(_ aNotification: Notification)
myCheck.startSound()
【讨论】:
以上是关于macOS 上的 swift: AVAudioPlayer 立即停止的主要内容,如果未能解决你的问题,请参考以下文章
iPad 上的 Swift Playgrounds,NSLog 在 macOS 上的“Console.app”上不显示任何消息
有没有办法在 MacOS 上的 Swift 桌面应用程序中构建一个简单的 HTTP/JSON 服务器 API? [关闭]
使用 Swift 在 macOS 上显示 Unobtrusive 消息