flutter_sound录音与播放
2019-12-09 本文已影响0人
Noah_L_JC
官方介绍
这个插件为android和ios平台提供了简单的记录器和播放器功能。这仅支持每个平台的默认文件扩展名。该插件可以处理来自远程URL的文件,也可以处理本地播放流(通过桥接同步准确时间)。
需要权限
iOS:需要在info.plist
文件添加一下权限
<key>NSMicrophoneUsageDescription</key>
<string>This sample uses the microphone to record your speech and convert it to text.</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
image.png
Android:需要AndroidManifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
image.png
官方的功能方法
image.png用法
生成对象
FlutterSound flutterSound = new FlutterSound();
一、录音功能
1.启动录音
//file是文件名,比如 file = Platform.isIOS ? 'ios.m4a' : 'android.mp4'
Future<String> result = await flutterSound.startRecorder(file);
返回录音音频文件的uri路径字符串成。
2.停止录音
Future<String> result = await flutterSound.stopRecorder();
result.then(value) {
print('stopRecorder: $value');
if (_recorderSubscription != null) {
_recorderSubscription.cancel();
_recorderSubscription = null;
}
}
3.通过订阅流来监听录音状态
StreamSubscription _recorderSubscription = = flutterSound.onRecorderStateChanged.listen((e) {
// RecordStatus
DateTime date = new DateTime.fromMillisecondsSinceEpoch(
e.currentPosition.toInt(),
isUtc: true);
print("got update -> ${e.currentPosition}");
String txt = DateFormat('mm:ss:SS', 'en_GB').format(date);
this.setState(() {
this._recorderTxt = txt.substring(0, 5);
});
});
_recorderSubscription
可以控制录音暂停和回复录音
注意!!!!
_recorderSubscription
这个监听的暂停和恢复录音有一个bug,就是暂停录音的时候,录音的时间会不准确,录音时它会一直走,就是说当我恢复录音的时候,录音的时间加上我暂停时的时间,就是说我暂停的时候已经记录了00:10,当我过了10秒之后恢复录音,给我返回的记录时间是00:20,但是我期待的是返回00:11。这个bug我试了很多遍,最后也没办法解决,这也导致我了我放弃录音功能来使用它,而改用了flutter_audio_recorder.
PS:希望大神来解决这个问题。
二、语音播放
1.开始播放
// uri 可以是本地的音频,也可以是网络上的音频。注意,如果网络不好的话,需要等待...
Future<String> result = await flutterSound.startPlayer(uri);
2.停止播放
Future<String> result = await flutterSound.stopPlayer();
3.暂停
Future<String> result = await flutterSound.pausePlayer();
4.恢复播放
Future<String> result = await flutterSound.resumePlayer();
5.拖动进度
String Future<result> = await flutterSound.seekToPlayer(miliSecs);
音频播放基本上是正常的,可以播放本地的音频,也可以是网络上的音频,亲测都可以用。