Звук iOS не воспроизводится в Swift

#ios #iphone #xcode #swift #avaudioplayer

#iOS #iPhone #xcode #swift #avaudioplayer

Вопрос:

Я создаю tableview, в котором каждая ячейка представляет звук, который воспроизводится, когда пользователь нажимает на эту конкретную ячейку.

В 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 неправильный?

Любая помощь будет высоко оценена!

Комментарии:

1. Единственное, что я вижу между вашим кодом и другим примером, — это другие примеры вызовов audioPlayer.prepareToPlay() . Можете ли вы попробовать это?

2. Извините, но это не решает проблему. Хотя спасибо за ответ. В настоящее время мои аудио-файлы (.mp3) находятся в Xcode в папке /Art/Sounds и в папке проекта SoundList/Soundlist (так как название моего проекта, угадайте, что, Soundlist.). Я уже пытался переместить файлы в другие папки, но это не решало проблему. может быть, мне нужно отредактировать путь к файлу? Если да, то как мне это сделать?

3. Способ получения пути к mp3 таков, что если бы mp3 не существовал, путь был бы nil . Поскольку вы получаете действительный путь от этой функции, файл находится там. Это не ваша проблема. Возможно, по какой-то причине ваш URL-адрес неверен. Убедитесь, что он исправен и действителен.

Ответ №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: amp;error)

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

Надеюсь, это поможет.

Комментарии:

1. Привет, спасибо за вашу реакцию! Если я реализую этот код, я получаю 2 ошибки в строке NSError: Excluded module member name after module name и NSError is not a subtype of 'module<error>' . Как бы мне решить эту проблему?

2. @Imaginedigital Хорошо, я пропустил, что вы проходите nil error . Пожалуйста, ознакомьтесь с обновлением через секунду.

3. Спасибо, теперь звук воспроизводится безупречно!

4. Привет. Я искал простой способ поместить звук в мою программу Swift, и вы, ребята, кажется, знаете, о чем говорите. Я попробовал приведенный выше код в своей программе, и он не распознает AVAudioPlayer. Кто-нибудь поможет мне здесь? @Unheilig

5. @Unheilig Вам придется добавить AVFoundation. создайте для своего приложения свои связанные фреймворки и библиотеки и импортируйте AVFramework в начало любого файла с помощью AVAudioPlayer.