Flutter音频播放插件flutter_pcm_player的使用
Flutter音频播放插件flutter_pcm_player的使用
本项目是一个用于演示flutter_pcm_player
插件使用的Flutter应用。
开始使用
这个项目是一个插件包的起点,专门包含Android和/或iOS平台特定实现代码的包。有关如何开始Flutter开发的帮助信息,请参阅官方文档,其中提供了教程、示例、移动开发指南以及完整的API参考。
示例代码
以下是使用flutter_pcm_player
插件的一个完整示例:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_pcm_player/flutter_pcm_player.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
FlutterPcmPlayer player = FlutterPcmPlayer();
FlutterPcmPlayer player1 = FlutterPcmPlayer();
[@override](/user/override)
void initState() {
super.initState();
testPlayPcm();
testPlayPcm1();
}
void testPlayPcm() async {
final List files = ['王后', '白方'];
await player.initialize(); // 初始化播放器
await player.play(); // 播放音频
for (int i = 0; i < files.length; i++) {
try {
ByteData byteDate = await rootBundle.load("assets/${files[i]}.pcm"); // 加载PCM文件
if (byteDate != null) {
Uint8List stream = Uint8List.sublistView(byteDate); // 将ByteData转换为Uint8List
await player.feed(stream); // 向播放器喂数据
} else {
print('file content is null!'); // 文件内容为空时打印错误信息
}
} catch (e) {
print(e.toString()); // 打印异常信息
}
}
//player.stop(); // 停止播放(如果需要)
}
void testPlayPcm1() async {
final List files = ['王后', '白方'];
await player1.initialize(); // 初始化第二个播放器
await player1.play(); // 播放音频
for (int i = 0; i < files.length; i++) {
try {
ByteData byteDate = await rootBundle.load("assets/${files[i]}.pcm"); // 加载PCM文件
if (byteDate != null) {
Uint8List stream = Uint8List.sublistView(byteDate); // 将ByteData转换为Uint8List
await player1.feed(stream); // 向播放器喂数据
} else {
print('file content is null!'); // 文件内容为空时打印错误信息
}
} catch (e) {
print(e.toString()); // 打印异常信息
}
}
//player1.stop(); // 停止播放(如果需要)
}
void testPlayPcmNew() async {
final List files = ['王后', '白方'];
// PcmPlayer xxplayer1 = PcmPlayer();
// await player.initialize();
// await player.play();
for (int i = 0; i < files.length; i++) {
print(DateTime.now()); // 打印当前时间
try {
ByteData byteDate = await rootBundle.load("assets/${files[i]}.pcm"); // 加载PCM文件
print(byteDate.lengthInBytes); // 打印文件大小
if (byteDate != null) {
Uint8List stream = Uint8List.sublistView(byteDate); // 将ByteData转换为Uint8List
await player.feed(stream); // 向播放器喂数据
} else {
print('file content is null!'); // 文件内容为空时打印错误信息
}
} catch (e) {
print(e.toString()); // 打印异常信息
}
print(DateTime.now()); // 打印当前时间
print(player.isPlaying); // 打印播放状态
}
//xxplayer1.stop(); // 停止播放(如果需要)
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () {
testPlayPcmNew(); // 点击按钮时调用testPlayPcmNew方法
},
tooltip: 'Play',
child: Icon(Icons.play_arrow), // 显示播放图标
),
appBar: AppBar(
title: const Text('Plugin example app'), // 设置AppBar标题
),
body: Center(
// child: Text('Running on: $_platformVersion\n'), // 如果需要显示运行环境
),
),
);
}
}
更多关于Flutter音频播放插件flutter_pcm_player的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频播放插件flutter_pcm_player的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_pcm_player
是一个用于播放 PCM 音频数据的 Flutter 插件。PCM(脉冲编码调制)是一种未压缩的音频数据格式,通常用于低延迟的音频播放场景。以下是如何使用 flutter_pcm_player
插件的基本步骤。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 flutter_pcm_player
插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_pcm_player: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化播放器
在你的 Dart 文件中导入 flutter_pcm_player
插件并初始化播放器:
import 'package:flutter_pcm_player/flutter_pcm_player.dart';
class AudioPlayer {
late PcmPlayer _pcmPlayer;
Future<void> initialize() async {
_pcmPlayer = PcmPlayer();
await _pcmPlayer.initialize();
}
}
3. 播放 PCM 数据
你可以通过 play
方法来播放 PCM 数据。PCM 数据通常是一个 Uint8List
,你需要指定采样率、声道数和位深度。
Future<void> playPcmData(Uint8List pcmData, int sampleRate, int channelCount, int bitDepth) async {
await _pcmPlayer.play(pcmData, sampleRate, channelCount, bitDepth);
}
4. 暂停和恢复
你可以使用 pause
和 resume
方法来暂停和恢复播放:
Future<void> pause() async {
await _pcmPlayer.pause();
}
Future<void> resume() async {
await _pcmPlayer.resume();
}
5. 停止播放
使用 stop
方法来停止播放并释放资源:
Future<void> stop() async {
await _pcmPlayer.stop();
}
6. 释放资源
在使用完播放器后,记得释放资源:
Future<void> dispose() async {
await _pcmPlayer.dispose();
}
7. 处理错误
你可以监听播放器的错误事件:
_pcmPlayer.onError.listen((error) {
print('Error occurred: $error');
});
8. 完整示例
以下是一个完整的示例,展示了如何使用 flutter_pcm_player
播放 PCM 数据:
import 'package:flutter/material.dart';
import 'package:flutter_pcm_player/flutter_pcm_player.dart';
import 'dart:typed_data';
class AudioPlayerPage extends StatefulWidget {
[@override](/user/override)
_AudioPlayerPageState createState() => _AudioPlayerPageState();
}
class _AudioPlayerPageState extends State<AudioPlayerPage> {
late PcmPlayer _pcmPlayer;
bool _isPlaying = false;
[@override](/user/override)
void initState() {
super.initState();
_initializePlayer();
}
Future<void> _initializePlayer() async {
_pcmPlayer = PcmPlayer();
await _pcmPlayer.initialize();
}
Future<void> _playPcmData() async {
// 这里假设你已经有了 PCM 数据
Uint8List pcmData = Uint8List.fromList([]); // 替换为实际的 PCM 数据
int sampleRate = 44100; // 采样率
int channelCount = 2; // 声道数
int bitDepth = 16; // 位深度
await _pcmPlayer.play(pcmData, sampleRate, channelCount, bitDepth);
setState(() {
_isPlaying = true;
});
}
Future<void> _pause() async {
await _pcmPlayer.pause();
setState(() {
_isPlaying = false;
});
}
Future<void> _resume() async {
await _pcmPlayer.resume();
setState(() {
_isPlaying = true;
});
}
Future<void> _stop() async {
await _pcmPlayer.stop();
setState(() {
_isPlaying = false;
});
}
[@override](/user/override)
void dispose() {
_pcmPlayer.dispose();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PCM Audio Player'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
if (!_isPlaying)
ElevatedButton(
onPressed: _playPcmData,
child: Text('Play'),
),
if (_isPlaying)
ElevatedButton(
onPressed: _pause,
child: Text('Pause'),
),
if (!_isPlaying)
ElevatedButton(
onPressed: _resume,
child: Text('Resume'),
),
ElevatedButton(
onPressed: _stop,
child: Text('Stop'),
),
],
),
),
);
}
}
void main() => runApp(MaterialApp(
home: AudioPlayerPage(),
));