Я хочу создать что-то наподобие приложения для слухового аппарата, в котором, когда я нажимаю кнопку UIB «startRecording», она непрерывно записывает то, что я говорю, и одновременно воспроизводит его мне одновременно в наушниках.По сути, это помогает людям с нарушениями слуха лучше и громче слышать звуки из окружающей среды.
Я пытаюсь реализовать это с помощью AVAudioKit, когда AudioRecorder и AudioPlayer работают вместе с одним и тем же путем к файлу"filename", в цикле while.
Я получаю ошибку для строки: audioPlayer.delegate = self
Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения.
@IBOutlet weak var startRecording: UIButton!
var recordingSession : AVAudioSession!
var audioRecorder : AVAudioRecorder!
var audioPlayer : AVAudioPlayer!
var fileNameString : String = "test.m4a"
@IBAction func buttonPressed(_ sender: Any) {
print("button pressed")
let filename = getDirectory().appendingPathComponent("\(fileNameString)")
if audioRecorder == nil{ // DAF needs to be started
let settings = [AVFormatIDKey: Int(kAudioFormatAppleLossless),
AVEncoderAudioQualityKey: AVAudioQuality.max.rawValue,
AVEncoderBitRateKey: 320000,
AVNumberOfChannelsKey: 1,
AVSampleRateKey: 12000.0] as [String : Any]
do{
audioRecorder = try AVAudioRecorder(url: filename, settings: settings)
audioRecorder.delegate = self
//audioRecorder.record()
do{
audioPlayer = try AVAudioPlayer(contentsOf: filename, fileTypeHint: nil)
}
catch let error{
print("\(error)")
}
audioPlayer.delegate = self
audioPlayer.prepareToPlay()
while true {
audioRecorder.record()
sleep(1)
audioPlayer.play()
}
//startRecording.setTitle("Stop ", for: .normal)
} catch{
print ("failed")
}
}
else { // DAF started, needs to stop
audioRecorder.stop()
audioRecorder = nil
startRecording.setTitle("Start", for: .normal)
playRecording()
}