| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /************************************************************
- * * Hyphenate CONFIDENTIAL
- * __________________
- * Copyright (C) 2016 Hyphenate Inc. All rights reserved.
- *
- * NOTICE: All information contained herein is, and remains
- * the property of Hyphenate Inc.
- * Dissemination of this information or reproduction of this material
- * is strictly forbidden unless prior written permission is obtained
- * from Hyphenate Inc.
- */
- #import "EMAudioPlayerUtil.h"
- #import <AVFoundation/AVFoundation.h>
- #import "EaseLocalDefine.h"
- static EMAudioPlayerUtil *audioPlayerUtil = nil;
- @interface EMAudioPlayerUtil () <AVAudioPlayerDelegate> {
- AVAudioPlayer *_player;
- void (^playFinish)(NSError *error);
- }
- @end
- @implementation EMAudioPlayerUtil
- #pragma mark - public
- + (BOOL)isPlaying{
- return [[EMAudioPlayerUtil sharedInstance] isPlaying];
- }
- + (NSString *)playingFilePath{
- return [[EMAudioPlayerUtil sharedInstance] playingFilePath];
- }
- + (void)asyncPlayingWithPath:(NSString *)aFilePath
- completion:(void(^)(NSError *error))completon{
- [[EMAudioPlayerUtil sharedInstance] asyncPlayingWithPath:aFilePath
- completion:completon];
- }
- + (void)stopCurrentPlaying{
- [[EMAudioPlayerUtil sharedInstance] stopCurrentPlaying];
- }
- #pragma mark - private
- + (EMAudioPlayerUtil *)sharedInstance{
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- audioPlayerUtil = [[self alloc] init];
- });
-
- return audioPlayerUtil;
- }
- - (BOOL)isPlaying
- {
- return !!_player;
- }
- // Get the path of what is currently being played
- - (NSString *)playingFilePath
- {
- NSString *path = nil;
- if (_player && _player.isPlaying) {
- path = _player.url.path;
- }
-
- return path;
- }
- - (void)asyncPlayingWithPath:(NSString *)aFilePath
- completion:(void(^)(NSError *error))completon{
- playFinish = completon;
- NSError *error = nil;
- NSFileManager *fm = [NSFileManager defaultManager];
- if (![fm fileExistsAtPath:aFilePath]) {
- error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.notFound", @"File path not exist")
- code:-1
- userInfo:nil];
- if (playFinish) {
- playFinish(error);
- }
- playFinish = nil;
-
- return;
- }
-
- NSURL *wavUrl = [[NSURL alloc] initFileURLWithPath:aFilePath];
- _player = [[AVAudioPlayer alloc] initWithContentsOfURL:wavUrl error:&error];
- if (error || !_player) {
- _player = nil;
- error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.initPlayerFail", @"Failed to initialize AVAudioPlayer")
- code:-1
- userInfo:nil];
- if (playFinish) {
- playFinish(error);
- }
- playFinish = nil;
- return;
- }
-
- _player.delegate = self;
- [_player prepareToPlay];
- [_player play];
- }
- - (void)stopCurrentPlaying{
- if(_player){
- _player.delegate = nil;
- [_player stop];
- _player = nil;
- }
- if (playFinish) {
- playFinish = nil;
- }
- }
- - (void)dealloc{
- if (_player) {
- _player.delegate = nil;
- [_player stop];
- _player = nil;
- }
- playFinish = nil;
- }
- #pragma mark - AVAudioPlayerDelegate
- - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player
- successfully:(BOOL)flag{
- if (playFinish) {
- playFinish(nil);
- }
- if (_player) {
- _player.delegate = nil;
- _player = nil;
- }
- playFinish = nil;
- }
- - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player
- error:(NSError *)error{
- if (playFinish) {
- NSError *error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.palyFail", @"Play failure")
- code:-1
- userInfo:nil];
- playFinish(error);
- }
- if (_player) {
- _player.delegate = nil;
- _player = nil;
- }
- }
- @end
|