/************************************************************
|
* * 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
|