如何使用Flutter使用audio_service调节音量

问题描述 投票:0回答:1

如何使用 audio_service 包调整 音频音量?我在 AudioHandler 类中没有看到任何可以执行此操作的方法。

例如,如何使用 Flutter UI 上的简单按钮调节音量,和/或在 5 秒内逐渐改变音量以淡入或淡出?

通过使用 setVolume 函数,这些操作对于 just_audio 来说很容易,但我不知道如何将其与 audio_service 集成。

这是我的完整性代码。

class MyAudioHandler extends BaseAudioHandler {
  final _player = AudioPlayer();

  MyAudioHandler() {
    _player.playbackEventStream.map(updatePlaybackState).pipe(playbackState);
  }

  @override
  Future<void> play() async {
    await _player.play();
    return super.play();
  }

  @override
  Future<void> playMediaItem(MediaItem item) async {

    mediaItem.add(item);
    _player.setAudioSource(AudioSource.asset(item.id));
    await _player.play();
    return super.playMediaItem(item);
  }

  @override
  Future<void> stop() async {
    await _player.stop();
  }

  PlaybackState updatePlaybackState(PlaybackEvent event) {
    return PlaybackState(
      processingState: const {
        ProcessingState.idle: AudioProcessingState.idle,
        ProcessingState.loading: AudioProcessingState.loading,
        ProcessingState.buffering: AudioProcessingState.buffering,
        ProcessingState.ready: AudioProcessingState.ready,
        ProcessingState.completed: AudioProcessingState.completed,
      }[_player.processingState]!,
      playing: _player.playing,
      updatePosition: _player.position,
      repeatMode: AudioServiceRepeatMode.all
    );
  }
}


    return Scaffold(
      body: StreamBuilder<PlaybackState>(
          stream: _audioHandler.playbackState,
          builder: (context, snapshot) {
            bool isPlaying = snapshot.data?.playing ?? false;

            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                if (isPlaying)
                  ElevatedButton(
                    onPressed: () {
                      _audioHandler.stop();
                    },
                    child: Text('Stop'),
                  )
                else ...[
                  ElevatedButton(
                    onPressed: () async {
                      const item = MediaItem(
                        title: 'Sea',
                        id: 'assets/audio/seaside.mp3',
                      );

                      _audioHandler.playMediaItem(item);
                    },
                    child: Text('Play Seaside'),
                  ),
                ],
                Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    //// HOW TO ADJUST VOLUME FROM BUTTONS???

                    IconButton(onPressed: () {}, icon: Icon(Icons.add)),
                    IconButton(onPressed: () {}, icon: Icon(Icons.remove)),
                  ],
                ),
              ],
            );
          }),
    );
flutter audio volume just-audio audio-service
1个回答
0
投票

AudioPlayer
提供了接受0-1的
setVolume
方法。

    player.setVolume(1.0);
© www.soinside.com 2019 - 2024. All rights reserved.