### Configure Audio Session for Music Source: https://github.com/ryanheise/audio_session/blob/master/README.md Sets reasonable default audio session configurations for playing music. This is a common use case for media playback applications. ```dart final session = await AudioSession.instance; await session.configure(AudioSessionConfiguration.music()); ``` -------------------------------- ### iOS Microphone Usage Description Source: https://github.com/ryanheise/audio_session/blob/master/README.md Specifies the required key and string value in the `Info.plist` file for iOS applications that access the microphone. This provides a user-facing explanation for microphone usage. ```xml NSMicrophoneUsageDescription ... explain why the app uses the microphone here ... ``` -------------------------------- ### Configure Audio Session for Speech Source: https://github.com/ryanheise/audio_session/blob/master/README.md Sets reasonable default audio session configurations for playing podcasts or audiobooks. This is suitable for applications focused on spoken content. ```dart final session = await AudioSession.instance; await session.configure(AudioSessionConfiguration.speech()); ``` -------------------------------- ### Open Xcode Project Source: https://github.com/ryanheise/audio_session/blob/master/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md Opens the Flutter project's Xcode workspace to manage launch screen assets. This allows for visual management of assets within Xcode. ```shell open ios/Runner.xcworkspace ``` -------------------------------- ### Configure Custom Audio Session Source: https://github.com/ryanheise/audio_session/blob/master/README.md Allows for a highly customized audio session configuration, specifying detailed properties for both iOS (AVAudioSession) and Android (AudioManager) platforms. ```dart final session = await AudioSession.instance; await session.configure(AudioSessionConfiguration( avAudioSessionCategory: AVAudioSessionCategory.playAndRecord, avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.allowBluetooth, avAudioSessionMode: AVAudioSessionMode.spokenAudio, avAudioSessionRouteSharingPolicy: AVAudioSessionRouteSharingPolicy.defaultPolicy, avAudioSessionSetActiveOptions: AVAudioSessionSetActiveOptions.none, androidAudioAttributes: const AndroidAudioAttributes( contentType: AndroidAudioContentType.speech, flags: AndroidAudioFlags.none, usage: AndroidAudioUsage.voiceCommunication, ), androidAudioFocusGainType: AndroidAudioFocusGainType.gain, androidWillPauseWhenDucked: true, )); ``` -------------------------------- ### Configure SwiftPM for Audio Session Microphone Source: https://github.com/ryanheise/audio_session/blob/master/README.md For Swift Package Manager, clean the Flutter project and set the `AUDIO_SESSION_MICROPHONE` environment variable before running your build command. This ensures the correct settings are picked up. ```shell flutter clean ``` ```shell AUDIO_SESSION_MICROPHONE=1 flutter run ``` -------------------------------- ### Activate Audio Session Source: https://github.com/ryanheise/audio_session/blob/master/README.md Activates the audio session, a prerequisite for playing or recording audio. It calls platform-specific APIs like `AVAudioSession.setActive` on iOS and `AudioManager.requestAudioFocus` on Android. The method returns `true` if activation is successful, allowing audio playback to proceed. ```dart // Activate the audio session before playing or recording audio. if (await session.setActive(true)) { // Now play or record audio. } else { // The request was denied and the app should not play audio // e.g. a phonecall is in progress. } ``` -------------------------------- ### Configure Audio Player Interruption Handling Source: https://github.com/ryanheise/audio_session/blob/master/README.md Allows developers to configure how an `AudioPlayer` instance handles audio interruptions. Setting `handleInterruptions` to `false` disables the plugin's default interruption handling, enabling custom logic. ```dart player = AudioPlayer(handleInterruptions: false); ``` -------------------------------- ### Observe Device Additions and Removals Source: https://github.com/ryanheise/audio_session/blob/master/README.md Monitors changes in connected audio devices by listening to the `session.devicesChangedEventStream`. It logs which audio devices have been added or removed from the system. ```dart session.devicesChangedEventStream.listen((event) { print('Devices added: ${event.devicesAdded}'); print('Devices removed: ${event.devicesRemoved}'); }); ``` -------------------------------- ### Configure CocoaPods for Audio Session Microphone Source: https://github.com/ryanheise/audio_session/blob/master/README.md Modify your `ios/Podfile` to include specific build settings for the audio session microphone. This involves adding a preprocessor definition to the target's build configurations. ```ruby post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [ '$(inherited)', 'AUDIO_SESSION_MICROPHONE=1' ] end end end ``` -------------------------------- ### Listen for Android Audio Attributes Changes Source: https://github.com/ryanheise/audio_session/blob/master/README.md For plugin authors, this snippet demonstrates how to listen to the `audioSession.configurationStream` to receive updates on Android-specific audio attributes. It maps configuration changes to `AndroidAudioAttributes` and applies them to an audio track via platform channel invocation. ```dart audioSession.configurationStream .map((conf) => conf?.androidAudioAttributes) .distinct() .listen((attributes) { // apply the attributes to this Android audio track _channel.invokeMethod("setAudioAttributes", attributes.toJson()); }); ``` -------------------------------- ### Activate Audio Session Source: https://github.com/ryanheise/audio_session/blob/master/README.md Activates the application's shared audio session, informing the operating system that the app is actively playing audio. This is typically handled by audio plugins but can be invoked manually if needed. ```dart // Activate the audio session before playing audio. if (await session.setActive(true)) { // Now play audio. } else { // The request was denied and the app should not play audio } ``` -------------------------------- ### Observe Audio Session Interruptions Source: https://github.com/ryanheise/audio_session/blob/master/README.md Listens to the `session.interruptionEventStream` to react to audio interruptions from other apps. It handles different interruption types like ducking or pausing, and manages resuming or unducking when the interruption ends. ```dart session.interruptionEventStream.listen((event) { if (event.begin) { switch (event.type) { case AudioInterruptionType.duck: // Another app started playing audio and we should duck. break; case AudioInterruptionType.pause: case AudioInterruptionType.unknown: // Another app started playing audio and we should pause. break; } } else { switch (event.type) { case AudioInterruptionType.duck: // The interruption ended and we should unduck. break; case AudioInterruptionType.pause: // The interruption ended and we should resume. case AudioInterruptionType.unknown: // The interruption ended but we should not resume. break; } } }); ``` -------------------------------- ### Observe Headphone Unplug Events Source: https://github.com/ryanheise/audio_session/blob/master/README.md Subscribes to the `session.becomingNoisyEventStream` to detect when the user unplugs headphones. This allows the application to pause audio playback or lower the volume gracefully. ```dart session.becomingNoisyEventStream.listen((_) { // The user unplugged the headphones, so we should pause or lower the volume. }); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.