如果没有录制音频,我想尝试确保按钮被禁用,以便应用程序不会因AVAudioPlayer为零而崩溃。
var soundPlayer1 = AVAudioPlayer()
这是我声明和初始化音频播放器的方式。
在viewDidLoad()函数下,我想要一个条件,当我将内容记录到AVAudioRecorder并将其设置为AVAudioPlayer时,我的条件将能够检查并启用播放按钮(如果没有记录,则播放按钮将被禁用)。
我已经尝试了多个与AVAudioPlayer和AVAudioRecorder相关联的内置函数,以查看录制前后哪些值保持不变但它们对我没有帮助(通过在录制前后不更改)或生成线程1:大概是EXC_BAD_ACCESS因为AVAudioPlayer尚未初始化为任何音频。
非常感谢任何帮助。谢谢!
编辑1
抱歉,忘了密码!
import UIKit
import AVFoundation
var url : NSURL!
var screenCounter = 0
var soundPlayer1 = AVAudioPlayer()
class Screen1: UIViewController, AVAudioRecorderDelegate, AVAudioPlayerDelegate {
@IBOutlet weak var recordBtn: UIButton!
@IBOutlet weak var playBtn: UIButton!
var soundRecorder : AVAudioRecorder!
var fileName = "audioFile0.aac"
override open func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override open func viewDidLoad() {
super.viewDidLoad()
if (screenCounter == 0){
setupRecorder()
playBtn.isEnabled = false
}
screenCounter += 1
}
func setupRecorder(){
let recordSettings = [ AVFormatIDKey : kAudioFormatMPEG4AAC
, AVEncoderAudioQualityKey : AVAudioQuality.max.rawValue, AVEncoderBitRateKey : 320000, AVNumberOfChannelsKey : 2, AVSampleRateKey : 44100.0 ] as [String : Any]
let _ : NSError?
let audioSession = AVAudioSession.sharedInstance()
do{
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
}catch{
print(error)
}
let url1 = getFileURL()
do{
soundRecorder = try AVAudioRecorder(url: url1 as URL, settings : recordSettings)
}catch{
print("Something went wrong")
}
soundRecorder.delegate = self
soundRecorder.prepareToRecord()
}
func getCacheDirectory() -> URL{
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
return paths[0]
}
func getFileURL() -> NSURL{
let pathURL = getCacheDirectory().appendingPathComponent(fileName)
let pathString = pathURL.path
let filePath = NSURL(fileURLWithPath : pathString)
return filePath
}
@IBAction func record(_ sender: UIButton) {
if sender.titleLabel?.text == "Record"{
setupRecorder()
soundRecorder.deleteRecording()
soundRecorder.record()
sender.setTitle("Stop", for : .normal)
playBtn.isEnabled = false
}else{
soundRecorder.stop()
sender.setTitle("Record", for : .normal)
playBtn.isEnabled = false
}
}
@IBAction func playSound(_ sender: UIButton) {
if sender.titleLabel?.text == "Play"{
recordBtn.isEnabled = false
sender.setTitle("Stop", for : .normal)
preparePlayer()
soundPlayer1.play()
}else{
soundPlayer1.stop()
sender.setTitle("Play", for : .normal)
}
}
func preparePlayer(){
let _ : NSError?
let url = getFileURL()
do{
soundPlayer1 = try AVAudioPlayer(contentsOf : url as URL)
}catch{
print(error)
}
soundPlayer1.delegate = self
soundPlayer1.prepareToPlay()
soundPlayer1.volume = 1.0 //Adjust volume here
}
open func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
playBtn.isEnabled = true
}
open func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
recordBtn.isEnabled = true
playBtn.setTitle("Play", for : .normal)
}
}