热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

录音,

1,初始化AVAudioSession7.0第一次运行会提示,是否允许使用麦克风AVAudioSession*session[AVAudioSessionsharedInsta

1,初始化 AVAudioSession

 class="s2">//7.0第一次运行会提示,是否允许使用麦克风

       
AVAudioSession *session = [AVAudioSessionclass="s4">sharedInstance];

        NSError
*sessionError;

       
//AVAudioSessionCategoryPlayAndRecord用于录音和播放

        [session class="s4">setCategory:class="s5">AVAudioSessionCategoryPlayAndRecord class="s4">error:&sessionError];

        if(session ==
nil)

            class="s4">NSLog(@"Error creating session: %@",
[sessionError description]);

        else

            [session setActive:class="s7">YES error:class="s7">nil];

2,生成目录

    class="s2">NSString *docDir =
[
NSSearchPathForDirectoriesInDomainsclass="s1">(NSDocumentDirectory,
NSUserDomainMask, class="s3">YES) objectAtIndexclass="s1">:0];

    playName = [class="s2">NSString stringWithFormat:@"%@/play.aac",docDir];

3,录制

   class="s2">recorder = [[class="s3">AVAudioRecorderalloc] initWithURLclass="s1">:[NSURLURLWithStringclass="s1">:playName]
settings:class="s2">recorderSettingsDicterrorclass="s1">:&error];

        

        if (class="s2">recorder) {

            class="s2">recorder.meteringEnabled = class="s4">YES;

            [class="s2">recorder prepareToRecord];

            [class="s2">recorder record];

4,播放

  class="s2">player = [[class="s3">AVAudioPlayeralloc]
initWithContentsOfURL:[class="s3">NSURLURLWithString:class="s2">playName] errorclass="s1">:&playerError];

    

    if (class="s2">player == nil)

    {

        NSLogclass="s1">(@"ERror creating player: %@", [playerError
description]);

    }else{

        [player class="s5">play];

    }

ps:好像AVAudioSession 与class="s3">AVAudioRecorder, class="s3">AVAudioPlayer没有什么关系,代码之间看不到,

a,设置:

//录音设置
NSMutableDictionary *recordSetting = [[[NSMutableDictionary
alloc]init] autorelease];
//设置录音格式
AVFormatIDKey==kAudioFormatLinearPCM
[recordSetting setValue:[NSNumber
numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
//设置录音采样率(Hz)
如:AVSampleRateKey==8000/44100/96000(影响音频的质量)
[recordSetting
setValue:[NSNumber numberWithFloat:44100] forKey:AVSampleRateKey];

//录音通道数 1 或 2
[recordSetting setValue:[NSNumber numberWithInt:1]
forKey:AVNumberOfChannelsKey];
//线性采样位数 8、16、24、32
[recordSetting
setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];

//录音的质量
[recordSetting setValue:[NSNumber numberWithInt:AVAudioQualityHigh]
forKey:AVEncoderAudioQualityKey];
//要找的文件路径
NSString *strUrl =
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
lastObject];
//创建存储的文件夹
NSURL *url = [NSURL fileURLWithPath:[NSString
stringWithFormat:@"%@/lll.aac", strUrl]];
urlPlay =
url;//获得播放路径
NSLog(@"录音的路径为:%@",strUrl);

NSLog(@"录音====路径:%@",url);
NSError *error;
//初始化
recorder =
[[AVAudioRecorder alloc]initWithURL:url settings:recordSetting
error:&error];

//开启音量检测
recorder.meteringEnabled = YES;

recorder.delegate = self;

b,启动,时间限制,

- (IBAction)btnDown:(id)sender
{

//创建录音文件,准备录音
if ([recorder
prepareToRecord]) {
//开始
[recorder record];
}


//设置定时检测
timer = [NSTimer scheduledTimerWithTimeInterval:0 target:self
selector:@selector(detectionVoice) userInfo:nil repeats:YES];

}

- (IBAction)btnUp:(id)sender
{
>double cTime =
recorder.currentTime;

if
(cTime > 2) {//如果录制时间<2 不发送

[mainRecorder recordForDuration:60.0];//设置录音时限60秒,该方法自动执行prepareToRecord


NSLog(@"发出去");
}else {
//删除记录的文件
[recorder
deleteRecording];
//删除存储的
}
[recorder stop];
[timer
invalidate];//移除计时器
}
- (IBAction)btnDragUp:(id)sender
{

//删除录制文件
[recorder deleteRecording];
[recorder stop];
[timer
invalidate];

NSLog(@"取消发送");
}


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 项目风险管理策略与实践
    本文探讨了项目风险管理的关键环节,包括风险管理规划、风险识别、风险分析(定性和定量)、风险应对策略规划及风险控制。旨在通过系统的方法提升项目成功率,减少不确定因素对项目的影响。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
author-avatar
粪想升或_519
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有