IOS 录音(AVAudioRecorder)

#import "HMViewController.h"
#import <AVFoundation/AVFoundation.h>

@interface HMViewController ()
- (IBAction)startRecord;
- (IBAction)stopRecord;
@property (nonatomic, strong) AVAudioRecorder *recorder;
@property (nonatomic, strong) CADisplayLink *timer;
@property (nonatomic, strong) NSTimer *stopRecordTimer;
/** 静音的持续时间 */
@property (nonatomic, assign) CGFloat slientDuration;
@end

@implementation HMViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

}

- (void)addTimer
{
    self.timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(update)];
    [self.timer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)removeTimer
{
    [self.timer invalidate];
    self.timer = nil;
}

- (void)update
{
    // 更新测试值
    [self.recorder updateMeters];

    // 如果分贝不超过-20
    float power = [self.recorder averagePowerForChannel:0];
    if (power <= -20) { // 几乎为静音
        self.slientDuration += self.timer.duration;

        if (self.slientDuration >= 2) {
            // 停止录音
            [self.recorder stop];
        }
    } else { // 有说话
        self.slientDuration = 0;

    }
}

//- (void)update
//{
//    // 更新测试值
//    [self.recorder updateMeters];
//
//    // 如果分贝不超过-20
//    float power = [self.recorder averagePowerForChannel:0];
//    if (power <= -20) { // 几乎为静音
//        if (!self.stopRecordTimer) {
//            self.stopRecordTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self.recorder selector:@selector(stopRecord) userInfo:nil repeats:NO];
//        }
//    } else { // 有说话
////        [self.stopRecordTimer invalidate];
////        self.stopRecordTimer = nil;
//        NSDate *time = [NSDate dateWithTimeIntervalSinceNow:2.0];
//        [self.stopRecordTimer setFireDate:time];
//    }
//}

- (IBAction)startRecord {
    NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    NSString *path = [doc stringByAppendingPathComponent:@"test.caf"];
    NSURL *url = [NSURL fileURLWithPath:path];

    AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:url settings:nil error:nil];
    // 缓冲
    [recorder prepareToRecord];
    // 开启分贝测量功能
    recorder.meteringEnabled = YES;
    // 开始录音
    [recorder record];
    self.recorder = recorder;

    // 开启定时器
    [self addTimer];
}

- (IBAction)stopRecord {
//    [self.recorder stop];
}
@end
时间: 2024-12-20 04:49:16

IOS 录音(AVAudioRecorder)的相关文章

Swift实现iOS录音与播放音频功能

作用AVPLayer:可以用来播放在线及本地音视频AVAudioSession:音频会话,主要用来管理音频设置与硬件交互使用时需要导入 #import <AVFoundation/AVFoundation.h> AVAudioSession中配置选项: AVAudioSessionCategory 注意:除了 AVAudioSessionCategoryMultiRoute 外,其他的 Category 都遵循 last in wins 原则,即最后接入的音频设备作为输入或输出的主设备. 1.

ios录音Demo

<AudioToolbox/AudioToolbox.h> :这个库是C的接口,偏向于底层,主要用于在线流媒体的播放 <AVFoundation/AVFoundation.h> :提供了音频和回放的底层API,同时也负责管理音频的硬件 //需要遵循一个代理协议<AVAudioRecorderDelegate> ////  ViewController.m//  录音录频////  Created by lanou3g on 15/11/19.//  Copyright

iOS录音和播放的那些事儿:几个奇葩的需求

最近在做的项目中,需要在iPhone上接上带麦耳机(苹果叫Headset,不带麦耳机叫Headphone),然后实现同步录音和播放.这个功能实现之后,需要改变录音.播放的输入源. 对于实现同步录音和播放功能,肯定就要使用到底层的接口,用AVAudioRecorder/AVAudioPlayer是无法实现的. 我研究了iOS声音处理的知识之后,发现自己实现太过麻烦,需要用到至少包括AudioQueue/AudioBuffer等等,然后还有各种复杂的C Struct.回调函数.回调处理等等,非常麻烦

ios录音

#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewController () @property(nonatomic,strong)AVAudioRecorder*record; @property(nonatomic,strong)CADisplayLink *updatereflesh; @property(nonatomic,assign)CGFloat ti

ios录音、音频播放功能

#import <AVFoundation/AVFoundation.h> { NSInteger   _timeCount;    NSTimer     *_timer; } @property(nonatomic,retain)AVAudioPlayer  *audioPlayer;@property(nonatomic,retain)AVAudioRecorder *recorder;@property(nonatomic,assign)NSInteger      playTag;

iOS录音实践

在AVFoundation框架中AVAudioRecorder类专门处理录音操作,支持多种音频格式.下面是常用的属性和方法: 属性 说明 @property(readonly, getter=isRecording) BOOL recording; 是否正在录音,只读 @property(readonly) NSURL *url 录音文件地址,只读 @property(readonly) NSDictionary *settings 录音文件设置,只读 @property(readonly) N

iOS录音后播放声音小,AudioSessionInitialize failed,AudioQueueStart failed (-50)

方法1: UInt32 audioRoute = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRoute), &audioRoute); 方法2: [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback err

iOS 学习笔记 十三 (2015.04.15)采用第三方库,实现ios录音转为amr

1.第三方开源库地址 https://github.com/guange2015/ios-amr 2.参考博客地址 http://blog.csdn.net/windsoul85/article/details/8035088 http://macleo.iteye.com/blog/1708747

ios AudioQueueStart returns -50 录音失败问题

使用iOS录音时,如果在应用的别处有语音的操作,可能会出现上述问题: 导致录音机打开失败!无法录音,并且 AudioQueueStart() 返回的错误码 -50 解决方式 在调用 AudioQueueStart()方法之前,调用如下代码 AVAudioSession * session = [AVAudioSession sharedInstance]; if (!session) printf("ERROR INITIALIZING AUDIO SESSION! \n"); els