在模拟器中运行应用程序时需要征求使用麦克风的许可吗?

问题描述 投票:0回答:1

我使用AVAudioPlayer和AVAudioRecorder创建了一个简单的音频播放器/录音机。音频播放器可以按预期工作,但是即使它成功构建且没有任何错误,录音机似乎也无法记录或播放记录。我想知道是否需要麦克风的许可?我正在使用11.X版该代码在任何帮助下方均深表感谢。

import UIKit
import AVFoundation //must import AVFoundation

class ViewController: UIViewController {


    // create property called audioPlayer equal to player
    var audioPlayer : AVAudioPlayer?
    var audioRecorder : AVAudioRecorder?


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        //create the audio session
        let session = AVAudioSession.sharedInstance()

        //set category where we want it to happen (PlayAndRecord) try? = if it doesnt work then set it nil
        try? session.setCategory(AVAudioSession.Category.playAndRecord)

        //play any audio through device speaker
        try? session.overrideOutputAudioPort(.speaker)

        // set the session to active, if it doesnt work se it to nil
        try? session.setActive(true)

        //setup the recording and settings to where audio will be saved (Document folder on device) and set the name and file type (iloveaudio.mp3)

        if let basePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first {

            let paths = [basePath, "iloveaudioios.mp3"]
            if let audioURL = NSURL.fileURL(withPathComponents: paths) {

                //create a settings dictionary> orignally it's set to empty using ([:])
                var settings : [String : Any] = [:]
                //set the file type to mp3
                settings[AVFormatIDKey] = Int(kAudioFileMP3Type)
                //set the sample rate
                settings[AVSampleRateKey] = 44100.0
                //set number of channels
                settings[AVNumberOfChannelsKey] = 2
                // specify the path and settings using var and try to run the recorder if it faile set it to nil
             audioRecorder = try? AVAudioRecorder(url: audioURL, settings: settings)

                //prepare the recorder of ot fails set it to nil
                audioRecorder?.prepareToRecord()

            }
        }


        playerSetup(audioURL: nil)


                    }

     //which file to play if something is recorded
    func playerSetup(audioURL:URL?) {


        if audioURL == nil {
         if let audioPath = Bundle.main.path(forResource: "testaudio", ofType: "mp3") {
            let tempAudioURL = URL(fileURLWithPath: audioPath)
            audioPlayer = try? AVAudioPlayer(contentsOf: tempAudioURL)


            }
        } else {
            audioPlayer = try? AVAudioPlayer(contentsOf: audioURL!)



        }

            //check if our audio fille exist? and set it to the proerty audioPath
         audioPlayer?.prepareToPlay()



     //create audio player, make sure it not nil and if its not the prepare to play, then play






            }

    @IBAction func PlayPressed(_ sender: Any) {
        audioPlayer?.play()
    }

    @IBAction func Pausedpressed(_ sender: Any) {
        audioPlayer?.pause()
    }

    @IBAction func Stop(_ sender: Any) {
        audioPlayer?.stop()
        audioPlayer?.currentTime = 0
    }

    @IBAction func Record(_ sender: Any) {
        if let recorder = audioRecorder {
            if !recorder.isRecording {
               recorder.record()

            }

        }

    }



    @IBAction func StopRecord(_ sender: Any) {
      if let recorder = audioRecorder {
        if recorder.isRecording {
            recorder.stop()
            playerSetup(audioURL: recorder.url)


               }
            }
        }

}   
swift avaudioplayer avaudiorecorder
1个回答
0
投票

是,您需要在info.plist中添加许可权>

  • 转到项目的info.plist
  • 添加Privacy - Microphone Usage Description并将其设置为值YES(true)
  • enter image description here

设置后,当您第一次开始在您的应用中进行录制时,它会请求许可,Allow,那么您就已经设置好了!

© www.soinside.com 2019 - 2024. All rights reserved.