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可以控制录音暂停和回复录音

image.png

注意!!!!
_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);

音频播放基本上是正常的,可以播放本地的音频,也可以是网络上的音频,亲测都可以用。

  

上一篇下一篇

猜你喜欢

热点阅读