#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.