123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- //
- // AudioPlayerManager.swift
- // O2Platform
- //
- // Created by FancyLou on 2020/6/17.
- // Copyright © 2020 zoneland. All rights reserved.
- //
- import AVFoundation
- protocol AudioPlayerManagerDelegate {
- func didAudioPlayerBeginPlay(_ AudioPlayer: AVAudioPlayer)
- func didAudioPlayerStopPlay(_ AudioPlayer: AVAudioPlayer)
- func didAudioPlayerPausePlay(_ AudioPlayer: AVAudioPlayer)
- }
- class AudioPlayerManager: NSObject {
- static let shared: AudioPlayerManager = {
- return AudioPlayerManager()
- }()
-
- private override init() {super.init()}
-
- var delegate: AudioPlayerManagerDelegate?
- var player: AVAudioPlayer!
-
-
-
- func managerAudioWithData(_ data:Data, toplay:Bool) {
- if toplay {
- playAudioWithData(data)
- } else {
- pausePlayingAudio()
- }
- }
-
- func playAudioWithData(_ voiceData:Data) {
- do {
- try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: .defaultToSpeaker)
- } catch let error as NSError {
- print("set category fail \(error)")
- }
-
- if player != nil {
- player.stop()
- player = nil
- }
-
- do {
- let pl: AVAudioPlayer = try AVAudioPlayer(data: voiceData)
- pl.delegate = self
- pl.play()
- player = pl
- } catch let error as NSError {
- print("alloc AVAudioPlayer with voice data fail with error \(error)")
- }
-
- UIDevice.current.isProximityMonitoringEnabled = true
- }
-
- func pausePlayingAudio() {
- player?.pause()
- }
-
- func stopAudio() {
- if player != nil && player.isPlaying {
- player.stop()
- }
- UIDevice.current.isProximityMonitoringEnabled = false
- delegate?.didAudioPlayerStopPlay(player)
- }
- }
- extension AudioPlayerManager: AVAudioPlayerDelegate {
- func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
- stopAudio()
- }
- }
|