Flutter音频播放插件audioplayersmodify的使用

Flutter音频播放插件audioplayersmodify的使用

在Flutter开发中,audioplayersmodify 是一个功能强大的音频播放插件,可以用于播放远程URL、本地文件和本地资源中的音频。本文将通过完整的示例代码展示如何使用该插件。

环境配置

首先,确保在 pubspec.yaml 文件中添加依赖项:

dependencies:
  audioplayersmodify: ^最新版本号

然后运行以下命令以安装依赖项:

flutter pub get

示例代码

以下是完整的示例代码,展示了如何使用 audioplayersmodify 插件来播放不同类型的音频。

完整示例代码

import 'dart:async';
import 'dart:io';

import 'package:audioplayersmodify/audioplayers.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:path_provider/path_provider.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MaterialApp(home: ExampleApp()));
}

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

class _ExampleAppState extends State<ExampleApp> {
  AudioCache audioCache = AudioCache();
  AudioPlayer advancedPlayer = AudioPlayer();
  String? localFilePath;

  [@override](/user/override)
  void initState() {
    super.initState();
    if (kIsWeb) {
      return;
    }
    if (Platform.isIOS) {
      audioCache.fixedPlayer?.notificationService.startHeadlessService();
    }
  }

  Future<void> _loadFile() async {
    final bytes = await readBytes(Uri.parse('https://luan.xyz/files/audio/ambient_c_motion.mp3'));
    final dir = await getApplicationDocumentsDirectory();
    final file = File('${dir.path}/audio.mp3');
    await file.writeAsBytes(bytes);
    if (file.existsSync()) {
      setState(() => localFilePath = file.path);
    }
  }

  Widget remoteUrl() {
    return const SingleChildScrollView(
      child: TabWrapper(
        children: [
          Text('Sample 1 (Remote URL)', style: TextStyle(fontWeight: FontWeight.bold)),
          PlayerWidget(url: 'https://luan.xyz/files/audio/ambient_c_motion.mp3'),
          Text('Sample 2 (Remote URL)', style: TextStyle(fontWeight: FontWeight.bold)),
          PlayerWidget(url: 'https://luan.xyz/files/audio/nasa_on_a_mission.mp3'),
        ],
      ),
    );
  }

  Widget localFile() {
    return TabWrapper(
      children: [
        const Text('-- Manually Load Bytes (No Web!) --'),
        const Text('File: https://luan.xyz/files/audio/ambient_c_motion.mp3'),
        Btn(txt: 'Download File to Your Device', onPressed: _loadFile),
        Text('Current Local File Path: $localFilePath'),
        if (localFilePath != null) PlayerWidget(url: localFilePath!),
      ],
    );
  }

  Widget localAsset() {
    return SingleChildScrollView(
      child: TabWrapper(
        children: [
          const Text("Play Local Asset 'audio.mp3':"),
          Btn(txt: 'Play', onPressed: () => audioCache.play('audio.mp3')),
          const Text("Play Local Asset In Low Latency 'audio.mp3':"),
          Btn(
            txt: 'Play',
            onPressed: () {
              audioCache.play('audio.mp3', mode: PlayerMode.LOW_LATENCY);
            },
          ),
        ],
      ),
    );
  }

  Widget notification() {
    return TabWrapper(
      children: [
        const Text("Play Notification Sound 'messenger.mp3':"),
        Btn(
          txt: 'Play',
          onPressed: () => audioCache.play('messenger.mp3', isNotification: true),
        ),
        const Text('Notification Service'),
        Btn(
          txt: 'Start Notification',
          onPressed: () async {
            await advancedPlayer.notificationService.startHeadlessService();
            await advancedPlayer.notificationService.setNotification(
              title: 'My Song',
              albumTitle: 'My Album',
              artist: 'My Artist',
              imageUrl: 'Image URL or blank',
              forwardSkipInterval: const Duration(seconds: 30),
              backwardSkipInterval: const Duration(seconds: 30),
              duration: const Duration(minutes: 3),
              elapsedTime: const Duration(seconds: 15),
              enableNextTrackButton: true,
              enablePreviousTrackButton: true,
            );
            await advancedPlayer.play('https://luan.xyz/files/audio/nasa_on_a_mission.mp3', isLocal: false);
          },
        ),
        Btn(
          txt: 'Clear Notification',
          onPressed: () async {
            await advancedPlayer.stop();
            await advancedPlayer.notificationService.clearNotification();
          },
        ),
      ],
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        StreamProvider<Duration>.value(
          initialData: const Duration(),
          value: advancedPlayer.onAudioPositionChanged,
        ),
      ],
      child: DefaultTabController(
        length: 4,
        child: Scaffold(
          appBar: AppBar(
            bottom: const TabBar(
              tabs: [
                Tab(text: 'Remote URL'),
                Tab(text: 'Local File'),
                Tab(text: 'Local Asset'),
                Tab(text: 'Notification'),
              ],
            ),
            title: const Text('audioplayers Example'),
          ),
          body: TabBarView(
            children: [
              remoteUrl(),
              localFile(),
              localAsset(),
              notification(),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


audioplayers 是一个常用的 Flutter 插件,用于播放音频文件。它支持本地文件、网络文件以及从字节数据播放音频。audioplayersmodifyaudioplayers 的一个修改版本,可能包含一些额外的功能或修复。

以下是 audioplayersmodify 的基本使用方法:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 audioplayersmodify 依赖:

dependencies:
  flutter:
    sdk: flutter
  audioplayersmodify: ^0.20.1  # 请确保使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 引入插件

在你的 Dart 文件中引入 audioplayersmodify

import 'package:audioplayersmodify/audioplayersmodify.dart';

3. 创建 AudioPlayer 实例

你可以创建一个 AudioPlayer 实例来播放音频:

AudioPlayer audioPlayer = AudioPlayer();

4. 播放音频

你可以使用 play 方法来播放音频。这个方法可以接受一个 URL、文件路径或字节数据。

播放网络音频

await audioPlayer.play(UrlSource('https://example.com/audio.mp3'));

播放本地音频

await audioPlayer.play(DeviceFileSource('/path/to/audio.mp3'));

播放字节数据

Uint8List audioData = ...; // 获取音频字节数据
await audioPlayer.play(BytesSource(audioData));

5. 控制播放

你可以使用 pauseresumestop 方法来控制播放:

await audioPlayer.pause();  // 暂停播放
await audioPlayer.resume(); // 恢复播放
await audioPlayer.stop();   // 停止播放

6. 设置音量

你可以使用 setVolume 方法来设置音量(0.0 到 1.0):

await audioPlayer.setVolume(0.5);  // 设置音量为 50%

7. 设置播放速度

你可以使用 setPlaybackRate 方法来设置播放速度:

await audioPlayer.setPlaybackRate(1.5);  // 以 1.5 倍速播放

8. 监听播放事件

你可以监听播放事件来获取播放状态、进度等信息:

audioPlayer.onPlayerStateChanged.listen((PlayerState state) {
  print('Current player state: $state');
});

audioPlayer.onDurationChanged.listen((Duration duration) {
  print('Max duration: $duration');
});

audioPlayer.onPositionChanged.listen((Duration position) {
  print('Current position: $position');
});

9. 释放资源

在不再需要使用 AudioPlayer 时,记得释放资源:

await audioPlayer.release();
await audioPlayer.dispose();

10. 处理错误

你可以监听错误事件来处理播放过程中可能出现的错误:

audioPlayer.onPlayerError.listen((error) {
  print('Error occurred: $error');
});

11. 示例代码

以下是一个完整的示例代码,展示了如何使用 audioplayersmodify 播放网络音频:

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

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

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

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

class _AudioPlayerExampleState extends State<AudioPlayerExample> {
  AudioPlayer audioPlayer = AudioPlayer();
  bool isPlaying = false;

  [@override](/user/override)
  void dispose() {
    audioPlayer.dispose();
    super.dispose();
  }

  void playAudio() async {
    await audioPlayer.play(UrlSource('https://example.com/audio.mp3'));
    setState(() {
      isPlaying = true;
    });
  }

  void pauseAudio() async {
    await audioPlayer.pause();
    setState(() {
      isPlaying = false;
    });
  }

  void stopAudio() async {
    await audioPlayer.stop();
    setState(() {
      isPlaying = false;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Audio Player Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: isPlaying ? pauseAudio : playAudio,
              child: Text(isPlaying ? 'Pause' : 'Play'),
            ),
            ElevatedButton(
              onPressed: stopAudio,
              child: Text('Stop'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部