2016-11-28 2 views
0

Я развиваю аудиоплеер в режиме быстрого и мне нужно 2 кнопки (Play and Stop), чтобы управлять им. Я использовал следующий код:Как играть и останавливать AVAudioPlayer в swift3?

override func viewDidLoad() { 
    super.viewDidLoad() 

let urlstring = "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3" 
    let url = NSURL(string: urlstring) 
    print("the url = \(url!)") 
    downloadFileFromURL(url: url!) 

          } 

    func downloadFileFromURL(url:NSURL) { 
    var downloadTask:URLSessionDownloadTask 
    downloadTask = URLSession.shared.downloadTask(with: url as URL, completionHandler: { (URL, response, error) -> Void in 

     self.play(url: URL! as NSURL) 

    }) 

    downloadTask.resume() 

             } 

func play(url:NSURL) { 
    print("playing \(url)") 

    do { 
     self.SoundPlayer = try AVAudioPlayer(contentsOf: url as URL) 
     SoundPlayer.prepareToPlay() 
     SoundPlayer.volume = 1.0 
     SoundPlayer.play() 
    } catch let error as NSError { 
     //self.player = nil 
     print(error.localizedDescription) 
    } catch { 
     print("AVAudioPlayer init failed") 
    } 

         } 

@IBAction func Play(_ sender: Any) { 

    SoundPlayer.play() 

} 


@IBAction func Stop(_ sender: Any) { 

    SoundPlayer.stop() 

} 

В принципе, когда пользователь открывает приложение, музыкальный файл автоматически запускается. Поэтому я создал две дополнительные кнопки: «Пуск» и «Стоп», и я хочу управлять этим проигрывателем аудио с ними. Не могли бы вы посоветовать мне, как это сделать, потому что теперь они не связаны с Audio Player и никаких действий не происходит, когда я нажимаю на них.

+0

Вы проверили, что SoundPlayer не ноль в Play/Stop funcs? –

+0

Они ноль, я думаю, но я не знаю, как их исправить – Dakata

+0

Если они ноль, то я бы предположил, что вы теряете ссылку на них где-то. Как вы определяете var SoundPlayer? –

ответ

0

Если ваша цель - просто воспроизвести файл во время его потоковой передачи, получите данные от URL, а затем передайте их на AVAudioPlayer.

if let theURL = URL(string: "http://radio.spainmedia.es/wp-content/uploads/2015/12/tailtoddle_lo4.mp3") { 
    if let data = try? Data(contentsOf: theURL){ 
     if let audioPlayer = try? AVAudioPlayer(data: data) { 
     print("Done") 
     audioPlayer.play() 
     } else { 
     print("Noo") 
     } 

    } 
} 

AVAudioPlayer(contentsOf: url as URL) часто не может извлекать данные из удаленного места.

Вы также можете проверить другие варианты, такие как AVPlayer играть файл

how can i play remote .mp3 file in my ios application?