Flutter音频管理插件advanced_audio_manager的使用

Flutter音频管理插件advanced_audio_manager的使用

简介

advanced_audio_manager 插件提供了以下功能:

  • 获取当前输出音频设备
  • 监听输入设备的变化
  • 切换音频输入/输出设备

开始使用

以下是 advanced_audio_manager 的基本使用示例:

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:advanced_audio_manager/advanced_audio_manager.dart'; // 导入插件

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  AudioInput _currentInput = AudioInput("未知", 0); // 初始化当前音频输入
  List<AudioInput> _availableInputs = []; // 可用的音频输入列表

  [@override](/user/override)
  void initState() {
    super.initState();
    init(); // 初始化函数
  }

  Future<void> init() async {
    AdvancedAudioManager.setListener(() async {
      print("-----改变-------"); // 设备变化时打印信息
      await _getInput(); // 获取当前和可用的音频输入
      setState(() {}); // 更新UI
    });

    await _getInput(); // 首次获取当前和可用的音频输入
    if (!mounted) return;
    setState(() {}); // 更新UI
  }

  _getInput() async {
    _currentInput = await AdvancedAudioManager.getCurrentOutput(); // 获取当前音频输入
    print("当前: $_currentInput");
    _availableInputs = await AdvancedAudioManager.getAvailableInputs(); // 获取可用音频输入
    print("可用: $_availableInputs");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Padding(
            padding: const EdgeInsets.all(10),
            child: Column(
              children: <Widget>[
                Text(
                  "当前输出: ${_currentInput.name} ${_currentInput.port}", // 显示当前音频输出
                ),
                Divider(),
                Expanded(
                  child: ListView.builder(
                    itemBuilder: (_, index) {
                      AudioInput input = _availableInputs[index]; // 获取每个音频输入
                      return Row(
                        children: <Widget>[
                          Expanded(child: Text("${input.name}")), // 显示名称
                          Expanded(child: Text("${input.port}")), // 显示端口
                        ],
                      );
                    },
                    itemCount: _availableInputs.length, // 列表项数量
                  ),
                ),
              ],
            ),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            bool res = false;
            if (_currentInput.port == AudioPort.receiver) { // 判断当前音频是否为接收器
              res = await AdvancedAudioManager.changeToSpeaker(); // 切换到扬声器
              print("切换到扬声器: $res");
            } else {
              res = await AdvancedAudioManager.changeToReceiver(); // 切换到接收器
              print("切换到接收器: $res");
            }
            await _getInput(); // 更新当前和可用音频输入
          },
        ),
      ),
    );
  }
}

更多关于Flutter音频管理插件advanced_audio_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter音频管理插件advanced_audio_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


advanced_audio_manager 是一个用于 Flutter 的音频管理插件,它提供了对音频播放、暂停、停止、音量控制、进度控制等功能的支持。这个插件可以帮助你在 Flutter 应用中轻松管理音频播放。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 advanced_audio_manager 的依赖:

dependencies:
  flutter:
    sdk: flutter
  advanced_audio_manager: ^0.0.1  # 请确保使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化音频管理器

在你的 Dart 文件中导入 advanced_audio_manager 并初始化音频管理器:

import 'package:advanced_audio_manager/advanced_audio_manager.dart';

void initAudioManager() async {
  await AdvancedAudioManager.init();
}

3. 播放音频

你可以使用 AdvancedAudioManager 来播放音频文件。以下是一个简单的例子:

void playAudio() async {
  await AdvancedAudioManager.play(
    'https://www.example.com/audio.mp3',
    isLocal: false, // 如果是本地文件,设置为 true
  );
}

4. 暂停和恢复音频

你可以使用 pauseresume 方法来控制音频的播放状态:

void pauseAudio() async {
  await AdvancedAudioManager.pause();
}

void resumeAudio() async {
  await AdvancedAudioManager.resume();
}

5. 停止音频

停止音频播放:

void stopAudio() async {
  await AdvancedAudioManager.stop();
}

6. 控制音量

你可以使用 setVolume 方法来调整音频的音量:

void setVolume(double volume) async {
  await AdvancedAudioManager.setVolume(volume);
}

7. 控制进度

你可以使用 seekTo 方法来跳转到音频的特定位置:

void seekTo(Duration position) async {
  await AdvancedAudioManager.seekTo(position);
}

8. 监听播放状态

你可以通过监听 AdvancedAudioManager 的状态来获取音频的播放进度、状态等信息:

AdvancedAudioManager.onAudioPositionChanged.listen((Duration position) {
  print('Current position: $position');
});

AdvancedAudioManager.onAudioStateChanged.listen((AudioState state) {
  print('Current state: $state');
});

9. 释放资源

在不再需要音频管理器时,记得释放资源:

void disposeAudioManager() async {
  await AdvancedAudioManager.dispose();
}

10. 完整示例

以下是一个完整的示例,展示了如何使用 advanced_audio_manager 来播放、暂停、停止和控制音频:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: AudioPlayerScreen(),
    );
  }
}

class AudioPlayerScreen extends StatefulWidget {
  [@override](/user/override)
  _AudioPlayerScreenState createState() => _AudioPlayerScreenState();
}

class _AudioPlayerScreenState extends State<AudioPlayerScreen> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initAudioManager();
  }

  void initAudioManager() async {
    await AdvancedAudioManager.init();
  }

  void playAudio() async {
    await AdvancedAudioManager.play(
      'https://www.example.com/audio.mp3',
      isLocal: false,
    );
  }

  void pauseAudio() async {
    await AdvancedAudioManager.pause();
  }

  void stopAudio() async {
    await AdvancedAudioManager.stop();
  }

  void setVolume(double volume) async {
    await AdvancedAudioManager.setVolume(volume);
  }

  void seekTo(Duration position) async {
    await AdvancedAudioManager.seekTo(position);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: playAudio,
              child: Text('Play'),
            ),
            ElevatedButton(
              onPressed: pauseAudio,
              child: Text('Pause'),
            ),
            ElevatedButton(
              onPressed: stopAudio,
              child: Text('Stop'),
            ),
            Slider(
              value: 0.5,
              onChanged: setVolume,
            ),
          ],
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    AdvancedAudioManager.dispose();
    super.dispose();
  }
}
回到顶部