【问题标题】:iOS Sound not playing in SwiftiOS 声音不能在 Swift 中播放
【发布时间】:2014-08-14 17:21:54
【问题描述】:

我正在构建一个表格视图,其中每个单元格代表用户点击特定单元格时播放的声音。

在 Objective-C 中它运行良好,但现在 Apple 发布了 Swift,我决定立即移动,但由于某种原因声音没有播放。当用户点击单元格时我的代码:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    var currentItem = self.items[indexPath.row]

    var audioPath = NSString(string: NSBundle.mainBundle().pathForResource(currentItem.soundID, ofType: "mp3"))

    println(audioPath)

    var audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: nil)
    audioPlayer.play()
}

currentItem 是数组中必须调用的对象。我可以播放的每个声音都放在一个自定义对象中,连同一个标题和一个图像。该对象被放入currentItem 的实例中。

这是当我点击其中一个单元格时 printNL 输出的内容:

/private/var/mobile/Containers/Bundle/Application/ADF0CAFC-4C9E-475E-B3F0-CD85A1873CA5/Juichen.app/StupidQuestion.mp3

它不会给出错误。我已经尝试将声音文件移动到其他文件夹,但这也不能解决问题。因此,我假设出现这个问题是因为我调用了audioPlayer 不正确?

任何帮助将不胜感激!

【问题讨论】:

  • 我在您的代码和另一个示例之间唯一能看到的是另一个示例调用audioPlayer.prepareToPlay()。你可以试试吗?
  • 很抱歉,但这并不能解决问题。感谢您的回复。目前,我的音频 (.mp3) 文件位于 Xcode 中的 /Art/Sounds 文件夹和项目文件夹 SoundList/Soundlist 中(我的项目名称是,猜猜看,Soundlist。)。我已经尝试将文件移动到其他文件夹,但这并没有解决问题。也许我必须编辑文件路径?如果是这样,我该怎么做?
  • 获取 mp3 路径的方式是,如果 mp3 不存在,则路径为 nil。由于您从该函数中获得了有效路径,因此该文件就在那里。那不是你的问题。由于某种原因,您的 URL 可能不正确。确保它是好的和有效的。

标签: ios iphone xcode swift avaudioplayer


【解决方案1】:

假设你有一个类 myTable:

class myTable : UITableViewController
{
    var audioPlayer:AVAudioPlayer? = nil

...
}

并初始化audioPlayer

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) 
{
        var currentItem = self.items[indexPath.row]

        var audioPath = NSString(string: NSBundle.mainBundle().pathForResource(currentItem.soundID, ofType: "mp3"))

        println(audioPath)

        var error : NSError? = nil
        self.audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)

        if (self.audioPlayer == nil)
        {
            if let playerError = error as? NSError
            {
                let des : String? = playerError.localizedDescription
                println("Error: \(des)")
            }
        }
        else
        {
            self.audioPlayer.play()
        }
}

希望这会有所帮助。

【讨论】:

  • 您好,感谢您的反应!如果我实现此代码,我会在 NSError 行上得到 2 个错误:Excluded module member name after module nameNSError is not a subtype of 'module<error>'。我将如何解决这个问题?
  • @Imaginedigital 好的,我错过了你在error 中传递nil。请稍后查看更新。
  • 谢谢,现在声音播放完美!
  • 嗨。我一直在寻找一种在我的 Swift 程序中添加声音的简单方法,你们似乎知道自己在说什么。我在我的程序中尝试了上面的代码,但它无法识别 AVAudioPlayer。有人会帮我吗? @Unheilig
  • @Unheilig 您必须将 AVFoundation.framework 添加到您的应用程序您的链接框架和库中,并使用 AVAudioPlayer 将 AVFramework 导入任何文件的顶部。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 2012-05-06
  • 1970-01-01
相关资源
最近更新 更多