首页 技术 正文
技术 2022年11月18日
0 收藏 605 点赞 4,456 浏览 3555 个字

1,技术介绍

(1)AVFoundation.framework框架提供了AVAudioRecorder类。它可以实现录音功能。

(2)而使用该框架的AVAudioPlayer类,可以实现声音的播放。2,下面制作一个录音机样例(1)按住录音按钮则开始录音,松开则停止录音。录音文件保存在用户文件夹下。(2)录音过程中会实时显示声音的音量大小(这个可以用来做声音脉冲图,获得更好的展示效果)(3)点击播放录音则可播放录制的声音文件。3,效果图如下:Swift – 制作一个录音机(声音的录制与播放)4,代码如下:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 import UIKitimport AVFoundation class ViewController: UIViewController {         var recorder:AVAudioRecorder? //录音器    var player:AVAudioPlayer? //播放器    var recorderSeetingsDic:[NSObject:AnyObject]? //录音器设置参数数组    var volumeTimer:NSTimer! //定时器线程,循环监测录音的音量大小    var aacPath:String? //录音存储路径         @IBOutlet weak var volumLab: UILabel! //显示录音音量     override func viewDidLoad() {        super.viewDidLoad()                 //初始化录音器        let session:AVAudioSession = AVAudioSession.sharedInstance()        //用于获取失败原因        var error:NSError?        //设置录音类型        session.setCategory(AVAudioSessionCategoryPlayAndRecord, error: &error)        //设置支持后台        session.setActive(true, error: &error)        //获取Document目录        let docDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,            .UserDomainMask, true)[0] as! String        //组合录音文件路径        aacPath = docDir + "/play.aac"        //初始化字典并添加设置参数        recorderSeetingsDic = Dictionary()        recorderSeetingsDic!.updateValue(NSNumber(long: kAudioFormatMPEG4AAC), forKey: AVFormatIDKey)        //录音器每秒采集的录音样本数        recorderSeetingsDic!.updateValue(NSNumber(long: 1000), forKey: AVSampleRateKey)        //录音的声道数,立体声为双声道        recorderSeetingsDic!.updateValue(NSNumber(long: 2), forKey: AVNumberOfChannelsKey)        //采样位数        recorderSeetingsDic!.updateValue(NSNumber(long: 8), forKey: AVLinearPCMBitDepthKey)        //大端还是小段,是内存的组织方式        recorderSeetingsDic!.updateValue(NSNumber(bool: false), forKey: AVLinearPCMIsBigEndianKey)        //采样信号是整数还是浮点        recorderSeetingsDic!.updateValue(NSNumber(bool: false), forKey: AVLinearPCMIsFloatKey)            }     override func didReceiveMemoryWarning() {        super.didReceiveMemoryWarning()    }     //按下录音    @IBAction func downAction(sender: AnyObject) {        var error:NSError?        //初始化录音器        recorder = AVAudioRecorder(URL: NSURL(string: aacPath!),            settings: recorderSeetingsDic, error: &error)        if recorder != nil {            //开启仪表计数功能            recorder!.meteringEnabled = true            //准备录音            recorder!.prepareToRecord()            //开始录音            recorder!.record()            //启动定时器,定时更新录音音量            volumeTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self,                selector: "levelTimer", userInfo: nil, repeats: true)        }    }     //松开按钮,结束录音    @IBAction func upAction(sender: AnyObject) {        //停止录音        recorder?.stop()        //录音器释放        recorder = nil        //暂停定时器        volumeTimer.invalidate()        volumeTimer = nil        volumLab.text = "录音音量:0"    }         //播放录制的声音    @IBAction func playAction(sender: AnyObject) {        var error:NSError?        //播放        player = AVAudioPlayer(contentsOfURL: NSURL(string: aacPath!), error: &error)        if player == nil {            print("播放失败:\(error?.description)")        }else{            player?.play()        }    }         //定时检测录音音量    func levelTimer(){        recorder!.updateMeters() // 刷新音量数据        let averageV:Float = recorder!.averagePowerForChannel(0) //获取音量的平均值        let maxV:Float = recorder!.peakPowerForChannel(0) //获取音量最大值        let lowPassResult:Double = pow(Double(10), Double(0.05*maxV))        volumLab.text = "录音音量:\(lowPassResult)"    }}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848