前提・実現したいこと
AVFoundationを用いて音を入力し、それを出力するアプリを作っているのですが、最後のfunc playActのelse以降の soundPlayer.stop()でエラーが出てしまいました。エラーを解決できる方がいましたら教えていただけると幸いです。
発生している問題・エラーメッセージ
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
該当のソースコード
Swift4
1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController, AVAudioRecorderDelegate, AVAudioPlayerDelegate { 5 6 7 @IBOutlet weak var recordButton: UIButton! 8 @IBOutlet weak var playButton: UIButton! 9 10 var soundRecorder : AVAudioRecorder! 11 var soundPlayer : AVAudioPlayer! 12 13 var fileName : String = "audioFile.m4a" 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 setupRecorder() 19 playButton.isEnabled = false 20 21 } 22 23 func getDocumentsDirector() -> URL { 24 let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 25 return paths[0] 26 } 27 28 func setupRecorder(){ 29 let audioFilename = getDocumentsDirector().appendingPathComponent(fileName) 30 let recordSetting = [AVFormatIDKey : kAudioFormatAppleLossless, 31 AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue, 32 AVEncoderBitRateKey : 320000, 33 AVNumberOfChannelsKey : 2, 34 AVSampleRateKey : 44100.2] as [String : Any] 35 36 do { 37 soundRecorder = try AVAudioRecorder(url: audioFilename, settings: recordSetting) 38 soundRecorder.delegate = self 39 soundRecorder.prepareToRecord() 40 41 } catch { 42 print(error) 43 } 44 } 45 46 func setupPlayer(){ 47 let audioFilename = getDocumentsDirector().appendingPathComponent(fileName) 48 do { 49 soundPlayer = try AVAudioPlayer(contentsOf: audioFilename) 50 soundPlayer.delegate = self 51 soundPlayer.prepareToPlay() 52 soundPlayer.volume = 1.0 53 } catch { 54 print(error) 55 } 56 } 57 58 func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) { 59 playButton.isEnabled = true 60 } 61 62 func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { 63 recordButton.isEnabled = true 64 playButton.setTitle("Play", for: .normal) 65 } 66 67 68 69 @IBAction func recordAct(_ sender: Any) { 70 if recordButton.titleLabel?.text == "Record" { 71 soundRecorder.record() 72 recordButton.setTitle("Stop", for: .normal) 73 playButton.isEnabled = false 74 } else { 75 soundRecorder.stop() 76 recordButton.setTitle("Record", for: .normal) 77 playButton.isEnabled = false 78 } 79 80 } 81 82 @IBAction func playAct(_ sender: Any) { 83 if recordButton.titleLabel?.text == "Play" { 84 playButton.setTitle("Stop", for: .normal) 85 recordButton.isEnabled = false 86 setupPlayer() 87 soundPlayer.play() 88 } else { 89 90 //ここでエラー発生 91 soundPlayer.stop() 92 93 playButton.setTitle("Play", for: .normal) 94 recordButton.isEnabled = false 95 } 96 97 98 } 99 100 101}
試したこと
Xcodeのマイクのアクセシビリティが許可されてないかと思い確認したが、xcodeの項目がそもそもなかった。
セキュリティとプライバシー>プライバシー>マイク
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/22 16:58
2019/11/22 17:00
2019/11/22 17:10
2019/11/23 04:20
2019/11/23 08:45 編集