#ios #frameworks #swift3 #audio-recording
#iOS #фреймворки #swift3 #аудиозапись
Вопрос:
Я создаю фреймворк для записи звука, он компилируется правильно. Когда я использую эту платформу в проекте, файл записи создается в папке documents, как указано в framework, но его размер остается на уровне 4 КБ и не увеличивается, и в файле нет звука. Я дал 30 секунд для записи.Я использовал AVFoundation для записи звука, и тот же код работает, если я использую его непосредственно в своем проекте, но вызов кода через специально созданный фреймворк не работает.
public func startRecording() {
do {
if (recordingSession != nil) {
return
}
recordingSession = AVAudioSession.sharedInstance()
try recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try recordingSession.setActive(true)
recordingSession.requestRecordPermission() { allowed in
DispatchQueue.main.async {
if allowed {
print("allowed")
let audioFilename = self.getDocumentsDirectory().appendingPathComponent("recording.caf")
print(audioFilename)
let settings = [
AVFormatIDKey: Int(kAudioFormatAppleIMA4),
AVSampleRateKey: 16000,
AVNumberOfChannelsKey: 1,
AVLinearPCMBitDepthKey: 16,
AVLinearPCMIsBigEndianKey: 0,
AVLinearPCMIsFloatKey: 0
]
do {
self.audioRecorder = try AVAudioRecorder(url: audioFilename, settings: settings)
self.audioRecorder.delegate = self
self.audioRecorder.isMeteringEnabled = true
let audioHWAvailable = self.recordingSession.isInputAvailable
if !audioHWAvailable
{
print("no audio input available")
return
}
UIApplication.shared.beginReceivingRemoteControlEvents()
self.audioRecorder.record(forDuration: 30)
if self.audioRecorder.prepareToRecord()
{
print("Recording started")
self.audioRecorder.record()
}
} catch {
self.finishRecording()
}
} else {
print("failed to record!")
}
}
}
} catch {
print("failed to record!")
}
}
У меня есть этот метод startRecording в классе framework, который я вызываю из своего проекта.
РЕДАКТИРОВАТЬ: когда я добавляю таймер после строки self.AudioRecorder.record(), запись работает, но я не понимаю причины.
Ответ №1:
Наконец я нашел решение, обратившись за помощью в службу поддержки Apple.
Вызов startRecording() через глобальную переменную класса AudioRecording работал без добавления таймера.