Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
cefdb86d6b
  1. 26
      lib/modules/agent/views/message_bubble.dart
  2. 2
      lib/modules/agent/views/music_card.dart
  3. 0
      lib/modules/agent/widgets/circular_progress_button.dart
  4. 25
      lib/modules/meeting/controllers/meeting_record_controller.dart
  5. 13
      lib/modules/music/views/music_playlist_view.dart
  6. 51
      lib/modules/settings/views/settings_view.dart
  7. 7
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt

26
lib/modules/agent/views/message_bubble.dart

@ -46,28 +46,20 @@ class MessageBubble extends GetView<AgentController> {
isUser ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: [
Container(
padding: hasImage
? (message == '[图片]'
? EdgeInsets.zero
: isUser
? const EdgeInsets.fromLTRB(
12, 12, 16, 12) // 用户消息右侧多一点内边距
: const EdgeInsets.fromLTRB(
16, 12, 12, 12)) // AI消息左侧多一点内边距
: isUser
? const EdgeInsets.fromLTRB(
12, 12, 16, 12) // 用户消息右侧多一点内边距
: const EdgeInsets.fromLTRB(
16, 12, 12, 12), // AI消息左侧多一点内边距
padding: (hasImage && message == '[图片]')
? EdgeInsets.zero
: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: _getBubbleColor(context),
borderRadius: BorderRadius.circular(18).copyWith(
borderRadius: BorderRadius.only(
topLeft: isUser
? const Radius.circular(18)
: const Radius.circular(4),
topRight: !isUser
? const Radius.circular(18)
: const Radius.circular(4),
topRight: isUser
? const Radius.circular(4)
: const Radius.circular(18),
bottomLeft: const Radius.circular(18),
bottomRight: const Radius.circular(18),
),
boxShadow: [
BoxShadow(

2
lib/modules/agent/views/music_card.dart

@ -3,7 +3,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../../routes/app_routes.dart';
import '../controllers/agent_controller.dart';
import 'circular_progress_button.dart';
import '../widgets/circular_progress_button.dart';
/// 构建音乐项目
Widget buildMusicItem(BuildContext context, int id, String name, String url,

0
lib/modules/agent/views/circular_progress_button.dart → lib/modules/agent/widgets/circular_progress_button.dart

25
lib/modules/meeting/controllers/meeting_record_controller.dart

@ -90,7 +90,7 @@ class MeetingRecordController extends GetxController
Future<void> _reinitializeAsrService() async {
try {
// 重新初始化ASR服务
// await _asrService.initialize();
await _asrService.initialize();
Logger.info('ASR服务重新初始化成功');
} catch (e) {
@ -163,7 +163,7 @@ class MeetingRecordController extends GetxController
_bleManager.closeCodec();
}
_asrService.stopRecord(true);
//_asrService.stopContinuousRecognition();
_asrService.stopContinuousRecognition();
isRecording.value = false;
}
@ -196,12 +196,12 @@ class MeetingRecordController extends GetxController
/// Toggles visibility of transcribed text content
Future<void> toggleTextDisplay() async {
// final recognitionStream = await _asrService.recognizeCallback();
// _recognitionSubscription?.cancel();
// _recognitionSubscription =
// recognitionStream.listen(_handleRecognitionEvent);
final recognitionStream = await _asrService.recognizeCallback();
_recognitionSubscription?.cancel();
_recognitionSubscription =
recognitionStream.listen(_handleRecognitionEvent);
//await _asrService.startContinuousRecognition(_audioSourceType);
await _asrService.startContinuousRecognition(_audioSourceType);
showTextContent.toggle();
}
@ -242,8 +242,8 @@ class MeetingRecordController extends GetxController
/// Starts recording session
Future<void> _startRecording() async {
// Initialize speech recognition
// final recognitionStream =
// await _asrService.startContinuousRecognition(_audioSourceType);
final recognitionStream =
await _asrService.startContinuousRecognition(_audioSourceType);
// Prepare storage directory
final appDir = await appDocDir;
@ -284,14 +284,14 @@ class MeetingRecordController extends GetxController
/// Pauses current recording session
Future<void> _pauseRecording() async {
// await _asrService.stopContinuousRecognition();
await _asrService.stopContinuousRecognition();
await _asrService.pauseRecord();
pauseTimer();
}
/// Resumes paused recording session
Future<void> _resumeRecording() async {
//await _asrService.startContinuousRecognition(_audioSourceType);
await _asrService.startContinuousRecognition(_audioSourceType);
startTimer();
}
@ -303,7 +303,6 @@ class MeetingRecordController extends GetxController
intermediateContent.value = event.text;
break;
case RecognitionEventType.onAudio:
print("音波数据:${event.audio!.length}");
// 添加新音频数据到波形
_processAudioData(event.audio!);
break;
@ -462,7 +461,7 @@ class MeetingRecordController extends GetxController
}
}
//await _asrService.stopContinuousRecognition();
await _asrService.stopContinuousRecognition();
_resetToDefaultState();
isRecording.value = false;
}

13
lib/modules/music/views/music_playlist_view.dart

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import '../../../core/utils/logger.dart';
import '../../agent/controllers/agent_controller.dart';
import '../../agent/views/circular_progress_button.dart';
import '../../agent/widgets/circular_progress_button.dart';
class MusicPlaylistView extends StatelessWidget {
const MusicPlaylistView({Key? key}) : super(key: key);
@ -115,7 +115,9 @@ class MusicPlaylistView extends StatelessWidget {
);
}
final title = currentSong['name'] ?? currentSong['title'] ?? 'unknownSong'.tr; // 未知歌曲
final title = currentSong['name'] ??
currentSong['title'] ??
'unknownSong'.tr; // 未知歌曲
final artist = currentSong['singer'] ??
currentSong['sgener'] ??
currentSong['artist'] ??
@ -192,7 +194,8 @@ class MusicPlaylistView extends StatelessWidget {
final id = item["id"] ?? 0;
final name = item["name"] ?? 'unknownSong'.tr; // 未知歌曲
final url = item["url"] ?? "";
final singer = item["singer"] ?? item["sgener"] ?? 'unknownArtist'.tr; // 未知歌手
final singer =
item["singer"] ?? item["sgener"] ?? 'unknownArtist'.tr; // 未知歌手
final image = item["image"] ?? "";
return _buildMusicItem(
@ -628,8 +631,8 @@ class MusicPlaylistView extends StatelessWidget {
}
// 播放选中的歌曲
Future<void> _playSelectedSong(AgentController controller, Map<String, dynamic> song,
List<Map<String, dynamic>> playlist) async {
Future<void> _playSelectedSong(AgentController controller,
Map<String, dynamic> song, List<Map<String, dynamic>> playlist) async {
// 防止重复点击导致的状态混乱
if (controller.isLoadingMusic.value) {
return;

51
lib/modules/settings/views/settings_view.dart

@ -418,32 +418,31 @@ class SettingsView extends GetView<SettingsController> {
},
isDarkMode: isDarkMode,
),
if (Platform.isAndroid) ...[
Divider(
height: 1,
color: isDarkMode
? Colors.white.withOpacity(0.1)
: Colors.grey[200]),
// if (Platform.isAndroid) ...[
Divider(
height: 1,
color: isDarkMode
? Colors.white.withOpacity(0.1)
: Colors.grey[200]),
// 隐私设置
_buildSimpleNavigationSetting(
title: 'privacySettings'.tr, // 隐私设置
subtitle: 'privacySettingsInfo'.tr, // 管理数据收集和权限
icon: Icons.shield_outlined,
iconBgColor: isDarkMode
? Colors.purple[900]!.withOpacity(0.3)
: Colors.purple[100]!,
iconColor: isDarkMode
? Colors.purple[300]!
: Colors.purple[600]!,
titleColor: isDarkMode ? Colors.white : null,
subtitleColor: isDarkMode ? Colors.white70 : null,
onTap: () {
AppSettings.openAppSettings();
},
isDarkMode: isDarkMode,
)
],
// 隐私设置
_buildSimpleNavigationSetting(
title: 'privacySettings'.tr, // 隐私设置
subtitle: 'privacySettingsInfo'.tr, // 管理数据收集和权限
icon: Icons.shield_outlined,
iconBgColor: isDarkMode
? Colors.purple[900]!.withOpacity(0.3)
: Colors.purple[100]!,
iconColor:
isDarkMode ? Colors.purple[300]! : Colors.purple[600]!,
titleColor: isDarkMode ? Colors.white : null,
subtitleColor: isDarkMode ? Colors.white70 : null,
onTap: () {
AppSettings.openAppSettings();
},
isDarkMode: isDarkMode,
),
// ],
Divider(
height: 1,
@ -599,7 +598,7 @@ class SettingsView extends GetView<SettingsController> {
? Colors.white.withOpacity(0.1)
: Colors.grey[200]),
// 添加权限管理设置项
// 权限管理设置项
_buildSimpleNavigationSetting(
title: 'permissionManagement'.tr, // 权限管理
subtitle: 'permissionManagementInfo'.tr, // 管理应用权限设置

7
local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt

@ -717,7 +717,7 @@ class AzureAsrHelper(private val context: Context) {
if (bytesToWrite < data.size) data.copyOf(bytesToWrite) else data
try {
continuousCallback?.onAudio(finalData)
//continuousCallback?.onAudio(finalData)
pushAudioStream?.write(finalData)
recordfile?.saveAudioDataToWav(finalData)
} catch (e: Exception) {
@ -922,7 +922,6 @@ class AzureAsrHelper(private val context: Context) {
fun onError(error: String)
}
/**
* 连续识别回调接口
*/
@ -954,9 +953,9 @@ class AzureAsrHelper(private val context: Context) {
fun onSessionStopped()
/**
* 返回音频数据
* 返回音频
*
* @param data 音频字节数组
* @param data 识别的音频
*/
fun onAudio(data: ByteArray)

Loading…
Cancel
Save