Flutter文本转语音插件flutter_azure_tts的使用

Flutter文本转语音插件flutter_azure_tts的使用

Flutter实现Microsoft Azure Cognitive Text-To-Speech API,可以将文本转换为语音。下面我们将介绍如何在Flutter项目中使用flutter_azure_tts插件。

开始使用

初始化框架

首先,需要初始化插件,并提供你的订阅密钥和区域。你还可以选择启用日志记录功能以便调试。

import 'package:flutter_azure_tts/flutter_azure_tts.dart';

void initializeAzureTTS() async {
  await FlutterAzureTts.init(
      subscriptionKey: "YOUR SUBSCRIPTION KEY",
      region: "YOUR REGION",
      withLogs: true); // enable logs
}

获取可用的语音列表

接下来,获取所有可用的语音列表,并选择一个适合你需求的语音。

Future<void> getAvailableVoices() async {
  final voicesResponse = await FlutterAzureTts.getAvailableVoices();

  // 列出所有可用的语音
  print("${voicesResponse.voices}");

  // 选择一个英语神经语音
  final voice = voicesResponse.voices
      .where((element) => element.locale.startsWith("en-"))
      .toList(growable: false).first;

  print("Selected Voice: $voice");
}

请求音频文件

选定语音后,可以生成一段文本对应的音频文件。

Future<void> generateAudio(String text, dynamic voice) async {
  TtsParams params = TtsParams(
      voice: voice,
      audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
      rate: 1.5, // 可选语速,默认值为1.0
      text: text);

  final ttsResponse = await FlutterAzureTts.getTts(params);

  // 获取音频字节数据
  final audioBytes = ttsResponse.audio.buffer.asByteData(); // 你可以将这些字节保存到文件以备后用

  print("Audio bytes generated successfully.");
}

使用语音风格和角色(可选)

对于支持风格和角色的语音,你可以指定一个风格或角色来增强语音效果。

Future<void> generateStyledAudio(String text, dynamic voice) async {
  TtsParams params = TtsParams(
      voice: voice,
      audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
      text: text,
      role: VoiceRole.SeniorMale,
      style: StyleSsml(
          style: VoiceStyle.cheerful,
          styleDegree: 1.5), // 可选强度,范围从0.01到2.0
  );

  final ttsResponse = await FlutterAzureTts.getTts(params);

  final audioBytes = ttsResponse.audio.buffer.asByteData();
  print("Styled Audio bytes generated successfully.");
}

完整示例

以下是一个完整的示例,展示了如何初始化、获取语音列表并生成音频:

import 'package:flutter_azure_tts/flutter_azure_tts.dart';
import 'package:flutter_azure_tts/src/ssml/style_ssml.dart';

void main() async {
  try {
    // 初始化配置
    await FlutterAzureTts.init(
      subscriptionKey: "YOUR SUBSCRIPTION KEY",
      region: "YOUR REGION",
      withLogs: true,
    );

    // 获取可用的语音
    final voicesResponse = await FlutterAzureTts.getAvailableVoices();
    final voices = voicesResponse.voices;

    // 打印所有可用的语音
    print("$voices");

    // 选择一个支持风格和角色的英语神经语音
    final voice = voicesResponse.voices
        .where((element) =>
            element.locale.startsWith("en-") &&
            element.roles.isNotEmpty &&
            element.styles.isNotEmpty)
        .toList(growable: false)
        .first;

    // 生成文本对应的音频
    final text = "Microsoft Speech Service Text-to-Speech API is awesome";

    TtsParams params = TtsParams(
        voice: voice,
        audioFormat: AudioOutputFormat.audio16khz32kBitrateMonoMp3,
        rate: 1.5,
        style: StyleSsml(style: voice.styles.first, styleDegree: 1.5),
        role: VoiceRole.OlderAdultMale,
        text: text);

    final ttsResponse = await FlutterAzureTts.getTts(params);

    // 获取音频字节
    final audioBytes = ttsResponse.audio.buffer.asByteData();
    print(
        "Audio size: ${(audioBytes.lengthInBytes / (1024 * 1024)).toStringAsPrecision(2)} Mb");
  } catch (e) {
    print("Something went wrong: $e");
  }
}

通过上述步骤,你应该能够成功地在Flutter应用中集成文本转语音功能。确保替换"YOUR SUBSCRIPTION KEY"和"YOUR REGION"为你自己的Azure订阅密钥和区域。


更多关于Flutter文本转语音插件flutter_azure_tts的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本转语音插件flutter_azure_tts的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 flutter_azure_tts 插件在 Flutter 应用中实现文本转语音(Text-to-Speech, TTS)功能的代码示例。flutter_azure_tts 是一个 Flutter 插件,它允许你使用 Microsoft Azure 的文本转语音服务。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_azure_tts 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_azure_tts: ^最新版本号 # 请替换为最新的版本号

然后,运行 flutter pub get 来安装依赖。

接下来,配置 Azure 认知服务。你需要一个 Azure 订阅和配置好的 Azure 认知服务资源,以获取订阅密钥和服务区域。

以下是一个完整的 Flutter 应用示例,展示如何使用 flutter_azure_tts

import 'package:flutter/material.dart';
import 'package:flutter_azure_tts/flutter_azure_tts.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Azure TTS Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AzureTTSDemo(),
    );
  }
}

class AzureTTSDemo extends StatefulWidget {
  @override
  _AzureTTSDemoState createState() => _AzureTTSDemoState();
}

class _AzureTTSDemoState extends State<AzureTTSDemo> {
  final AzureTTS azureTTS = AzureTTS();
  String subscriptionKey = '你的Azure订阅密钥';
  String serviceRegion = '你的服务区域'; // 例如 'westus'

  @override
  void initState() {
    super.initState();
    // 初始化 Azure TTS 客户端
    azureTTS.initialize(subscriptionKey, serviceRegion);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Azure TTS Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '输入你想转换的文本:',
            ),
            TextField(
              decoration: InputDecoration(border: OutlineInputBorder()),
              onChanged: (text) {
                // 当文本改变时,调用合成语音函数
                _synthesizeSpeech(text);
              },
            ),
          ],
        ),
      ),
    );
  }

  Future<void> _synthesizeSpeech(String text) async {
    try {
      // 调用合成语音方法
      var result = await azureTTS.synthesizeSpeech(text, language: 'zh-CN', gender: 'Female', voiceName: 'Microsoft Server Speech Text to Speech Voice (zh-CN, HuihuiNeural)');
      // 播放合成的音频
      if (result != null && result.isNotEmpty) {
        final byteData = Uint8List.fromList(result);
        await playAudio(byteData);
      }
    } catch (e) {
      print('Error synthesizing speech: $e');
    }
  }

  Future<void> playAudio(Uint8List audioBytes) async {
    final audioPlayer = AudioCache();
    await audioPlayer.loadFromMemory(audioBytes);
    audioPlayer.play();
  }
}

注意事项

  1. 依赖音频播放:上面的代码示例使用了 audioplayers 包来播放音频。你需要在 pubspec.yaml 中添加该依赖:

    dependencies:
      audioplayers: ^最新版本号 # 请替换为最新的版本号
    
  2. 错误处理:在生产环境中,请确保添加适当的错误处理逻辑,以处理网络错误、认证失败等情况。

  3. Azure 配置:确保你替换了 subscriptionKeyserviceRegion 为你自己的 Azure 认知服务配置。

  4. 音频权限:在 Android 和 iOS 上,你可能需要在 AndroidManifest.xmlInfo.plist 中添加相应的音频播放权限。

这个示例展示了基本的文本转语音功能,你可以根据需要进行扩展,例如添加更多的语言选项、不同的语音等。

回到顶部