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