Flutter中如何使用just_audio播放多个音频

在Flutter中使用just_audio插件时,如何实现多个音频文件的连续播放或列表循环?我现在可以播放单个音频,但不知道如何管理播放队列,比如添加多个音频源、切换下一首或设置循环模式。能否提供一个完整的示例代码,包括音频列表的初始化和播放控制逻辑?

2 回复

使用just_audio播放多个音频的方法:

  1. 创建多个AudioPlayer实例
final player1 = AudioPlayer();
final player2 = AudioPlayer();
  1. 分别设置音频源并播放
await player1.setAudioSource(AudioSource.uri(Uri.parse('音频1URL')));
await player2.setAudioSource(AudioSource.uri(Uri.parse('音频2URL')));

player1.play();
player2.play();
  1. 记得在dispose时释放资源
player1.dispose();
player2.dispose();

更多关于Flutter中如何使用just_audio播放多个音频的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 just_audio 播放多个音频,可以通过以下方法实现:

1. 创建多个 AudioPlayer 实例

每个音频使用独立的 AudioPlayer 实例,适合同时播放多个音频(如背景音乐和音效)。

import 'package:just_audio/just_audio.dart';

// 创建多个播放器实例
final audioPlayer1 = AudioPlayer();
final audioPlayer2 = AudioPlayer();

// 播放音频
await audioPlayer1.setAsset('assets/audio1.mp3');
audioPlayer1.play();

await audioPlayer2.setUrl('https://example.com/audio2.mp3');
audioPlayer2.play();

注意:同时播放多个音频可能受设备性能限制,需测试目标平台兼容性。

2. 使用 ConcatenatingAudioSource 播放列表

将多个音频组合成播放列表,按顺序播放(适合音乐播放器)。

final audioPlayer = AudioPlayer();
final playlist = ConcatenatingAudioSource(
  children: [
    AudioSource.asset('assets/audio1.mp3'),
    AudioSource.uri(Uri.parse('https://example.com/audio2.mp3')),
  ],
);

await audioPlayer.setAudioSource(playlist);
audioPlayer.play(); // 顺序播放

3. 使用 LoopAudioSource/LoudnessEnhancer(高级功能)

  • 循环播放:用 LoopAudioSource 包装音频源。
  • 音量调节:通过 audioPlayer.setVolume(0.5) 控制音量。

注意事项

  1. 资源释放:在 dispose() 中调用 audioPlayer.dispose() 避免内存泄漏。
  2. 错误处理:监听 playerStateStream 处理加载/播放失败。
  3. 权限:网络音频需要 INTERNET 权限(在 android/app/src/main/AndroidManifest.xml 添加)。

示例代码(完整页面)

import 'package:flutter/material.dart';
import 'package:just_audio/just_audio.dart';

class MultiAudioPage extends StatefulWidget {
  @override
  _MultiAudioPageState createState() => _MultiAudioPageState();
}

class _MultiAudioPageState extends State<MultiAudioPage> {
  final AudioPlayer _player1 = AudioPlayer();
  final AudioPlayer _player2 = AudioPlayer();

  @override
  void dispose() {
    _player1.dispose();
    _player2.dispose();
    super.dispose();
  }

  Future<void> _playMultiple() async {
    await _player1.setAsset('assets/audio1.mp3');
    await _player2.setAsset('assets/audio2.mp3');
    _player1.play();
    _player2.play();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: ElevatedButton(
          onPressed: _playMultiple,
          child: Text('播放多个音频'),
        ),
      ),
    );
  }
}

选择方案时,根据需求决定:

  • 独立实例:适用于音效+背景音乐场景。
  • 播放列表:适用于连续播放多个音频。
回到顶部