Flutter音频录制插件audio_in_app的使用
Flutter音频录制插件audio_in_app的使用
简介
audio_in_app
是一个用于在Flutter应用程序中播放音频文件的插件。它非常适合游戏或需要声音的应用程序。
快速开始与使用
-
导入
audio_in_app
包在你的Dart文件中,首先需要导入
audio_in_app
包:import 'package:audio_in_app/audio_in_app.dart';
-
创建
AudioInApp
类的实例创建一个
AudioInApp
类的实例,用于管理音频播放:AudioInApp _audioInApp = AudioInApp();
-
加载音频文件
使用
createNewAudioCache
方法来加载你将在应用中使用的音频文件。你需要提供一个唯一的ID(playerId
),音频文件的路径(route
),以及音频的类型(audioInAppType
)。音频文件应放置在assets
文件夹中。-
点播音频(例如按钮点击、角色跳跃或射击时的声音):
await _audioInApp.createNewAudioCache( playerId: 'button', route: 'audio/button.wav', audioInAppType: AudioInAppType.determined );
-
背景音频(例如游戏进行中的背景音乐):
背景音频有以下特点:
- 同一时间只能播放一段背景音频。如果开始播放新的背景音频,当前播放的背景音频会停止。
- 背景音频会无限循环播放,直到你决定停止它或切换到其他音频。
示例代码:
await _audioInApp.createNewAudioCache( playerId: 'intro1', route: 'audio/intro_1.wav', audioInAppType: AudioInAppType.background );
-
-
播放音频
使用
play
方法来播放音频。你可以通过playerId
来指定要播放的音频:-
播放点播音频:
await _audioInApp.play(playerId: 'button');
-
播放背景音频:
await _audioInApp.play(playerId: 'intro1');
-
-
停止背景音频
如果你想停止正在播放的背景音频,可以使用
stopBackgroun
方法:await _audioInApp.stopBackgroun();
完整示例Demo
以下是一个完整的示例,展示了如何在Flutter应用程序中使用 audio_in_app
插件。该示例包含两个页面:加载页面和主页面。加载页面会在1.5秒后加载所有音频文件并跳转到主页面,主页面则提供了几个按钮来播放不同的音频。
1. 加载页面 (LoadingActivity
)
import 'package:audio_in_app/audio_in_app.dart';
import 'package:flutter/material.dart';
class LoadingActivity extends StatefulWidget {
[@override](/user/override)
State<LoadingActivity> createState() => _LoadingActivityState();
}
class _LoadingActivityState extends State<LoadingActivity> {
AudioInApp _audioInApp = AudioInApp();
[@override](/user/override)
void initState() {
super.initState();
// 延迟1.5秒后加载音频并跳转到主页面
Future.delayed(Duration(milliseconds: 1500)).then((value) => goToMain());
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Loading Activity'),
),
);
}
// 加载音频并跳转到主页面
Future<void> goToMain() async {
// 加载背景音频
await _audioInApp.createNewAudioCache(
playerId: 'intro1',
route: 'audio/intro_1.wav',
audioInAppType: AudioInAppType.background
);
await _audioInApp.createNewAudioCache(
playerId: 'intro2',
route: 'audio/intro_2.wav',
audioInAppType: AudioInAppType.background
);
// 加载点播音频
await _audioInApp.createNewAudioCache(
playerId: 'button',
route: 'audio/button.wav',
audioInAppType: AudioInAppType.determined
);
// 跳转到主页面
Navigator.pushReplacementNamed(context, 'main');
}
}
2. 主页面 (MainActivity
)
import 'package:audio_in_app/audio_in_app.dart';
import 'package:flutter/material.dart';
class MainActivity extends StatefulWidget {
[@override](/user/override)
State<MainActivity> createState() => _MainActivityState();
}
class _MainActivityState extends State<MainActivity> {
AudioInApp _audioInApp = AudioInApp();
[@override](/user/override)
void initState() {
super.initState();
}
// 播放背景音频1
Future<void> play_intro_1() async {
await _audioInApp.play(playerId: 'intro1');
}
// 播放背景音频2
Future<void> play_intro_2() async {
await _audioInApp.play(playerId: 'intro2');
}
// 停止背景音频
Future<void> stop_background() async {
await _audioInApp.stopBackgroun();
}
// 播放点播音频
Future<void> play_button() async {
await _audioInApp.play(playerId: 'button');
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
margin: EdgeInsets.only(bottom: 30),
child: Text('Main Activity'),
),
OutlinedButton(
onPressed: () {
play_intro_1(); // 播放背景音频1
},
child: Text("Play background intro 1"),
),
OutlinedButton(
onPressed: () {
play_intro_2(); // 播放背景音频2
},
child: Text("Play background intro 2"),
),
OutlinedButton(
onPressed: () {
play_button(); // 播放点播音频
},
child: Text("Play Button Sound"),
),
OutlinedButton(
onPressed: () {
stop_background(); // 停止背景音频
},
child: Text("Stop background sound"),
)
],
),
),
);
}
}
更多关于Flutter音频录制插件audio_in_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter音频录制插件audio_in_app的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用audio_in_app
插件进行音频录制的示例代码。这个示例展示了如何初始化插件、开始和停止录音,以及保存录音文件。
首先,确保你已经在pubspec.yaml
文件中添加了audio_in_app
依赖:
dependencies:
flutter:
sdk: flutter
audio_in_app: ^3.0.3 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个简单的Flutter应用示例,展示了如何使用audio_in_app
插件:
import 'package:flutter/material.dart';
import 'package:audio_in_app/audio_in_app.dart';
import 'dart:io';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Audio Recorder Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: AudioRecorderScreen(),
);
}
}
class AudioRecorderScreen extends StatefulWidget {
@override
_AudioRecorderScreenState createState() => _AudioRecorderScreenState();
}
class _AudioRecorderScreenState extends State<AudioRecorderScreen> {
late AudioInApp _audioInApp;
bool isRecording = false;
String? recordedFilePath;
@override
void initState() {
super.initState();
_audioInApp = AudioInApp();
_audioInApp.init().then((_) {
print("Audio recorder initialized");
}).catchError((e) {
print("Error initializing audio recorder: $e");
});
}
@override
void dispose() {
_audioInApp.dispose();
super.dispose();
}
Future<void> startRecording() async {
if (!isRecording) {
setState(() {
isRecording = true;
});
final Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
String filePath = "${appDocPath}/audio_recording.wav";
recordedFilePath = filePath;
_audioInApp.startRecorder(
filePath,
audioFormat: AudioFormat.WAV,
codec: AudioCodec.PCM_16BIT,
sampleRate: 44100,
);
_audioInApp.recorder!.recordingListener = (RecordingStatus status) {
if (status == RecordingStatus.COMPLETED) {
setState(() {
isRecording = false;
});
print("Recording completed");
} else if (status == RecordingStatus.ERROR) {
setState(() {
isRecording = false;
});
print("Recording error");
}
};
}
}
Future<void> stopRecording() async {
if (isRecording) {
await _audioInApp.stopRecorder();
setState(() {
isRecording = false;
});
print("Recording stopped");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Audio Recorder Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: isRecording ? stopRecording : startRecording,
child: Text(isRecording ? 'Stop Recording' : 'Start Recording'),
),
if (recordedFilePath != null)
Text(
'Recorded File Path: $recordedFilePath',
style: TextStyle(fontSize: 16),
),
],
),
),
);
}
}
代码说明:
- 依赖添加:在
pubspec.yaml
文件中添加audio_in_app
依赖。 - 初始化:在
initState
方法中初始化AudioInApp
实例。 - 开始录音:
startRecording
方法负责开始录音,设置录音文件的路径和格式,并监听录音状态。 - 停止录音:
stopRecording
方法负责停止录音。 - UI界面:一个简单的UI界面,包含一个按钮用于开始和停止录音,并在录音完成后显示录音文件的路径。
请确保在实际项目中处理异常和错误情况,并根据需要调整录音参数和UI设计。