신속한 iOS 앱을 제작 중이며 클라이언트가 오디오 녹음 문제를 반환했습니다. 기본적으로 아무 것도 녹음하지 않습니다. 그는 ios 9.x가 설치된 iPhone 5/5에서 테스트를 마쳤습니다. 사용 권한을 확인하고 전화에 충분한 공간이 있는지 여부는 문제가 아닙니다.신속한 오디오 녹음
개인적으로 시뮬레이터에서 ios 10.x 및 iphone 5가있는 iphone 6s 장치로 테스트 한 결과 기록이 작동합니다. 누구든지 전에 이런 일이 생기거나 어쩌면 나는 잘못을 저질렀습니다.
앱이 수행하는 기능에 여러 가지 설명을 추가했습니다.
protocol RecordAndPlayManagerDelegate : class{
func recorderDidStopRecording()
}
class RecordAndPlayManager: NSObject, AVAudioRecorderDelegate {
var soundRecorder: AVAudioRecorder!
let recordSettings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
class func directoryURL() -> URL? {
let fileManager = FileManager.default
let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
let documentDirectory = urls[0] as URL
let soundURL = documentDirectory.appendingPathComponent("recording.m4a")
return soundURL
}
//calling this from outside to get the audio
class func getLocalOrRemoteRecording(_ recordingID : String!) -> URL?{
let fileManager = FileManager.default
let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
let documentDirectory = urls[0] as URL
let soundURL = documentDirectory.appendingPathComponent(recordingID)
if (fileManager.fileExists(atPath: soundURL.path)){
return soundURL
}
let path = kBaseServerURLNOPORT + "data/" + recordingID
let url = URL(string: path)
return url
}
//called from outside, recordingID -> name of the file
class func storeRecording(_ recordingID : String!) -> URL? {
let fileManager = FileManager.default
let urls = fileManager.urls(for: .documentDirectory, in: .userDomainMask)
let documentDirectory = urls[0] as URL
let soundURL = documentDirectory.appendingPathComponent("recording.m4a")
let data = try? Data(contentsOf: soundURL)
//data here has only 28bytes and from this I know it didn't record. In my tests, I always get at least 20000 bytes.
let newSoundURL = documentDirectory.appendingPathComponent(recordingID)
try? data?.write(to: newSoundURL, options: [.atomic])
do {
try FileManager.default.removeItem(at: soundURL)
} catch _ {
print("failed to delete file")
return newSoundURL
}
return newSoundURL
}
//called on viewDidLoad in another screen
func setupRecorder() {
let url = DRMessageRecordAndPlayManager.directoryURL()!
do {
try self.soundRecorder = AVAudioRecorder(url: url, settings: self.recordSettings)
} catch _ {
return
}
soundRecorder.delegate = self
soundRecorder.prepareToRecord()
}
//calling this from outside to start recording
func startRecording() {
if !self.soundRecorder.isRecording {
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try audioSession.setActive(true)
soundRecorder.record(forDuration: 15)
} catch {
}
}
}
//called from outside when I hit stop
func stopRecording() {
self.soundRecorder.stop()
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setActive(false)
} catch {
}
}
func audioRecorderDidFinishRecording(_ recorder: AVAudioRecorder, successfully flag: Bool) {
self.delegate?.recorderDidStopRecording()
}
}
오디오 녹음 최저 자습서 : https://iosdevcenters.blogspot.com/2016/05/audio-recording-and-playing-in-swift-30.html –