【问题标题】:How to play multiple audio files simultaniously in flutter如何在颤动中同时播放多个音频文件
【发布时间】:2021-01-09 17:06:16
【问题描述】:

我一直在尝试同时运行多个音频文件,每个文件都有一个单独的静音按钮。我试过 AudioPlayer Flutter 插件。 我尝试了以下代码,但它使文件一个接一个地运行,而不是同时运行。
请帮忙!!

  Future play() async {
    await audioPlayer.play(url);
    await audioPlayer2.play(url2);
    setState(() {
      playerState = AudioPlayerState.PLAYING;
    });
  }

【问题讨论】:

    标签: flutter audio-player android-music-player


    【解决方案1】:

    可能是他们更合适的解决方案,但这解决了我目前的问题,我使用了插件 audioplayers 并为每个音频文件创建了多个实例。
    更新:例如对于两个音频文件,如下所示:

    enum PlayerState { stopped, playing, paused } 
    enum PlayerState1 { stopped1, playing1, paused1 }
    
    class AudioScreen extends StatefulWidget {
     
      @override
      _AudioScreenState createState() =>_AudioScreenState();
    }
    
    class _AudioScreenState extends State<AudioScreen> {
      //for first audio
      AudioPlayer audioPlayer;
      PlayerState playerState = PlayerState.stopped;
      get isPlaying => playerState == PlayerState.playing;
      //for second audio 
      AudioPlayer audioPlayer1;
      PlayerState1 playerState1 = PlayerState1.stopped1;
      get isPlaying1 => playerState1 == PlayerState1.playing1;
    
      @override
      void initState() {
        super.initState();
        audioPlayer = new AudioPlayer();
        audioPlayer1 = new AudioPlayer();
      }
       Future play() async {
        await audioPlayer.play(url);
        setState(() {
          playerState = PlayerState.playing;
         });
        await audioPlayer1.play(url1);
        setState(() {
          playerState1 = PlayerState1.playing1;
         });
      }
       Future stop() async {
        await audioPlayer.stop();
          setState(() {
          playerState = PlayerState.stopped;
          });
        await audioPlayer1.stop();
          setState(() {
          playerState1 = PlayerState1.stopped1;
          });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body:Column(
           children:[
            IconButton(
              onPressed:() play(),
              iconSize: 70.0,
              icon:Icon(Icons.play_circle_outline, size: 55),
            ),
            IconButton(
              onPressed:  stop(),
              iconSize: 55.0,
              icon: Icon(Icons.stop),
            ),
           ]
          ),
         );
      }
    }

    这样您就可以创建多个实例,也可以只使用循环为每个音频创建多个实例。

    【讨论】:

    • 您能分享一下您是如何实现这一目标的吗?
    • 抱歉回复晚了,你做到了吗?
    • @kiran 嗨我想问一下,你能在后台播放吗?我到处搜索有关在后台运行的 audioplayers 和 audio_service,但仍然没有任何资源来做到这一点
    猜你喜欢
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-08-23
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多