From 83b9d5c682b21d88133f24da0f94dd56bd79e687 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 19 Jul 2018 13:38:55 +0800
Subject: [PATCH] change
---
screendisplay/Pods/EaseUI/EaseUI/EMUIKit/3rdparty/DeviceHelper/internal/EMCDDeviceManager+Media.m | 296 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 296 insertions(+), 0 deletions(-)
diff --git a/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/3rdparty/DeviceHelper/internal/EMCDDeviceManager+Media.m b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/3rdparty/DeviceHelper/internal/EMCDDeviceManager+Media.m
new file mode 100755
index 0000000..59c1514
--- /dev/null
+++ b/screendisplay/Pods/EaseUI/EaseUI/EMUIKit/3rdparty/DeviceHelper/internal/EMCDDeviceManager+Media.m
@@ -0,0 +1,296 @@
+/************************************************************
+ * * 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 "EMCDDeviceManager+Media.h"
+#import "EMAudioPlayerUtil.h"
+#import "EMAudioRecorderUtil.h"
+#import "EMVoiceConverter.h"
+#import "DemoErrorCode.h"
+#import "EaseLocalDefine.h"
+
+typedef NS_ENUM(NSInteger, EMAudioSession){
+ EM_DEFAULT = 0,
+ EM_AUDIOPLAYER,
+ EM_AUDIORECORDER
+};
+
+@implementation EMCDDeviceManager (Media)
+#pragma mark - AudioPlayer
+
++ (NSString*)dataPath
+{
+ NSString *dataPath = [NSString stringWithFormat:@"%@/Library/appdata/chatbuffer", NSHomeDirectory()];
+ NSFileManager *fm = [NSFileManager defaultManager];
+ if(![fm fileExistsAtPath:dataPath]){
+ [fm createDirectoryAtPath:dataPath
+ withIntermediateDirectories:YES
+ attributes:nil
+ error:nil];
+ }
+ return dataPath;
+}
+
+// Play the audio
+- (void)asyncPlayingWithPath:(NSString *)aFilePath
+ completion:(void(^)(NSError *error))completon{
+ BOOL isNeedSetActive = YES;
+ // Cancel if it is currently playing
+ if([EMAudioPlayerUtil isPlaying]){
+ [EMAudioPlayerUtil stopCurrentPlaying];
+ isNeedSetActive = NO;
+ }
+
+ if (isNeedSetActive) {
+ [self setupAudioSessionCategory:EM_AUDIOPLAYER
+ isActive:YES];
+ }
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *wavFilePath = [[aFilePath stringByDeletingPathExtension] stringByAppendingPathExtension:@"wav"];
+ if ([EMVoiceConverter isMP3File:aFilePath]) {
+ wavFilePath = aFilePath;
+ } else {
+ if (![fileManager fileExistsAtPath:wavFilePath]) {
+ BOOL covertRet = [self convertAMR:aFilePath toWAV:wavFilePath];
+ if (!covertRet) {
+ if (completon) {
+ completon([NSError errorWithDomain:NSEaseLocalizedString(@"error.initRecorderFail", @"File format conversion failed")
+ code:EMErrorFileTypeConvertionFailure
+ userInfo:nil]);
+ }
+ return ;
+ }
+ }
+ }
+ [EMAudioPlayerUtil asyncPlayingWithPath:wavFilePath
+ completion:^(NSError *error)
+ {
+ [self setupAudioSessionCategory:EM_DEFAULT
+ isActive:NO];
+ if (completon) {
+ completon(error);
+ }
+ }];
+}
+
+- (void)stopPlaying{
+ [EMAudioPlayerUtil stopCurrentPlaying];
+ [self setupAudioSessionCategory:EM_DEFAULT
+ isActive:NO];
+}
+
+- (void)stopPlayingWithChangeCategory:(BOOL)isChange{
+ [EMAudioPlayerUtil stopCurrentPlaying];
+ if (isChange) {
+ [self setupAudioSessionCategory:EM_DEFAULT
+ isActive:NO];
+ }
+}
+
+- (BOOL)isPlaying{
+ return [EMAudioPlayerUtil isPlaying];
+}
+
+#pragma mark - Recorder
+
++(NSTimeInterval)recordMinDuration{
+ return 1.0;
+}
+
+// Start recording
+- (void)asyncStartRecordingWithFileName:(NSString *)fileName
+ completion:(void(^)(NSError *error))completion{
+ NSError *error = nil;
+
+ if ([self isRecording]) {
+ if (completion) {
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.recordStoping", @"Record voice is not over yet")
+ code:EMErrorAudioRecordStoping
+ userInfo:nil];
+ completion(error);
+ }
+ return ;
+ }
+
+ if (!fileName || [fileName length] == 0) {
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.notFound", @"File path not exist")
+ code:-1
+ userInfo:nil];
+ completion(error);
+ return ;
+ }
+
+ BOOL isNeedSetActive = YES;
+ if ([self isRecording]) {
+ [EMAudioRecorderUtil cancelCurrentRecording];
+ isNeedSetActive = NO;
+ }
+
+ [self setupAudioSessionCategory:EM_AUDIORECORDER
+ isActive:YES];
+
+ _recorderStartDate = [NSDate date];
+
+ NSString *recordPath = [NSString stringWithFormat:@"%@/%@", [EMCDDeviceManager dataPath], fileName];
+ [EMAudioRecorderUtil asyncStartRecordingWithPreparePath:recordPath
+ completion:completion];
+}
+
+// Stop recording
+-(void)asyncStopRecordingWithCompletion:(void(^)(NSString *recordPath,
+ NSInteger aDuration,
+ NSError *error))completion{
+ NSError *error = nil;
+
+ if(![self isRecording]){
+ if (completion) {
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.recordNotBegin", @"Recording has not yet begun")
+ code:EMErrorAudioRecordNotStarted
+ userInfo:nil];
+ completion(nil,0,error);
+ }
+ return;
+ }
+
+ __weak typeof(self) weakSelf = self;
+ _recorderEndDate = [NSDate date];
+
+ if([_recorderEndDate timeIntervalSinceDate:_recorderStartDate] < [EMCDDeviceManager recordMinDuration]){
+ if (completion) {
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.recordTooShort", @"Recording time is too short")
+ code:EMErrorAudioRecordDurationTooShort
+ userInfo:nil];
+ completion(nil,0,error);
+ }
+
+ // If the recording time is too shorty���in purpose delay one second
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)([EMCDDeviceManager recordMinDuration] * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ [EMAudioRecorderUtil asyncStopRecordingWithCompletion:^(NSString *recordPath) {
+ [weakSelf setupAudioSessionCategory:EM_DEFAULT isActive:NO];
+ }];
+ });
+ return ;
+ }
+
+ [EMAudioRecorderUtil asyncStopRecordingWithCompletion:^(NSString *recordPath) {
+ if (completion) {
+ if (recordPath) {
+ // Convert wav to amr
+ NSString *amrFilePath = [[recordPath stringByDeletingPathExtension]
+ stringByAppendingPathExtension:@"amr"];
+ BOOL convertResult = [self convertWAV:recordPath toAMR:amrFilePath];
+ NSError *error = nil;
+ if (convertResult) {
+ // Remove the wav
+ NSFileManager *fm = [NSFileManager defaultManager];
+ [fm removeItemAtPath:recordPath error:nil];
+ }
+ else {
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.initRecorderFail", @"File format conversion failed")
+ code:EMErrorFileTypeConvertionFailure
+ userInfo:nil];
+ }
+ completion(amrFilePath,(int)[self->_recorderEndDate timeIntervalSinceDate:self->_recorderStartDate],error);
+ }
+ [weakSelf setupAudioSessionCategory:EM_DEFAULT isActive:NO];
+ }
+ }];
+}
+
+// Cancel recording
+-(void)cancelCurrentRecording{
+ [EMAudioRecorderUtil cancelCurrentRecording];
+ [self setupAudioSessionCategory:EM_DEFAULT isActive:NO];
+}
+
+-(BOOL)isRecording{
+ return [EMAudioRecorderUtil isRecording];
+}
+
+#pragma mark - Private
+-(NSError *)setupAudioSessionCategory:(EMAudioSession)session
+ isActive:(BOOL)isActive{
+ BOOL isNeedActive = NO;
+ if (isActive != _currActive) {
+ isNeedActive = YES;
+ _currActive = isActive;
+ }
+ NSError *error = nil;
+ NSString *audioSessionCategory = nil;
+ switch (session) {
+ case EM_AUDIOPLAYER:
+ audioSessionCategory = AVAudioSessionCategoryPlayback;
+ break;
+ case EM_AUDIORECORDER:
+ audioSessionCategory = AVAudioSessionCategoryRecord;
+ break;
+ default:
+ audioSessionCategory = AVAudioSessionCategoryAmbient;
+ break;
+ }
+
+ AVAudioSession *audioSession = [AVAudioSession sharedInstance];
+
+ if (![_currCategory isEqualToString:audioSessionCategory]) {
+ [audioSession setCategory:audioSessionCategory error:nil];
+ }
+ if (isNeedActive) {
+ BOOL success = [audioSession setActive:isActive
+ withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation
+ error:&error];
+ if(!success || error){
+ error = [NSError errorWithDomain:NSEaseLocalizedString(@"error.initPlayerFail", @"Failed to initialize AVAudioPlayer")
+ code:-1
+ userInfo:nil];
+ return error;
+ }
+ }
+ _currCategory = audioSessionCategory;
+
+ return error;
+}
+
+#pragma mark - Convert
+
+- (BOOL)convertAMR:(NSString *)amrFilePath
+ toWAV:(NSString *)wavFilePath
+{
+ BOOL ret = NO;
+ BOOL isFileExists = [[NSFileManager defaultManager] fileExistsAtPath:amrFilePath];
+ if (isFileExists) {
+ [EMVoiceConverter amrToWav:amrFilePath wavSavePath:wavFilePath];
+ isFileExists = [[NSFileManager defaultManager] fileExistsAtPath:wavFilePath];
+ if (isFileExists) {
+ ret = YES;
+ }
+ }
+
+ return ret;
+}
+
+- (BOOL)convertWAV:(NSString *)wavFilePath
+ toAMR:(NSString *)amrFilePath {
+ BOOL ret = NO;
+ BOOL isFileExists = [[NSFileManager defaultManager] fileExistsAtPath:wavFilePath];
+ if (isFileExists) {
+ [EMVoiceConverter wavToAmr:wavFilePath amrSavePath:amrFilePath];
+ isFileExists = [[NSFileManager defaultManager] fileExistsAtPath:amrFilePath];
+ if (!isFileExists) {
+
+ } else {
+ ret = YES;
+ }
+ }
+
+ return ret;
+}
+
+@end
--
Gitblit v1.8.0