実現したいこと
マイクの画像を
・タップすると、録音した音声が再生。
・もう一度タップで停止。
・長押し中は、音声の録音。
・長押し解除で、録音終了。
起こっている問題
1.タップで再生中、待機中のラベルの変化はあるが、長押し後3.になる。
2.マイクの画像を長押ししているが、録音が始まらない。(ラベルの表示も録音中とならない)
3.長押し後、タップすると、ラベルの表示(再生中や待機中)が変らない、再生されない。
コード
swift
1import UIKit 2import AVFoundation 3 4class ViewController: UIViewController,AVAudioRecorderDelegate,AVAudioPlayerDelegate { 5 6 @IBOutlet var record: UILongPressGestureRecognizer! 7 8 @IBOutlet weak var label: UILabel! 9 10 @IBOutlet var play: UITapGestureRecognizer! 11 12 var audioRecorder: AVAudioRecorder! 13 var audioPlayer: AVAudioPlayer! 14 var isRecording = false 15 var isPlaying = false 16 17 18 override func viewDidLoad() { 19 super.viewDidLoad() 20 21 } 22 23 24 @IBAction func record(_ sender: UILongPressGestureRecognizer) { 25 print("record") 26 27 if !isRecording{ 28 let session = AVAudioSession.sharedInstance() 29 try! session.setCategory(AVAudioSession.Category.playAndRecord) 30 31 try! session.setActive(true) 32 let settings = [ 33 AVFormatIDKey: Int(kAudioFormatMPEG4AAC), 34 35 AVSampleRateKey: 44100, 36 AVNumberOfChannelsKey: 2, 37 AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue] 38 39 audioRecorder = try! AVAudioRecorder(url: getURL(), settings: settings) 40 audioRecorder.delegate = self 41 audioRecorder.record() 42 isRecording = true 43 label.text = "録音中" 44 record.isEnabled = false 45 play.isEnabled = false 46 }else{ 47 audioRecorder.stop() 48 isRecording = false 49 label.text = "待機中" 50 play.isEnabled = true 51 } 52 } 53 54 func getURL() -> URL{ 55 let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) 56 let docsDirect = paths[0] 57 let url = docsDirect.appendingPathComponent("recording.m4a") 58 return url 59 } 60 61 62 @IBAction func play(_ sender: UITapGestureRecognizer) { 63 print("play") 64 if !isPlaying{ 65 audioPlayer = try! AVAudioPlayer(contentsOf: getURL()) 66 audioPlayer.delegate = self 67 audioPlayer.play() 68 isPlaying = true 69 label.text = "再生中" 70 record.isEnabled = false 71 }else{ 72 audioPlayer.stop() 73 isPlaying = false 74 label.text = "待機中" 75 record.isEnabled = true 76 } 77 } 78 79 80} 81 82
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。