piper_phonemizer_plugin 0.0.1 copy "piper_phonemizer_plugin: ^0.0.1" to clipboard
piper_phonemizer_plugin: ^0.0.1 copied to clipboard

PlatformAndroid

A new phonemizer for running piper voice models for android.

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:piper_phonemizer_plugin/piper_phonemizer_plugin.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  tester();
  runApp(const MyApp());
}

void tester() async {
  final piperPhonemizer = PiperPhonemizerPlugin();
  await piperPhonemizer.initialize();
  piperPhonemizer.setVoice("en");
  final result = piperPhonemizer.getPhonemesString("hello world");
  print("Phonemes : $result");
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _piperPhonemizerPlugin = PiperPhonemizerPlugin();

  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await _piperPhonemizerPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      // home: Scaffold(
      //   appBar: AppBar(
      //     title: const Text('Plugin example app'),
      //   ),
      //   body: Center(
      //     child: Text('Running on: $_platformVersion\n'),
      //   ),
      // ),

      home: PhonemeWidget(platformVersion: _platformVersion),
    );
  }
}


class PhonemeWidget extends StatefulWidget {
  final String platformVersion;
  const PhonemeWidget({super.key, required this.platformVersion});

  @override
  State<PhonemeWidget> createState() => _PhonemeWidgetState();
}

class _PhonemeWidgetState extends State<PhonemeWidget> {
  final TextEditingController _textController = TextEditingController();
  String _phonemeOutput = '';
  bool _loading = false;
  PiperPhonemizerPlugin piperPhonemizer = PiperPhonemizerPlugin();

  @override
  void initState() {
    super.initState();
    _initializePhonemizer();
  }

  Future<void> _initializePhonemizer() async {
    try {
      await piperPhonemizer.initialize();
    } catch (e) {
      debugPrint("Error initializing Phonemizer: $e");
    }
  }



  Future<void> _convertToPhonemes() async {
    setState(() => _loading = true);
    try {
      final inputText = _textController.text;
      if (inputText.isEmpty) return;

      piperPhonemizer.setVoice("en"); //set voice according to the convenience.

      final phonemes = piperPhonemizer.getPhonemesString(inputText);

      setState(() => _phonemeOutput = phonemes); // join if a list
    } 
    
    catch (e) {
      setState(() => _phonemeOutput = 'Error: $e');
    } 
    
    finally {
      setState(() => _loading = false);
    }
  }

  @override
  void dispose() {
    _textController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Piper compatible phonemizer"), centerTitle: true),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Text(
              "Platform Version : ${widget.platformVersion}",
              style: const TextStyle(fontSize: 16),
            ),

            const SizedBox(height: 10),

            TextField(
              controller: _textController,
              decoration: const InputDecoration(
                labelText: 'Enter text',
                border: OutlineInputBorder(),
              ),
              maxLines: null,
            ),
            const SizedBox(height: 12),
            ElevatedButton(
              onPressed: _loading ? null : _convertToPhonemes,
              child: _loading ? const CircularProgressIndicator() : const Text('Convert to Phonemes'),
            ),
            const SizedBox(height: 16),
            Text(
              _phonemeOutput.isNotEmpty ? 'Phonemes: $_phonemeOutput' : 'Enter text above to get phonemes.',
              style: const TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}
0
likes
150
points
123
downloads

Publisher

unverified uploader

Weekly Downloads

A new phonemizer for running piper voice models for android.

Documentation

API reference

License

MIT (license)

Dependencies

archive, ffi, flutter, path_provider, plugin_platform_interface

More

Packages that depend on piper_phonemizer_plugin

Packages that implement piper_phonemizer_plugin