Skip to content

Commit

Permalink
feat(ios): Add ios config with audio categories. #396
Browse files Browse the repository at this point in the history
  • Loading branch information
llfbandit committed Oct 9, 2024
1 parent d25e64c commit 8485404
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 17 deletions.
2 changes: 1 addition & 1 deletion record/example/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
audioplayers_darwin: 877d9a4d06331c5c374595e46e16453ac7eafa40
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
record_darwin: df0a677188e5fed18472550298e675f19ddaffbe

PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048
Expand Down
16 changes: 8 additions & 8 deletions record_darwin/darwin/Classes/RecordConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,17 +67,13 @@ public class Device {
}
}

struct IosConfig {
init(map: [String: Any]) {}
}

#if os(iOS)
extension IosConfig {
let audioCategories: [AVAudioSession.CategoryOptions]
struct IosConfig {
let categoryOptions: [AVAudioSession.CategoryOptions]
let manageAudioSession: Bool

init(map: [String: Any]) {
let comps = map["audioCategories"] as? String
let comps = map["categoryOptions"] as? String
let options: [AVAudioSession.CategoryOptions]? = comps?.split(separator: ",").compactMap {
switch $0 {
case "mixWithOthers":
Expand All @@ -99,8 +95,12 @@ extension IosConfig {
default: nil
}
}
self.audioCategories = options ?? []
self.categoryOptions = options ?? []
self.manageAudioSession = map["manageAudioSession"] as? Bool ?? true
}
}
#else
struct IosConfig {
init(map: [String: Any]) {}
}
#endif
2 changes: 1 addition & 1 deletion record_darwin/ios/Classes/RecorderIOS.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ extension AudioRecordingDelegate {
let audioSession = AVAudioSession.sharedInstance()

do {
try audioSession.setCategory(.playAndRecord, options: AVAudioSession.CategoryOptions(config.iosConfig?.audioCategories ?? []))
try audioSession.setCategory(.playAndRecord, options: AVAudioSession.CategoryOptions(config.iosConfig?.categoryOptions ?? []))
} catch {
throw RecorderError.error(message: "Failed to start recording", details: "setCategory: \(error.localizedDescription)")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/// Constants that specify optional audio behaviors.
/// https://developer.apple.com/documentation/avfaudio/avaudiosession/categoryoptions
enum IosAudioCategories {
enum IosAudioCategoryOption {
mixWithOthers,
duckOthers,
allowBluetooth,
Expand Down
13 changes: 8 additions & 5 deletions record_platform_interface/lib/src/types/record_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,24 +114,27 @@ class AndroidRecordConfig {
}
}

///
/// iOS specific configuration for recording.
class IosRecordConfig {

/// Constants that specify optional audio behaviors.
/// https://developer.apple.com/documentation/avfaudio/avaudiosession/categoryoptions
final List<IosAudioCategories> audioCategories;
final List<IosAudioCategoryOption> categoryOptions;
/// Manage the shared AVAudioSession (defaults to `true`).
/// Set this to false if another plugin is already managing the AVAudioSession.
/// If false, audioCategories config will have no effect.
final bool manageAudioSession;

const IosRecordConfig({
this.audioCategories = const [IosAudioCategories.defaultToSpeaker, IosAudioCategories.allowBluetooth, IosAudioCategories.allowBluetoothA2DP],
this.categoryOptions = const [
IosAudioCategoryOption.defaultToSpeaker,
IosAudioCategoryOption.allowBluetooth,
IosAudioCategoryOption.allowBluetoothA2DP,
],
this.manageAudioSession = true,
});
Map<String, dynamic> toMap() {
return {
"audioCategories": audioCategories.map((e) => e.name).join(','),
"categoryOptions": categoryOptions.map((e) => e.name).join(','),
"manageAudioSession": manageAudioSession,
};
}
Expand Down
2 changes: 1 addition & 1 deletion record_platform_interface/lib/src/types/types.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export 'package:record_platform_interface/src/types/amplitude.dart';
export 'package:record_platform_interface/src/types/audio_encoder.dart';
export 'package:record_platform_interface/src/types/input_device.dart';
export 'package:record_platform_interface/src/types/ios_audio_category_option.dart';
export 'package:record_platform_interface/src/types/record_config.dart';
export 'package:record_platform_interface/src/types/record_state.dart';
export 'package:record_platform_interface/src/types/ios_audio_categories.dart';

0 comments on commit 8485404

Please sign in to comment.