GithubHelp home page GithubHelp logo

Voice list management about mimic1 HOT 4 OPEN

mycroftai avatar mycroftai commented on May 29, 2024
Voice list management

from mimic1.

Comments (4)

forslund avatar forslund commented on May 29, 2024

Disclamer: I still don't quite understand all the ins and outs of the system so I might be 100% wrong.

Firstly: You are right in that mimic_voice_select() should be able to handle the case of empty list and fall back to a file. Modifying it to allow for an empty voice list shouldn't be much effort at all.

The main reason (as far as I can see) for the set_voice_list() call is to build the different preselected voice executables. I assume this is to make the software easy to use with smaller systems (read embedded devices).

As the voices are linked into the executable (as far as I understand) it doesn't make much sense to remove a voice from the list since it's already compiled and included in the binary. I guess this is the reason there is no remove/delete methods. Do you have any concrete example for when removing a voice might be beneficial?

Should we add an executable called mimic_none which contains no voice list and requires -voice parameter to work?

from mimic1.

m-toman avatar m-toman commented on May 29, 2024

I also don't understand it completely yet, but let's try to :):

I just took a look at tools/make_voice_list- so you can use this tool to create a static voice list given multiple parameters with voice names.

Looking at cmu_us_kal:
There is register_cmu_us_kal which sets the global cst_voice* cmu_us_kal_diphone and also returns it.
There is also unregister_cmu_us_kal which calls delete_voice, which frees memory and unsets
cmu_us_kal_diphone.
Both don't seem to touch the voice list.

Who calls register for the voices in the list?
And when you unregister a voice, access using mimic_voice_select() will result in... ?
Unregistering is probably useful when you load lot of voices from files and your application runs for a longer time (e.g. as a smartphone app).

I don't know if someone might need a mimic_none executable, personally I always integrated flite(+hts_engine) directly into other applications and directly retrieved the waveforms.

You are right, it would probably be the easiest solution to just have mimic_voice_select() deal with empty lists.

from mimic1.

forslund avatar forslund commented on May 29, 2024

Yes learning is fun!

I see what you mean. I never looked far enough to see that the unregister functions are actually used and not just for academic purposes. I'm still not sure about their usefulness, since most of the voice data is precompiled the unregistring a voice won't do much difference. (I think)

But as long as there is use cases for the unregister case the voice list should also be updated.

For the mimic excutable the register functions are called from main() using the set voice_list() in main/mimic_voice_list.c (generated by tools/make_voice_list).

Requiring a voice list with at least one voice is terrible if you use the software as a library if you want to use voices from file!

I say this results in two tasks:

  1. allow empty voice lists
  2. handle removal of voice in a good way

from mimic1.

forslund avatar forslund commented on May 29, 2024

I did some basic work to allow empty voice lists that can be reviewed and tested in the branch no-voice-list. I currently don't have a good example where this is used but I've updated the unit test and it seem to behave as expected.

from mimic1.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.