1、AVAudioSessionCategory说明

  • 1.1 AVAudioSessionCategoryAmbient 或 kAudioSessionCategory_AmbientSound

    • 用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。
    • 并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。
    • 注意:该Category无法在后台播放声音
  • 1.2 AVAudioSessionCategorySoloAmbient 或 kAudioSessionCategory_SoloAmbientSound
    • 类似于AVAudioSessionCategoryAmbient 不同之处在于它会中止其它应用播放声音。
    • 这个category为默认category。该Category无法在后台播放声音
  • 1.3 AVAudioSessionCategoryPlayback 或 kAudioSessionCategory_MediaPlayback
    • 用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。
    • 可在后台播放声音
  • 1.4 AVAudioSessionCategoryRecord 或 kAudioSessionCategory_RecordAudio
    • 用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。
    • 该Category只提供单纯录音功能。
  • 1.5 AVAudioSessionCategoryPlayAndRecord 或 kAudioSessionCategory_PlayAndRecord
    • 用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。
    • 该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,
    • 在该Category下声音的默认出口为听筒(在没有外接设备的情况下)。
  • 1.6 注意

    • 并不是一个应用只能使用一个category,程序应该根据实际需要来切换设置不同的category,
    • 举个例子,录音的时候,需要设置为AVAudioSessionCategoryRecord,
    • 当录音结束时,应根据程序需要更改category为AVAudioSessionCategoryAmbient,
    • AVAudioSessionCategorySoloAmbient或AVAudioSessionCategoryPlayback中的一种。

2、录音后再播放声音太小问题解决

  • 2.1 方法一:录音结束恢复播放模式

    1. /********************** 开始录音 **********************************/
    2. - (void)onRecordSoundStart:(UIButton *)sender {
    3. if (![self canRecord]) {
    4. [[[UIAlertView alloc] initWithTitle:nil message:[NSString stringWithFormat:@"应用需要访问您的麦克风。\n请启用麦克风-设置/隐私/麦克风"]
    5. delegate:nil
    6. cancelButtonTitle:@"好"
    7. otherButtonTitles:nil] show];
    8. return;
    9. }
    10. [self initRecordSession];
    11. NSDictionary *settings = [[NSDictionary alloc] initWithObjectsAndKeys:
    12. [NSNumber numberWithFloat:44100.0], AVSampleRateKey , //采样率 8000/44100/96000
    13. [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey, //录音格式
    14. [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey, //线性采样位数 8、16、24、32
    15. [NSNumber numberWithInt:2], AVNumberOfChannelsKey, //声道 1,2
    16. [NSNumber numberWithInt:AVAudioQualityHigh], AVEncoderAudioQualityKey, //录音质量
    17. nil];
    18. NSURL *strURL = [NSURL fileURLWithPath:[self GetRecordSoundFileName:sender.tag]];
    19. _recorder = [[AVAudioRecorder alloc] initWithURL:strURL settings:settings error:nil];
    20. _recorder.meteringEnabled = YES;
    21. _recorder.delegate = self;
    22. [_recorder prepareToRecord];
    23. [_recorder record];
    24. _timerRec = [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(detectionVoice) userInfo:nil repeats:YES];
    25. }
    26. /********************** 结束录音 **********************************/
    27. - (void)onRecordSoundStop:(UIButton *)sender {
    28. AVAudioSession *session = [AVAudioSession sharedInstance];
    29. [session setCategory:AVAudioSessionCategoryPlayback error:nil]; //此处需要恢复设置回放标志,否则会导致其它播放声音也会变小
    30. [session setActive:YES error:nil];
    31. [_timerRec invalidate];
    32. if (_recorder.currentTime > 1) {
    33. [_recorder stop];
    34. PlayNodeData *model = _dataOfVideoArrary[sender.tag];
    35. model.hasSound = YES;
    36. [_btnPlay setImage:[UIImage imageNamed:@"simulate_image_play1"] forState:UIControlStateNormal];
    37. }
    38. }
    39. /********************** 录音器是否可用检查 **********************************/
    40. - (BOOL)canRecord {
    41. __block BOOL bCanRecord = YES;
    42. if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending) {
    43. AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    44. if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
    45. [audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
    46. if (granted) {
    47. bCanRecord = YES;
    48. }
    49. else {
    50. bCanRecord = NO;
    51. }
    52. }];
    53. }
    54. }
    55. return bCanRecord;
    56. }
    57. /********************** 初始化录音器 **********************************/
    58. - (void)initRecordSession {
    59. AVAudioSession *session = [AVAudioSession sharedInstance];
    60. [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
    61. [session setActive:YES error:nil];
    62. }
    63. /********************** 录音中音量更新 **********************************/
    64. - (void)detectionVoice {
    65. return;
    66. [_recorder updateMeters];//刷新音量数据
    67. //获取音量的平均值 [recorder averagePowerForChannel:0];
    68. //音量的最大值 [recorder peakPowerForChannel:0];
    69. double lowPassResults = pow(10, (0.05 * [_recorder peakPowerForChannel:0]));
    70. NSLog(@"%lf",lowPassResults);
    71. //最大50 0
    72. //图片 小-》大
    73. if (0 < lowPassResults <= 0.06) {
    74. ;
    75. }
    76. else if (0.06 < lowPassResults <= 0.13) {
    77. ;
    78. }
    79. else if (0.13 < lowPassResults <= 0.20) {
    80. ;
    81. }
    82. else if (0.20 < lowPassResults <= 0.27) {
    83. ;
    84. }
    85. }
  • 2.2 方法二:设置听筒模式

    1. [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];

IOS中录音后再播放声音太小问题解决的更多相关文章

  1. iOS AVAudioPlayer播放音频时声音太小

    iOS AVAudioPlayer播放音频时声音太小 //引入AVFoundation类库,设置播放模式就可以了 do { try AVAudioSession.sharedInstance().ov ...

  2. eclipse下java中凝视字体太小和xml中中文字体太小问题解决方法

    我们在win7下进行android应用开发.须要搭建对应的开发环境.如今普遍基本上都是eclipse+adt+sdk,在本人搭建完环境后,发现eclipse下.java中的凝视和xml中的中文字体变得 ...

  3. iOS中书写代码规范35条小建议

    1.精简代码, 返回最后一句的值,这个方法有一个优点,所有的变量都在代码块中,也就是只在代码块的区域中有效,这意味着可以减少对其他作用域的命名污染.但缺点是可读性比较差 NSURL *url = ({ ...

  4. iOS中转义后的html标签如何还原

    最近用swift做一个公司的小项目,遇到一个问题,就是通过api获取的html文本中的标签都已经被转义了, <p class="MsoNormal" align=" ...

  5. ligerUI布局时,Center中的Tab高度太小问题解决

    1.0 引用的js,css <link href="/Content/scripts/ligerUI/skins/Aqua/css/ligerui-all.css" rel= ...

  6. ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小解决办法

    1.今天写的存储过程在执行过程中,报如下错误. exec PRO_T_008pro_update_add_delete(17,1,1,1,1,45.0,54.0,45.0,45.0,45.0,54.0 ...

  7. iOS录音后播放声音变小的解决方法

    目前需求是录音之后再播放出来.经常会出现播放声音变很小的情况. 解决方法: if (recorder.recording){ [recorder stop]; } [[AVAudioSession s ...

  8. iOS 多个异步网络请求全部返回后再执行具体逻辑的方法

    对于dispatch多个异步操作后的同步方法,以前只看过dispatch_group_async,看看这个方法的说明: * @discussion * Submits a block to a dis ...

  9. IOS 实现 AAC格式 录音 录音后自动播放

    废话不说了 不知道aac可以百度一下 下面直接上代码,一个h文件 一个m文件 搞定! #import <AVFoundation/AVFoundation.h> #import <U ...

随机推荐

  1. bae3.0第一步 添加框架支持

    1.克隆bae上应用代码: 先在本地linux机器上创建文件夹bae并进入, 再执行git clone https://git.duapp.com/appidd01iud80bg 结果会在bae文件夹 ...

  2. OracleParameter中参数名必须是DB中已有字段:【 ORA-01745: 无效的主机/绑定变量名】

    错误例子: 错误原因:查询的变量是自己随便命名的,不是数据库表中已有的字段, 因此,在进行OracleParameter(":rownum",10)时,在数据库中无法自动进行字段匹 ...

  3. 蓝桥杯 历届试题 PREV-33 兰顿蚂蚁

    历届试题 兰顿蚂蚁   时间限制:1.0s   内存限制:256.0MB 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中 ...

  4. java代码。继承。。。很戳我的心啊。。不太懂。super的真正用法

    总结: package com.addd; //构造方法不能被继承,只能是调用 //属性不能被继承,方法可以 //关于继承练习啊 class fjdsk { String name; int age; ...

  5. 单片机RS485通信接口、控制线、原理图及程序实例

    RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方: 接口的信号电平值较高,达到十几 V,使用不当容易损坏接口芯片,电平标准也与TTL 电平不兼容. 传输速率有局限,不可 ...

  6. 人脸识别FaceNet+TensorFlow

    一.本文目标 利用facenet源码实现从摄像头读取视频,实时检测并识别视频中的人脸.换句话说:把facenet源码中contributed目录下的real_time_face_recognition ...

  7. js查看对象内容

    function show_obj(obj){ var temp,p1Str=""; for(temp in obj){ p1Str=p1Str+temp+":" ...

  8. Celery-4.1 用户指南: Extensions and Bootsteps (扩展和Bootsteps)

    自定义消息消费者 你可能想要嵌入自定义的 Kombu 消费者来手动处理你的消息. 为了达到这个目的,celery 提供了一个 ConsumerStep bootstep 类,你只需要定义 get_co ...

  9. JCTF 2014(Reverse)

    小菜一碟: 点击下载附件 下载的附件没有后缀,用c32打开看看 是apk文件,用Smali2JavaUI打开 程序把输入框的字符串反转,然后进行MD5加密,最后进行base64编码,与NzU2ZDJm ...

  10. 2015.1.8 Left join 左连接

    格式 select f1.a, f2.b form f1 left jion f2 on .... 注意:左边的查询部分只能有select和from,不能出现where order by等.若有必须在 ...