首页 > 其他分享 >录音功能iosSDK

录音功能iosSDK

时间:2024-12-04 14:44:23浏览次数:6  
标签:audioRecorder 功能 Int audioPlayer 录音 self func iosSDK public

//

//  Fast.swift

//  FastSwiftKit

//

//  Created by XX on 2023/9/7.

//

 

import AVFoundation

 

public class FastAudioManager {

    

    public static let shared = FastAudioManager()

    

    // MARK: 音频录制

    private var audioRecorder: AVAudioRecorder?

    private var audioSession: AVAudioSession = AVAudioSession.sharedInstance()

    private var maxtime: Int?

    var audioFilesURL:URL?

    

    /// 开始录音

    /// - Returns: URL

    public func startRecording(_ serverHost:String?,_ quality:String?,_ maxtime:Int?) -> URL?{

        let audioSession = AVAudioSession.sharedInstance()

        do {

            try audioSession.setCategory(.playAndRecord, mode: .default, options: [])

            try audioSession.setActive(true, options: [])

            let settings = [

                AVFormatIDKey: Int(kAudioFormatMPEG4AAC),

                AVSampleRateKey: Int(quality ?? "0"),

                AVNumberOfChannelsKey: 1,

                AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue

            ]

            let time = Date().timeIntervalSince1970

            audioFilesURL = documentDirectory.appendingPathComponent("\(Int(time)).m4a")

            audioRecorder = try AVAudioRecorder(url: audioFilesURL!, settings: settings)

            audioRecorder?.record()

            self.maxtime = maxtime

            

            Timer.scheduledTimer(withTimeInterval: 0, repeats: true) {[weak self] t in

                if Int(self?.audioRecorder?.currentTime ?? 0.0) >= Int(maxtime ?? 0){

                    print("录音时间到期")

                    self?.audioRecorder?.stop()

                    self?.audioRecorder = nil

                    t.invalidate()

                }

            }

            return audioFilesURL

        } catch {

            print("Failed to start recording")

            return nil

        }

    }

    

    public func getAudioRecorderCurrentTime() -> TimeInterval? {

        return audioRecorder?.currentTime

    }

    

    /// 停止录音

    public func stopRecording() {

        audioRecorder?.stop()

        audioRecorder = nil

        

    }

    

    

 

    // MARK: 播放音频

    var audioPlayer: AVAudioPlayer?

    

    /// 播放音频

    /// - Parameter audioURL: URL

    public func playAudio(audioURL: URL) {

        do {

            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [])

            try AVAudioSession.sharedInstance().setActive(true, options: [])

            

            if ((audioPlayer?.isPlaying) != nil) == true{

                audioPlayer?.stop()

            }

            

            audioPlayer = try AVAudioPlayer(contentsOf: audioURL)

            audioPlayer?.play()

        } catch {

            print("Failed to play audio file")

        }

    }

    

    /// 暂停

    public func pauseAudio() {

        audioPlayer?.pause()

    }

    

    /// 恢复

    public func resumeAudio() {

        audioPlayer?.play()

    }

    

    //

    public func getCurrentTime() -> TimeInterval? {

        return audioPlayer?.currentTime

    }

    

    public func getDuration() -> TimeInterval? {

        return audioPlayer?.duration

    }

}

 

extension FastAudioManager {

 

    

    /// 下载音频并播放 、、、、、、、

    /// - Parameter url: url网络地址

    func downloadAndPlay(form url:String){

        // 下载音频

//        FastNetWorking().download(url) { [weak self] fileUrl  in

//            self?.playAudio(audioURL: fileUrl)

//        } fai: { str in

//

//        }

    }

    

    func recordAndUplaod(to url:String){

//        if let fileUrl = self.startRecording(100){

//            // 上传音频

//            FastNetWorking().upload(url, fileUrl, nil) { str in

//

//            } fai: { fai in

//

//            }

//        }

    }

}

 

标签:audioRecorder,功能,Int,audioPlayer,录音,self,func,iosSDK,public
From: https://www.cnblogs.com/supersr/p/18586299

相关文章

  • 【StableDiffusion教程】 SD超实用功能——图生图 之 局部重绘
    StableDiffusion图生图(局部重绘):局部重绘:·在图生图界面中关于局部重绘有三个[标签页]·这三个标签页主要是蒙版的使用方式不同.局部重绘标签.图片可以通过上传,或者是从文生图发送到局部重绘.右边是局部重绘的画笔工具.·局部重绘中,画布和画笔大小有......
  • 基于 .NET 开发的多功能流媒体管理控制平台
    前言今天大姚给大家分享一个基于.NET开发且开源(MITLicense)的多功能流媒体管理控制平台:AKStream。项目介绍AKStream是一个基于.NET开发且开源(MITLicense)的、功能全面的流媒体管理控制平台,集成了GB28181、RTSP、RTMP、HTTP等设备的推拉流控制、PTZ控制、音视频文件录制管理、......
  • Expert电子实验室--嵌入式多功能调试器Exlink硬件分析
    哈哈,容我介绍一下,如果大家对电子感兴趣,可以看一下下面的图片,会经常更新优秀的原创文章。再次感谢每一个努力的电子爱好者。1前言开源链接:Exlink最好用的嵌入式多功能调试器大家好呀,在浏览网站的时候,突然看到这样的一个作品,瞬间眼前一亮。这个项目是Expert电子实验室设计的。......
  • MYSQL数据库配置登录超时退出功能
    my.ini配置文件添加如下配置:[mysqld]plugin_load_add=connection_control.dllconnection_control=FORCE_PLUS_PERMANENTconnection_control_failed_login_attempts=FORCE_PLUS_PERMANENTconnection_control_failed_connections_threshold=3connection_control_max_connec......
  • jQuery实现类似视频播放功能的图片播放器插件
    jqueryImagePlayer是一款可以像视频播放一样逐张播放图片的图片播放器JQUERY插件。当你需要介绍你的某个产品和项目的时候,这个插件就可以发挥它的强大作用。你可以将产品或项目的各个功能做成图片,然后使用该插件来逐帧播放。现在大多数的产品和项目介绍使用的都是gif图片或flas......
  • DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程......
  • DevExtreme JS & ASP.NET Core v24.2新功能预览 - 全新的聊天组件
    DevExtreme拥有高性能的HTML5/JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NETCore,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,到ASP.NETCore或Vue,DevExtreme包含全面的高性能和响应式UI小部件集合,可在传统Web和下一代移动应用程序中......
  • STM32单片机芯片与内部01 GPIO-通用输出与输入-架构、内部、介绍、功能
    目录一、GPIO架构1、GPIO简介2、架构(1)、二极管保护与上下拉电阻(2)P-MOS与N-MOS推挽与开漏(3)、输出数据寄存器(4)、复用功能输出(5)、输入数据寄存器(6)、复用功能输入(7)、模拟输入与输出二、GPIO工作模式1、输入模式(上拉、下拉、浮空)2、输出模式(推挽/开漏,上拉/下拉)3、复用......
  • 底部导航栏新增功能按键
    场景需求:在底部导航栏添加power案件,单击息屏,长按关机如下实现图借此需求,需要掌握技能:底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。比如放不下、顺序排列、坑点如何修改等修改-新增文件:新增\vendor\mediatek\proprietary\pac......
  • 鲁大师 6.1024 | 某大佬的最终绿化版,去除无用功能和广告
    鲁大师是一款知名的硬件检测软件,许多用户喜欢使用它来测试电脑性能。然而,原版软件中包含大量广告和不必要的功能。某大佬对鲁大师进行了绿化处理,精简了许多无用的功能,去除了广告,并确保退出后没有后台残留进程。该版本是大佬的最终完结版,具有以下特点:1.完整精简了功能区中......