2017-01-27 2 views
0

У меня пока мало опыта с кодированием, я все еще очень новичок, но я делаю что-то, где я уверен, что должен быть более эффективный способ.SWIFT 3 - AVAudioPlayer - Возможно ли записать функцию для передачи звуков в аудиоплеер?

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

Приложение структурировано следующим образом:

Homescreen 15 иконок, каждая из которых с Segue к новой раскадровке, который имеет контроллер представления, связанный с ним (это подкласс ViewController)

каждого звук объявляется как переменная с игроком в основном viewController. Как так (2 примера) ->

var lionSound:AVAudioPlayer = AVAudioPlayer() 
    var cowSound:AVAudioPlayer = AVAudioPlayer() 

    let lionAudio = Bundle.main.path(forResource: "sndLion", ofType: "wav") 
      try lionSound = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: lionAudio!) as URL) 

     let cowAudio = Bundle.main.path(forResource: "sndCow", ofType: "wav") 
      try cowSound = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: cowAudio!) as URL) 

Я затем создать кнопку IBAction в каждом отдельных животных ViewController, что воспроизводит звук, как:

lionSound.play() 
    cowSound.play() 

Сейчас этот вопрос может показаться невероятно глупо, но есть ли способ написать функцию, в которой я могу передать имя/путь звука и запрос на воспроизведение? Я провел исследование здесь и на других сайтах, но не вижу, что я ищу, что заставляет меня думать, что я ошибаюсь в своей мысли.

Из учебных пособий, которые я прочитал, всегда настаивали на том, чтобы хороший код не повторялся. Ну, я, кажется, много повторяю в этом приложении, так есть лучший способ?

Извините, что набросился ... спасибо за чтение, если вы сделали это до сих пор :) Если вам нужна дополнительная информация, рады предоставить ее.

Благодаря

ответ

0

Положите все ваши аудио файлы в директории папки (например yourAudioFileFolder). , чтобы создать папку в каталоге вашего приложения print (NSHomeDirectory()) и скопировать путь к журналу и перейти к finder -> Go -> Перейти в папку и вставить путь к журналу и нажать go. возвращаемый массив будет списком всех имен файлов вашего аудио.

func audioFileInArray() -> [String] { 
    var audioFiles = [String]() 
    let filemanager:FileManager = FileManager() 
    let files = filemanager.enumerator(atPath: NSHomeDirectory()+"/yourAudioFileFolder") 
    while let file = files?.nextObject() { 
     audioFiles.append(file as! String) 
    } 
    return audioFiles 
} 

let yourAudioFiles = audioFileInArray() 
print(yourAudioFiles) 
+0

Большое спасибо за то, что нашли время, чтобы ответить ребятам. Завтра у меня будет игра, и вы узнаете, как она работает. Цените свое время! –

0

Создать массив звуковых имен файлов (минус расширение). Создание метода playSound(index:Int) Have что метод создания звукового проигрывателя, использовать индекс для извлечения файла, а затем использовать url(forResource:withExtension:) получить URL в файл, а затем создать аудио-плеер с этим URL с помощью init(contentsOf:)

Вы можете даже создать int enum, где каждое значение является индексом в вашем массиве звуковых имен файлов, и заставить вашу функцию playSound перечислить вместо int: playSound(sound: SoundEnum). Это сделает ваш код более самодокументированным.

Смежные вопросы