提问人:Kanwarpreet Singh 提问时间:10/19/2023 最后编辑:jraufeisenKanwarpreet Singh 更新时间:11/20/2023 访问量:56
颤振音频无法在连接的音频设备(Airpods/蓝牙扬声器)上播放,而仅在手机主扬声器上播放
Flutter audio not playing on connected audio device(Airpods/bluetooth speakers) but only on phone main speaker
问:
Pubspec.Yaml 文件
name: relationsguiden
description: App.
version: 1.0.0+2
environment:
sdk: ">=2.7.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
shared_preferences: ^2.0.13
http: ^0.13.4
url_launcher: ^6.0.20
path_provider: ^2.0.9
in_app_purchase: ^3.0.2
signalr_client: ^0.1.6
audioplayers: ^4.1.0
flutter_local_notifications: ^12.0.3
firebase_messaging: ^14.0.4
cupertino_icons: ^1.0.5
dev_dependencies:
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
assets:
- images/
运行音频文件的代码。
void _clickedPlayIcon(IntroTileType type) async {
if (this._currentType == type) {
if (this.audioPlayer.state == PlayerState.paused) {
await this.audioPlayer.resume();
setState(() => this._playerState = App.PlayerState.playing);
return;
} else if (this.audioPlayer.state == PlayerState.playing) {
await this.audioPlayer.pause();
setState(() => this._playerState = App.PlayerState.paused);
return;
}
}
if (this._currentType != null) {
await this.audioPlayer.stop();
}
String url;
if (type == IntroTileType.cheated) url = 'https://dev.recaptureit.se/relationsguiden/relationsguidenapi/Sound/Introduction/letDown.mp3';
if (type == IntroTileType.letDown) url = 'https://dev.recaptureit.se/relationsguiden/relationsguidenapi/Sound/Introduction/letDown.mp3';
if (type == IntroTileType.prevent) url = 'https://dev.recaptureit.se/relationsguiden/relationsguidenapi/Sound/Introduction/letDown.mp3';
if (type == IntroTileType.suspect) url = 'https://dev.recaptureit.se/relationsguiden/relationsguidenapi/Sound/Introduction/letDown.mp3';
if (type == IntroTileType.responsibility) url = 'https://dev.recaptureit.se/relationsguiden/relationsguidenapi/Sound/Introduction/letDown.mp3';
if (url == null) return;
setState(() {
this._currentType = type;
this._playerState = App.PlayerState.loading;
});
await audioPlayer.play(UrlSource(url));
return;
}
flutter doctor
总结:
[✓] Flutter (Channel stable, 3.7.7, on macOS 13.3.1 22E261 darwin-arm64, locale en-IN)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
[✓] Xcode - develop for iOS and macOS (Xcode 14.2)
[✓] Chrome - develop for the web
[✓] Android Studio
[✓] Android Studio (version 2022.3)
[✓] Android Studio (version 3.5)
[✓] Connected device (3 available)
[✓] HTTP Host Availability
• No issues found!
音频问题仅出现在 iOS 上,而不是 Android 上。
答:
0赞
jraufeisen
11/20/2023
#1
你最好的办法是尝试全局,参见问题 #1545 中的讨论。AudioContext
AudioPlayer.global.setGlobalAudioContext(
AudioContext(
iOS: AudioContextIOS(
category: AVAudioSessionCategory.playAndRecord,
options: const [
AVAudioSessionOptions.mixWithOthers,
],
),
),
);
目前有一个关于允许在不同音频设备之间切换的未解决问题 #1401。
0赞
jbryanh
11/20/2023
#2
您可以使用包audio_session来设置会话,如果不需要录制,请设置会话:
final session = await AudioSession.instance;
await session.configure(AudioSessionConfiguration(
avAudioSessionCategory: AVAudioSessionCategory.playback,
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,
));
最重要的是
avAudioSessionCategory: AVAudioSessionCategory.playback,
其余的取决于您的喜好和需求。如果您还需要录制,取决于您要从哪里录制。
评论