2016-11-28 87 views
0

我正在开发一个音频播放器,我需要2个按钮(播放和停止)来控制它。我已经使用了以下代码:如何在swift3中播放和停止AVAudioPlayer?

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() 

} 

基本上,当用户打开应用程序时,mp3音频文件会自动启动。因此,我创建了2个附加按钮,“开始”和“停止”,并且我想用它们控制此音频播放器。你能否告诉我如何去做,因为现在他们没有连接到音频播放器,当我点击它们时没有任何操作。

+0

你检查声音播放不为零的播放/停止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?

相关问题