重复答案无法正常
import Cocoa
import AVFoundation
var error: NSError?
println("Hello, Audio!")
var url = NSURL(fileURLWithPath: "/Users/somebody/myfile.mid") // Change to a local midi file
var midi = AVMIDIPlayer(contentsOfURL: url, soundBankURL: nil, error: &error)
if midi == nil {
if let e = error {
println("AVMIDIPlayer failed: " + e.localizedDescription)
}
}
midi.play(nil)
while midi.playing {
// Spin (yeah, that's bad!)
}
答案 0 :(得分:1)
我对您的代码进行了一些更改,但这似乎“有效”(我们将会这样做)
首先,按照in this answer
所述,将MP3文件导入您的游乐场然后您可以像这样使用您的文件:
import UIKit
import AVFoundation
print("Hello, Audio!")
if let url = Bundle.main.url(forResource: "drum01", withExtension: "mp3") {
do {
let midi = try AVMIDIPlayer(contentsOf: url, soundBankURL: nil)
midi.play(nil)
while midi.isPlaying {
// Spin (yeah, that's bad!)
}
} catch (let error) {
print("AVMIDIPlayer failed: " + error.localizedDescription)
}
}
注意:
print
代替println
&error
参数的“旧”方法改为使用do try catch
。因此,error
已经离开您的通话,并已被try
替换。AUComponent.h
标题文件中找到,转换为:kAudioUnitErr_UnknownFileType
如果音频设备使用外部文件作为数据源,则会返回此错误
如果文件无效(Apple的DLS合成器返回此错误)
所以......这让我觉得你需要做两件事之一,或者:
AVMidiPlayer
AVFilePlayer
或AVAudioEngine
(您可以在Swift here中阅读有关错误处理的更多信息。)
希望对你有所帮助。
答案 1 :(得分:0)
mp3文件必须位于Resources文件夹中。
你用这样的代码播放mp3(不是MIDI播放器):
if let url = Bundle.main.url(forResource: "drum01", withExtension: "mp3") {
let player = try? AVAudioPlayer(contentsOf: url)
player?.prepareToPlay()
player?.play()
}