swift - AVFoundation - 播放 wav 文件(应用程序包外部)Swift 2.1

标签 swift macos swift2 command-line-interface avaudioplayer

我只是尝试一下 Swift(这是第一次)。除了错误检查和正确的应用程序结构之外,我认为这应该播放音频:

import Foundation
import AVFoundation

var audioPlayer: AVAudioPlayer!
let file = "/Users/mtwomey/Desktop/test1/test1/a2002011001-e02.wav"

let url = NSURL(fileURLWithPath: file)
print(url)
audioPlayer = try! AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: file), fileTypeHint: "wav")
audioPlayer.play()
print("Done.")

然而事实并非如此。当我运行这个应用程序时,它只是继续打印“完成”。并退出。如果文件名/文件路径不正确,我会收到异常(因此它似乎实际上正在访问该文件)。

我正在尝试证明控制台应用程序的概念,该应用程序需要访问应用程序包之外的波形文件。关于我所缺少的内容有什么提示吗?

最佳答案

我发现执行 swift 文件时无法播放音频的主要问题是:命令行工具在 AVAudioPlayer 准备好播放之前退出(在异步操作完成之前)。

这是我的解决方案(使用DispatchGroup),它可以通过从命令执行我的Swift文件(用Swift 5.x编写)来播放我的mp3文件线条工具(无 Playground )。

import Foundation
import AVFoundation

var testAudio = AVAudioPlayer()

let path = FileManager.default.currentDirectoryPath + "/example.mp3"

let url = URL(fileURLWithPath: path)

let group = DispatchGroup()
group.enter()


DispatchQueue.main.async {
    do {
        testAudio = try AVAudioPlayer(contentsOf: url)
    } catch let err {
        print("Failed play audio: \(err)")
    }
    
    group.leave()
}

group.notify(queue: .main) {
    print("play audio")
    testAudio.play()
}

dispatchMain()

关于swift - AVFoundation - 播放 wav 文件(应用程序包外部)Swift 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187398/

相关文章:

ios - swift 如何使用 Controller 从本地设备中选取文件

ios - 使用 willDisplay cell 方法向上滚动 tableView 时,如何从 API 获取数据并更新单元格和部分?

java - 我在 ant 中使用应用程序 bundler 时遇到错误

swift - 我在使用 RNCryptor 库解密时遇到问题

c++ - Apple Mach-O Linker(id) 错误

c++ - 如何创建一个程序来列出 Mac 中的所有 USB 设备?

ios - 转换为 swift 2.0 在 ManagedObjectContext 中出现错误

ios - 需要在所有 VC 中添加通用的 UIBarButtonItem

uinavigationcontroller - shouldAutorotate 不适用于导航 Controller swift 2

ios - 如何更改输入总线上的抽头频率?