亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS開發項目- 基于WebSocket的聊天通訊(2)

2020-07-26 03:05:51
字體:
來源:轉載
供稿:網友

公司項目需要開發一個類似QQ、微信的即時IM聊天功能,做到實時監控消息,需要用的技術是websocket,今天整理下語言聊天這塊;其實語言聊天,包含兩部分,錄音和音樂播放,關于簡單語言聊天功能如下圖:

錄音

在AVFoundation框架中有一個AVAudioRecorder類專門處理錄音操作,它同樣支持多種音頻格式。與AVAudioPlayer類似,你完全可以將它看成是一個錄音機控制類,下面是常用的屬性和方法:

先來了解下AVAudioRecorder的常用屬性:

@property (readonly, getter=isRecording) BOOL recording;//是否正在錄音@property (readonly) NSDictionary<NSString *, id> *settings;//錄音配置@property (readonly) NSURL *url;//錄音文件存放URL@property (readonly) NSTimeInterval currentTime;//錄音時長@property (getter=isMeteringEnabled) BOOL meteringEnabled;//是否監控聲波

常用對象方法:

- (BOOL)prepareToRecord;//為錄音準備緩沖區- (BOOL)record;//錄音開始,暫停后調用會恢復錄音- (BOOL)recordAtTime:(NSTimeInterval)time;//在指定時間后開始錄音- (BOOL)recordForDuration:(NSTimeInterval) duration;//按指定時長錄音- (BOOL)recordAtTime:(NSTimeInterval)time forDuration:(NSTimeInterval)duration;//上面2個的合體- (void)pause; //中斷錄音- (void)stop; //停止錄音- (BOOL)deleteRecording;//刪除錄音,必須先停止錄音再刪除

常用的代理方法:

//錄音完成后調用- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag;//錄音編碼發送錯誤時調用- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error;

音頻

如果播放較大的音頻或者要對音頻有精確的控制則System Sound Service可能就很難滿足實際需求了,通常這種情況會選擇使用AVFoundation.framework中的AVAudioPlayer來實現。AVAudioPlayer可以看成一個播放器,它支持多種音頻格式,而且能夠進行進度、音量、播放速度等控制

AVAudioPlayer的使用比較簡單:

1.初始化AVAudioPlayer對象,此時通常指定本地文件路徑。

2.設置播放器屬性,例如重復次數、音量大小等。

3.調用play方法播放。

具體實現代碼

#import <AVFoundation/AVFoundation.h>#define kRecordAudioFile @"myRecord.caf"@interface ViewController ()<AVAudioRecorderDelegate>{  NSString *dateName;}@property (weak, nonatomic) IBOutlet UITableView *table;@property (nonatomic,strong) AVAudioRecorder *audioRecorder;//音頻錄音機@property (nonatomic,strong) AVAudioPlayer *audioPlayer;//音頻播放器,用于播放錄音文件@property(nonatomic,strong) NSMutableArray *spaceData;@end@implementation ViewController#pragma mark - 私有方法/** * 設置音頻會話 */-(void)setAudioSession{  AVAudioSession *audioSession=[AVAudioSession sharedInstance];  //設置為播放和錄音狀態,以便可以在錄制完之后播放錄音  [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];  [audioSession setActive:YES error:nil];}/** * 取得錄音文件設置 * * @return 錄音設置 */-(NSDictionary *)getAudioSetting{  NSMutableDictionary *dicM=[NSMutableDictionary dictionary];  //設置錄音格式  [dicM setObject:@(kAudioFormatLinearPCM) forKey:AVFormatIDKey];  //設置錄音采樣率,8000是電話采樣率,對于一般錄音已經夠了  [dicM setObject:@(8000) forKey:AVSampleRateKey];  //設置通道,這里采用單聲道  [dicM setObject:@(1) forKey:AVNumberOfChannelsKey];  //每個采樣點位數,分為8、16、24、32  [dicM setObject:@(8) forKey:AVLinearPCMBitDepthKey];  //是否使用浮點數采樣  [dicM setObject:@(YES) forKey:AVLinearPCMIsFloatKey];  //....其他設置等  return dicM;}/** * 取得錄音文件保存路徑 * * @return 錄音文件路徑 */-(NSURL *)getPlayPath:(NSString *)title{  //  static int index = 0;  NSString *urlStr=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];  urlStr=[urlStr stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%@",title,kRecordAudioFile]];  NSLog(@"play file path:%@",urlStr);  NSURL *url=[NSURL fileURLWithPath:urlStr];  return url;}/** * 以日期為title,來保存錄音 * * @return <#return value description#> */- (NSString *) convertDateFromString{  NSDate *date = [NSDate date];  //  NSLog(@"%@--askl",date);  //    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   //zzz表示時區,zzz可以刪除,這樣返回的日期字符將不包含時區信息。  [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];  NSString *destDateString = [dateFormatter stringFromDate:date];  return destDateString;}

長按錄音,松開停止

- (void)setClikeSpaceState:(NSString *)aState{  NSLog(@"點擊語音---");    if([aState isEqualToString:@"begin"])  {    NSLog(@"begin---");    dateName = [self convertDateFromString];    //創建錄音文件保存路徑    NSURL *url=[self getPlayPath:dateName];    //創建錄音格式設置    NSDictionary *setting=[self getAudioSetting];    //創建錄音機    NSError *error=nil;    _audioRecorder=[[AVAudioRecorder alloc]initWithURL:url settings:setting error:&error];    _audioRecorder.delegate=self;    _audioRecorder.meteringEnabled=YES;//如果要監控聲波則必須設置為YES    if (![self.audioRecorder isRecording]) {      [self.audioRecorder record];//首次使用應用時如果調用record方法會詢問用戶是否允許使用麥克風      //    self.timer.fireDate=[NSDate distantPast];      NSLog(@"111");    }  }else  {    NSLog(@"end---");    /** 停止錄音*/    [self.audioRecorder stop];    /** 錄音地址*/    NSURL *url = [self getPlayPath:dateName];    /** 加載數據*/    AVAudioPlayer  *audioPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];    Model *model = [[Model alloc]init];    model.duration = [NSString stringWithFormat:@"%.f",audioPlayer1.duration];    model.spacePath = dateName;    /** table 刷新*/    [self.spaceData addObject:model];    [self.table reloadData];    /** table 滾動到當前row*/    [self.table selectRowAtIndexPath:[NSIndexPath indexPathForRow:(self.spaceData.count - 1) inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];  }}

點擊table 播放

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{  Model *model = self.spaceData[indexPath.row];    /** 播放錄音*/  NSURL *url=[self getPlayPath:model.spacePath];  NSError *error=nil;  _audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:&error];  _audioPlayer.numberOfLoops=0;  [_audioPlayer prepareToPlay];  [self.audioPlayer play];  NSLog(@"%.0f---aaaa",_audioPlayer.duration);  /** UIImage動畫數組*/  NSMutableArray  *imgData = [NSMutableArray array];  for(int i=0;i<4;i++)  {    UIImage *aImage = [UIImage imageNamed:[NSString stringWithFormat:@"chat_receiver_audio_playing00%d",i]];    [imgData addObject:aImage];  }  TwoTableViewCell *twoCell = [self.table cellForRowAtIndexPath:indexPath];  /** 點擊動畫*/  [twoCell.speak setAnimationImages:imgData];  //    [twoCell.speak setAnimationRepeatCount:1];  [twoCell.speak setAnimationDuration:1];  [twoCell.speak startAnimating];  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)([model.duration intValue] * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{    [twoCell.speak stopAnimating];  });}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女久久久久久久久久久| 精品久久中文字幕| 欧美成人午夜视频| 亚洲欧美国产va在线影院| 亚洲新声在线观看| 日韩精品中文字幕在线| 777777777亚洲妇女| 成人黄色影片在线| 一个人看的www欧美| 国产91精品青草社区| 欧美在线性视频| 色妞色视频一区二区三区四区| 国产精品精品一区二区三区午夜版| 日本三级韩国三级久久| 欧美高清视频在线播放| 久久久久久久激情视频| 亚洲精品视频网上网址在线观看| 欧美电影在线播放| 最近2019中文字幕大全第二页| 国产97色在线| 欧美在线视频在线播放完整版免费观看| 亚洲色图第三页| 6080yy精品一区二区三区| 国产成人jvid在线播放| 久久久久久久久中文字幕| 日本欧美一二三区| 91精品国产高清久久久久久91| 久久人人97超碰精品888| 91久久精品国产91性色| 精品国产一区av| 精品国内产的精品视频在线观看| 97在线视频免费| 久久视频在线观看免费| 国产一区二区三区三区在线观看| 国产a级全部精品| www.99久久热国产日韩欧美.com| 欧美黑人一级爽快片淫片高清| 国产成人精品综合| 日韩国产在线播放| 久久在线精品视频| 亚洲性av在线| 亚洲午夜未满十八勿入免费观看全集| 亚洲美女福利视频网站| 91免费精品视频| 2019日本中文字幕| 国产精品精品久久久久久| 国产精品流白浆视频| 国产精品自拍视频| 久久高清视频免费| 国产精品三级网站| 国产精品久久久久久久天堂| 亚洲欧美另类自拍| 国产精品jizz在线观看麻豆| 久久69精品久久久久久久电影好| 国产精品久久久久久久久久三级| 日韩精品免费在线播放| 亚洲午夜精品久久久久久性色| 一区二区三区四区在线观看视频| 国产三级精品网站| 日韩国产一区三区| 亚洲美女久久久| 亚洲精品成人av| 一区二区三区视频在线| 51ⅴ精品国产91久久久久久| 欧美裸体xxxx极品少妇软件| 国产精品亚洲激情| 九九热这里只有在线精品视| 色综合久久久久久中文网| 欧美日韩一区二区三区| 色偷偷av一区二区三区乱| 中文字幕少妇一区二区三区| 日本亚洲欧洲色| 这里只有精品在线播放| 成人午夜在线观看| 欧美亚洲视频一区二区| 亚洲成色777777女色窝| 日韩欧美中文第一页| 97在线观看免费| 亚洲欧洲成视频免费观看| 午夜精品www| 国产精品视频一区二区高潮| 久久在精品线影院精品国产| 日韩美女主播视频| 亚洲精品在线看| 精品久久久久久久大神国产| 日韩欧美国产高清91| 91社区国产高清| 亚洲一区二区黄| 欧美日韩人人澡狠狠躁视频| 国产69精品久久久| 亚洲人成在线一二| 久久久精品影院| 91在线视频一区| 欧美性生交xxxxxdddd| 国产欧美精品在线播放| 久久久久久久久久久亚洲| 97精品在线视频| 亚洲一区二区久久久久久| 欧美性在线视频| 日韩视频免费大全中文字幕| 91视频九色网站| 日韩高清电影免费观看完整| 亚洲美女www午夜| 欧美一区二区大胆人体摄影专业网站| 欧美精品一区二区免费| 欧美视频一区二区三区…| 久久精品99久久香蕉国产色戒| 久久久精品中文字幕| 欧洲成人在线观看| 国产精品久久久久久婷婷天堂| 福利视频第一区| 日韩最新中文字幕电影免费看| 国产欧美精品在线播放| 国产精品91久久久久久| 日韩视频在线免费| 91国内免费在线视频| 视频在线观看99| 成人看片人aa| 欧美精品第一页在线播放| 国产精彩精品视频| 亚洲免费小视频| 精品国产欧美一区二区三区成人| 国产成人精品免高潮费视频| 亚洲一区精品电影| 成人黄色片在线| 欧美性xxxxx| 亚洲区免费影片| 亚洲午夜性刺激影院| 精品视频—区二区三区免费| 6080yy精品一区二区三区| 国产精品亚洲片夜色在线| 少妇高潮久久77777| 国产一区二区三区在线播放免费观看| 欧美又大又硬又粗bbbbb| 国产精品日韩av| 日韩av男人的天堂| 欧美一区二区三区……| 欧美激情va永久在线播放| 亚洲第一免费网站| 精品女同一区二区三区在线播放| 中文字幕国产精品久久| 久久久国产精品一区| 亚洲欧美在线第一页| 九色精品免费永久在线| 91精品国产91久久久久久吃药| 欧美成人黄色小视频| 最好看的2019年中文视频| 亚洲激情 国产| 欧美激情视频一区| 91香蕉电影院| 亚洲视频网站在线观看| 国产精品电影网| 国产高清视频一区三区| 亚洲欧美日韩国产精品| 国产91网红主播在线观看| 91精品在线影院| 成人国产精品色哟哟| 欧美亚洲日本网站| 成人免费网站在线| 欧美日韩另类视频| 欧美在线视频一区| 国产成人精品av在线| 精品视频久久久久久久| 成人福利视频在线观看|