dubbing_lib.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import 'dart:async';
  2. import 'package:flutter/services.dart';
  3. class DubbingLib {
  4. static final DubbingLib _instance = DubbingLib();
  5. static DubbingLib get instance => _instance;
  6. static const MethodChannel _channel =
  7. const MethodChannel('dubbing_lib');
  8. StreamController _onProgressChange;
  9. StreamController _onRecordProgressChange;
  10. StreamController _onDecodeResultChange;
  11. StreamController _onEvaluatorResultChange;
  12. Stream<int> get progressChange => _onProgressChange.stream;
  13. Stream<int> get recordProgressChange => _onRecordProgressChange.stream;
  14. Stream<Map> get decodeResultChange => _onDecodeResultChange.stream;
  15. Stream<Map> get evaluatorResultChange => _onEvaluatorResultChange.stream;
  16. static Future<String> get platformVersion async {
  17. final String version = await _channel.invokeMethod('getPlatformVersion');
  18. return version;
  19. }
  20. Future<void> init() {
  21. return _channel.invokeMethod("initSpeechSdk");
  22. }
  23. Future<void> setExtraFullScreen() {
  24. //todo 暂时视频播放时全屏StatusBar bug
  25. return _channel.invokeMethod("setExtraFullScreen");
  26. }
  27. Future<Map<dynamic, dynamic>> findIsExistCacheVideo(String videoId) {
  28. return _channel.invokeMethod<Map<dynamic, dynamic>>("findIsExistCacheVideo", {"videoId": videoId});
  29. }
  30. Future<String> downLoadVideo(String videoUrl) {
  31. return _channel.invokeMethod("downLoadVideo", {"url": videoUrl});
  32. }
  33. Future<void> pauseRecordAudio() {
  34. return _channel.invokeMethod("pauseRecordAudio");
  35. }
  36. /// 返回录音文件地址
  37. Future<String> startRecord(int index, int duration, String fileName, String content) {
  38. return _channel.invokeMethod("startRecord", {"duration": duration, "fileName": fileName, "index": index, "content": content});
  39. }
  40. Future<void> playRecordAudio(String filePath) {
  41. return _channel.invokeMethod("playRecordAudio", {"fileName": filePath});
  42. }
  43. /// 返回合成视频文件地址
  44. Future<String> startMixinAudio(String videoId, String bgmUrl, List<int> endTimeList,
  45. List<String> decodeAudioPathList, List<int> durationList, String localVideoPath) {
  46. return _channel.invokeMethod("startMixinAudio", {"videoId": videoId, "bgmUrl": bgmUrl,
  47. "endTimeList": endTimeList, "audioDecodePaths": decodeAudioPathList, "durationList": durationList, "videoPath": localVideoPath});
  48. }
  49. Future<void> cleanAudioData(String videoId) {
  50. return _channel.invokeMethod("cleanAudioData", {"videoId": videoId});
  51. }
  52. /// 初始化listener 进入录音页面时调用
  53. void initListener() {
  54. _onProgressChange = new StreamController<int>.broadcast();
  55. _onRecordProgressChange = new StreamController<int>.broadcast();
  56. _onDecodeResultChange = new StreamController<Map>.broadcast();
  57. _onEvaluatorResultChange = new StreamController<Map>.broadcast();
  58. _channel.setMethodCallHandler(_onMethodCallHandler);
  59. }
  60. /// 1,下载视频进度 2.录音进度 3.解码录音回调 4.语音评测结果
  61. Future _onMethodCallHandler(MethodCall call) {
  62. switch (call.method) {
  63. case "downloadUpdate":
  64. _onProgressChange.add(call.arguments['progress']);
  65. break;
  66. case "recordProgress":
  67. _onRecordProgressChange.add(call.arguments['progress']);
  68. break;
  69. case "decodeResult":
  70. _onDecodeResultChange.add(call.arguments);
  71. break;
  72. case "evaluatorResult":
  73. _onEvaluatorResultChange.add(call.arguments);
  74. break;
  75. }
  76. return null;
  77. }
  78. /// 关闭stream
  79. void closeStream() {
  80. _channel.setMethodCallHandler(null);
  81. _onProgressChange.close();
  82. _onRecordProgressChange.close();
  83. _onDecodeResultChange.close();
  84. _onEvaluatorResultChange.close();
  85. }
  86. }