Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

113 wiersze
3.2 KiB

  1. import 'package:demo001/plugin/xunfei/audiotranslate/audiotranslate.dart';
  2. import 'package:demo001/plugin/xunfei/audiotranslate/result_audio.dart';
  3. import 'package:demo001/plugin/xunfei/audiotranslate/result_test.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:flutter/services.dart';
  6. class MyHomePage extends StatefulWidget {
  7. const MyHomePage({super.key, required this.title});
  8. final String title;
  9. @override
  10. State<MyHomePage> createState() => _MyHomePageState();
  11. }
  12. class _MyHomePageState extends State<MyHomePage> {
  13. late Xunfei_AudioTranslation xunfei;
  14. String _result = "";
  15. // 在 initState 中初始化
  16. @override
  17. void initState() {
  18. super.initState();
  19. xunfei = new Xunfei_AudioTranslation(
  20. appId: "137dc132",
  21. apiKey: "1c1891a475e71250ecd1320303ad6545",
  22. apiSecret: "MjZhNDA1NTI1NWZkZDQxOTMxYzMyN2Yw",
  23. onResponse: _onResponse,
  24. );
  25. }
  26. void _onResponse(Xunfei_AudioTranslation_Result_Text text,
  27. Xunfei_AudioTranslation_Result_Audio audio) {
  28. setState(() {
  29. _result = "接受消息:${text.result()}";
  30. });
  31. }
  32. //测试链接
  33. Future<void> _connectTest() async {
  34. await xunfei.start();
  35. setState(() {
  36. _result = "链接状态:${xunfei.state}";
  37. });
  38. }
  39. // 读取本地文件转流对象
  40. Stream<List<int>> _getAudioStream() async* {
  41. // 从 assets 中读取音频文件
  42. final byteData = await rootBundle.load('assests/original.pcm');
  43. final buffer = byteData.buffer.asUint8List();
  44. // 按块生成流,块大小为 frameSize
  45. int frameSize = 1280; // 每一帧的音频大小
  46. for (int i = 0; i < buffer.length; i += frameSize) {
  47. int end =
  48. (i + frameSize <= buffer.length) ? i + frameSize : buffer.length;
  49. yield buffer.sublist(i, end);
  50. }
  51. }
  52. //测试翻译
  53. Future<void> _translationTest() async {
  54. Stream<List<int>> audioStream = _getAudioStream();
  55. await xunfei.pushaudio(audioStream);
  56. }
  57. //测试录音
  58. void _recordTest() {}
  59. @override
  60. Widget build(BuildContext context) {
  61. return Scaffold(
  62. appBar: AppBar(
  63. backgroundColor: Theme.of(context).colorScheme.inversePrimary,
  64. title: Text(widget.title),
  65. ),
  66. body: Center(
  67. child: Column(
  68. mainAxisAlignment: MainAxisAlignment.center,
  69. children: <Widget>[
  70. const Text(
  71. '测试结果',
  72. ),
  73. Text(
  74. _result,
  75. style: Theme.of(context).textTheme.headlineMedium,
  76. ),
  77. ],
  78. ),
  79. ),
  80. // 页面底部的按钮
  81. bottomNavigationBar: Padding(
  82. padding: const EdgeInsets.all(8.0),
  83. child: Row(
  84. mainAxisAlignment: MainAxisAlignment.spaceAround, // 按钮等距排列
  85. children: <Widget>[
  86. ElevatedButton(
  87. onPressed: _connectTest,
  88. child: const Text('测试链接'),
  89. ),
  90. ElevatedButton(
  91. onPressed: _translationTest,
  92. child: const Text('测试翻译'),
  93. ),
  94. ElevatedButton(
  95. onPressed: _recordTest,
  96. child: const Text('测试录音'),
  97. ),
  98. ],
  99. ),
  100. ),
  101. );
  102. }
  103. }