开发之声音

记录一下iOS开发中用到的录音功能和声音播放功能

Posted by Ted on August 26, 2016

部分代码位置Github-VoiceDemo

Pre

与图片中默认的格式为PNG格式一样,iOS开发中声音的格式也有默认格式,为wav格式,本文中的产生的格式均为wav格式,其他格式则需要转换。有第三方的框架,进行转换成amr等格式

一、声音录制

要先引入AVFoundation的框架

#import <AVFoundation/AVFoundation.h>
    self.voiceRecorder = [[AVAudioRecorder alloc]initWithURL:[NSURL fileURLWithPath:self.voicePath] settings:self.recorderSetting error:nil];
    if ([self.voiceRecorder prepareToRecord]){
        [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:nil];
        [[AVAudioSession sharedInstance] setActive:YES error:nil];
        
        //开始录音
        [self.voiceRecorder record];
    }

录制声音主要设置两个参数,Path和Setting

Path:声音文件录制后存储的路径

Setting:一个录制参数的字典,设置一些录制的必要的参数,需要进行调整到合适的值

        _recorderSetting = [[NSDictionary alloc] initWithObjectsAndKeys:
                            [NSNumber numberWithFloat: 8000.0],AVSampleRateKey, //采样率
                            [NSNumber numberWithInt: kAudioFormatLinearPCM],AVFormatIDKey,
                            [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,//采样位数 默认 16
                            [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,//通道的数目
                            nil];

AVAudioRecorder在录制的时候可以暂停和恢复

暂停

- (void)pause; /* pause recording */

恢复/开始

- (void)record;

录制完成

- (void)stop;

二、声音播放

先引入MediaPlayer

#import <MediaPlayer/MediaPlayer.h>
@import AVFoundation;
@import AudioToolbox;

设置好录音文件路径就可以播放。注意:如果在播上一段录音,同时再点播放的话,两个声音会一起播放

    if (_player) { // 如果正在播放上一段录音,则停止
        [_player stop];
    }
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:nil];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    if (path&& [self fileSizeAtPath:path]) {
        self.player = [self.player initWithContentsOfURL:[NSURL URLWithString:path] error:nil];
        self.player.delegate = self;
        [self.player play];
        NSLog(@"开始播放");
    }else{
        NSLog(@"no voice");
    }

声音播放也可以暂停恢复和停止

完整代码位置Github-VoiceDemo