文档章节

简易录音机

C
 CBETA-陈
发布于 2016/05/22 20:23
字数 452
阅读 6
收藏 0
  1.  

@interface ViewController : UIViewController<AVAudioRecorderDelegate>

@property (strong, nonatomic) IBOutlet UISegmentedControl *sampleRateSeg;
@property (strong, nonatomic) IBOutlet UISegmentedControl *bitDeptSeg;
@property (strong, nonatomic) IBOutlet UISwitch *stereoSwitch;
@property (strong, nonatomic) IBOutlet UIButton *recordBn;
// 该属性代表了该应用的Documnts目录
@property (nonatomic, copy) NSString* documentsPath;
- (IBAction)clicked:(id)sender;
- (IBAction)play:(id)sender;
@end

2.

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

@interface ViewController ()

@end

@implementation ViewController
AVAudioRecorder* audioRecorder;
UIImage* recordImage;
UIImage* stopImage;
AVAudioPlayer* audioPlayer;
- (void)viewDidLoad
{
    [super viewDidLoad];
    recordImage = [UIImage imageNamed:@"record.png"];
    stopImage = [UIImage imageNamed:@"stop.png"];
                                  
    [self.recordBn setImage:recordImage forState:UIControlStateNormal];
    // 获取当前应用的音频会话
    AVAudioSession * audioSession = [AVAudioSession sharedInstance];
    // 设置音频类别,PlayAndRecord——这说明当前音频会话即可播放、也可录制
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error: nil];
    // 激活当前应用的音频会话
    [audioSession setActive:YES error: nil];
}
//获取document目录的路径
- (NSString*) documentsPath {
    if (! _documentsPath) {
        NSArray *searchPaths =
        NSSearchPathForDirectoriesInDomains
        (NSDocumentDirectory, NSUserDomainMask, YES);
        _documentsPath = [searchPaths objectAtIndex: 0];
    }
    return _documentsPath;
}
- (IBAction)clicked:(id)sender
{
    if(audioRecorder != nil && audioRecorder.isRecording)
    {
        [audioRecorder stop];
        [self.recordBn setImage:recordImage forState:UIControlStateNormal];
    }
    else
    {
        // 获取音频文件的保存路径
        NSString *destinationString = [[self documentsPath]
            stringByAppendingPathComponent:@"sound.wav"];
        NSURL *destinationURL = [NSURL fileURLWithPath:destinationString];
        // 创建一个NSDictionary,用于保存录制属性
        NSMutableDictionary *recordSettings = [[NSMutableDictionary alloc] init];
        // 设置录制音频的格式
        [recordSettings setObject:[NSNumber numberWithInt:kAudioFormatLinearPCM]
            forKey: AVFormatIDKey];
        NSString* sampleRate = [self.sampleRateSeg titleForSegmentAtIndex:
            self.sampleRateSeg.selectedSegmentIndex];
        // 设置录制音频的采样率
        [recordSettings setObject:[NSNumber numberWithFloat:
            sampleRate.floatValue] forKey: AVSampleRateKey];
        // 设置录制音频的通道数
        [recordSettings setObject:
            [NSNumber numberWithInt:(self.stereoSwitch.on ? 2 : 1)]
            forKey:AVNumberOfChannelsKey];
        NSString* bitDepth = [self.bitDeptSeg titleForSegmentAtIndex:
            self.bitDeptSeg.selectedSegmentIndex];
        // 设置录制音频的每个样点的位数
        [recordSettings setObject: [NSNumber numberWithInt:bitDepth.integerValue]
            forKey:AVLinearPCMBitDepthKey];
        // 设置录制音频采用高位优先的记录格式
        [recordSettings setObject:[NSNumber numberWithBool:YES]
            forKey:AVLinearPCMIsBigEndianKey];
        // 设置采样信号采用浮点数
        [recordSettings setObject:[NSNumber numberWithBool:YES]
            forKey:AVLinearPCMIsFloatKey];
        NSError *recorderSetupError = nil;
        // 初始化AVAudioRecorder
        audioRecorder = [[AVAudioRecorder alloc] initWithURL:destinationURL
            settings:recordSettings  error:&recorderSetupError];
        audioRecorder.delegate = self;
        [audioRecorder record];
        [self.recordBn setImage:stopImage forState:UIControlStateNormal];
    }
}
- (IBAction)play:(id)sender
{
    // 获取音频文件的保存路径
    NSString *destinationString = [[self documentsPath]
        stringByAppendingPathComponent:@"sound.wav"];
    NSURL *url = [NSURL fileURLWithPath:destinationString];
    // 创建AVAudioPlayer对象
    audioPlayer = [[AVAudioPlayer alloc]
        initWithContentsOfURL:url error: nil];
    // 开始播放
    [audioPlayer play];
}
- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
    NSLog(@"被中断!");
}
- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)aRecorder
    successfully:(BOOL)flag
{
    if(flag)
    {
        NSLog(@"录制完成!!");
    }
}

 

© 著作权归作者所有

共有 人打赏支持
C
粉丝 0
博文 5
码字总数 3395
作品 0
朝阳
Android开源git40个App源码

(JamsMusicPlayer)很棒的音乐播放器(new) (F8)日程安排的软件 (Conversations)基于XMPP的应用 (Bitocle)可以在手机上查看自己github上的项目 (Amphitheatre)Android TV应用,数据来源于TMDb,...

拉偶有所依
2015/06/03
829
2
Windows server 常用命令-备忘录

在开始-》运行,输入以下命令 gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 logoff---------注销命令 tsshutdn-------60秒倒计...

桩子尚品
07/24
0
0
直接开启电脑功能的命令

color 颜色值 设置cmd控制台前景和背景颜色;0=黑、1=蓝、2=绿、3=浅绿、4=红、5=紫、6=黄、7=白、8=灰、9=淡蓝、A=淡绿、B=淡浅绿、C=淡红、D=淡紫、E=淡黄、F=亮白cmd.exe--------...

lyf执念
2017/12/25
0
0
MIUI录音机

MIUI录音机是基于Android原生录音机来开发的,能够运行在Android2.3.3及以上版本。与Android原生录音机相比,MIUI录音机在UI、交互方式和录音效果上都有较大的提升,其磁带的显示效果更是收到...

匿名
2012/02/09
3.8K
0
windows中dos下命令

windows中下载东西,因为文件大的缘故,下载缓慢,不知道何时下载完,可以通过在windows中使用dos命令,一定时间后自动关机,节约用电等,故此总结常用的dos命令。 mplayer2-------简易widno...

爱情89757
2016/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
51分钟前
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部