【问题标题】:how to add background music如何添加背景音乐
【发布时间】:2017-12-29 21:09:52
【问题描述】:

重复的答案根本没有工作

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!)
    }

【问题讨论】:

  • Cocoa 框架在您开发 macOS 应用程序时使用,并且在 iOS 平台上不存在,这就是您看到该错误的原因 :) 要修复它,请尝试将 import Cocoa 替换为import UIKit 例如。也看到这个答案:stackoverflow.com/a/24099668/4063602希望有帮助
  • @pbodsk 即使在将 import Cocoa 替换为 import UIKit 之后,它也无法工作
  • 好的。第一个很容易。而不是println(),您只需写print(),例如print("Hello, Audio!")。至于AVMIDIPlayer 错误。你还在导入AVFoundation吗?您需要导入both UIKit AVFoundation
  • @pbodsk 是的,我正在导入 UIKit 和 AVFoundation
  • 我现在在猜测,但是当您作为 iOS 操场运行时,您可能无法直接在操场上引用计算机上的文件 URL。试试看这个答案是否对你有帮助:stackoverflow.com/a/31500936/4063602

标签: ios iphone swift xcode


【解决方案1】:

我已经对您的代码进行了一些更改,但这似乎“有效”(我们会解决的)

首先,按照in this answer 的描述将 MP3 文件导入您的 Playground

然后你可以像这样使用你的文件:

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
  • 在 Swift 3 中,很多东西都被重命名了,一些采用 &error 参数的“旧”方法改为使用 do try catch。因此,error 已从您的通话中消失,并已替换为 try
  • 以上操作将失败!您将看到错误代码 -10870,可在 AUComponent.h 头文件中找到,其转换为:

kAudioUnitErr_UnknownFileType

如果音频单元使用外部文件作为数据源,则返回此错误

如果文件无效(Apple 的 DLS 合成器返回此错误)

所以...这让我认为您需要做以下两件事之一:

  1. 找到一个.midi 文件并将其与AVMidiPlayer 一起使用
  2. 找别的东西来播放你的文件,例如AVFilePlayerAVAudioEngine

(你可以阅读更多关于 Swift 中的错误处理here)。

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    mp3 文件必须在 Resources 文件夹中。

    您使用这样的代码播放 mp3(不是 MIDI 播放器):

    if let url = Bundle.main.url(forResource: "drum01", withExtension: "mp3") {
      let player = try? AVAudioPlayer(contentsOf: url)
      player?.prepareToPlay()
      player?.play()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2015-12-25
      相关资源
      最近更新 更多