美文网首页
flutter_sound录音与播放

flutter_sound录音与播放

作者: Noah_L_JC | 来源:发表于2019-12-09 11:30 被阅读0次

    插件地址

    官方介绍

      这个插件为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);
    

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

      

    相关文章

      网友评论

          本文标题:flutter_sound录音与播放

          本文链接:https://www.haomeiwen.com/subject/didbgctx.html