Some audio recording fixes
This commit is contained in:
parent
55e3a3008e
commit
6a53f7d953
@ -683,7 +683,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 19;
|
CURRENT_PROJECT_VERSION = 20;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
@ -705,7 +705,7 @@
|
|||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = AutoCat/AutoCat.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 19;
|
CURRENT_PROJECT_VERSION = 20;
|
||||||
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
DEVELOPMENT_TEAM = 46DTTB8X4S;
|
||||||
INFOPLIST_FILE = AutoCat/Info.plist;
|
INFOPLIST_FILE = AutoCat/Info.plist;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
|
||||||
|
|||||||
@ -75,7 +75,5 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
|||||||
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
||||||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -173,6 +173,8 @@ class CheckController: UIViewController, MaskedTextFieldDelegateListener, UITabl
|
|||||||
}
|
}
|
||||||
updateAction.image = UIImage(systemName: "arrow.2.circlepath")
|
updateAction.image = UIImage(systemName: "arrow.2.circlepath")
|
||||||
updateAction.backgroundColor = .systemBlue
|
updateAction.backgroundColor = .systemBlue
|
||||||
return UISwipeActionsConfiguration(actions: [updateAction])
|
let configuration = UISwipeActionsConfiguration(actions: [updateAction])
|
||||||
|
configuration.performsFirstActionWithFullSwipe = false
|
||||||
|
return configuration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -115,6 +115,7 @@ class RecordsController: UIViewController, UITableViewDelegate {
|
|||||||
do {
|
do {
|
||||||
let alert = UIAlertController(title: "Recording...", message: nil, preferredStyle: .alert)
|
let alert = UIAlertController(title: "Recording...", message: nil, preferredStyle: .alert)
|
||||||
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in self.recorder?.cancelRecording() }))
|
alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: { _ in self.recorder?.cancelRecording() }))
|
||||||
|
alert.addAction(UIAlertAction(title: "Done", style: .default, handler: { _ in self.recorder?.stopRecording() }))
|
||||||
self.present(alert, animated: true)
|
self.present(alert, animated: true)
|
||||||
|
|
||||||
let date = Date()
|
let date = Date()
|
||||||
@ -235,7 +236,9 @@ class RecordsController: UIViewController, UITableViewDelegate {
|
|||||||
delete.image = UIImage(systemName: "trash")
|
delete.image = UIImage(systemName: "trash")
|
||||||
|
|
||||||
let actions = record.number == nil ? [delete, action] : [delete, check, action]
|
let actions = record.number == nil ? [delete, action] : [delete, check, action]
|
||||||
return UISwipeActionsConfiguration(actions: actions)
|
let configuration = UISwipeActionsConfiguration(actions: actions)
|
||||||
|
configuration.performsFirstActionWithFullSwipe = false
|
||||||
|
return configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
func moreActions(for record: AudioRecord, cell: UITableViewCell) {
|
func moreActions(for record: AudioRecord, cell: UITableViewCell) {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import UIKit
|
import UIKit
|
||||||
import os.log
|
import os.log
|
||||||
|
import AVFoundation
|
||||||
|
|
||||||
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||||
|
|
||||||
@ -56,6 +57,12 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
|||||||
// Called as the scene transitions from the foreground to the background.
|
// Called as the scene transitions from the foreground to the background.
|
||||||
// Use this method to save data, release shared resources, and store enough scene-specific state information
|
// Use this method to save data, release shared resources, and store enough scene-specific state information
|
||||||
// to restore the scene back to its current state.
|
// to restore the scene back to its current state.
|
||||||
|
|
||||||
|
do {
|
||||||
|
try AVAudioSession.sharedInstance().setActive(false)
|
||||||
|
} catch {
|
||||||
|
print("sceneDidEnterBackground failed to deactivate audio session: \(error.localizedDescription)")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
|
func windowScene(_ windowScene: UIWindowScene, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void) {
|
||||||
|
|||||||
@ -37,7 +37,7 @@ class AudioPlayer: NSObject, AVAudioPlayerDelegate {
|
|||||||
try AVAudioSession.sharedInstance().setActive(false)
|
try AVAudioSession.sharedInstance().setActive(false)
|
||||||
self.state.accept(.paused)
|
self.state.accept(.paused)
|
||||||
} else {
|
} else {
|
||||||
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker])
|
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.duckOthers])
|
||||||
try AVAudioSession.sharedInstance().setActive(true)
|
try AVAudioSession.sharedInstance().setActive(true)
|
||||||
player.play()
|
player.play()
|
||||||
self.state.accept(.playing)
|
self.state.accept(.playing)
|
||||||
|
|||||||
@ -59,7 +59,6 @@ class Recorder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func startRecording(to file: URL, completion: @escaping (String) -> Void) throws {
|
func startRecording(to file: URL, completion: @escaping (String) -> Void) throws {
|
||||||
let inFormat = self.engine.inputNode.outputFormat(forBus: 0)
|
|
||||||
guard let aac = AVAudioFormat(settings: self.recordingSettings) else {
|
guard let aac = AVAudioFormat(settings: self.recordingSettings) else {
|
||||||
throw CocoaError.error("Recording error", suggestion: "Format not supported")
|
throw CocoaError.error("Recording error", suggestion: "Format not supported")
|
||||||
}
|
}
|
||||||
@ -72,6 +71,7 @@ class Recorder {
|
|||||||
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [])
|
try AVAudioSession.sharedInstance().setCategory(.playAndRecord, mode: .default, options: [])
|
||||||
try AVAudioSession.sharedInstance().setActive(true)
|
try AVAudioSession.sharedInstance().setActive(true)
|
||||||
|
|
||||||
|
let inFormat = self.engine.inputNode.outputFormat(forBus: 0)
|
||||||
ExtAudioFileSetProperty(fileRef, kExtAudioFileProperty_ClientDataFormat, UInt32(MemoryLayout<AudioStreamBasicDescription>.size), inFormat.streamDescription)
|
ExtAudioFileSetProperty(fileRef, kExtAudioFileProperty_ClientDataFormat, UInt32(MemoryLayout<AudioStreamBasicDescription>.size), inFormat.streamDescription)
|
||||||
|
|
||||||
self.engine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: inFormat) { buffer, time in
|
self.engine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: inFormat) { buffer, time in
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user