Jump to content

Talking NPCs


Recommended Posts

https://github.com/jason-kane/coh_npc_voices

 

This is a fairly simplistic python program that watches the City of Heroes chat log file. When it sees a message from an NPC, it uses the windows text-to-speech capability to read out the message. It also notices when you receive a badge and tells you which badge you got.

 

You will need git, python and pip to install.

 

Reddit: 

 

  • Like 2
  • Thanks 1
  • Thumbs Up 2
  • Pizza (Pepperoni) 1
Link to comment
Share on other sites

  • 1 month later

OMFG, the dream! It's happening! It's HAPPENING! 😄 

 

Thanks for posting this, I'm so happy.

..It only takes one Beanbag fan saying that they JRANGER it for the devs to revert it.

Link to comment
Share on other sites

the idea is great, but Windows Text to speech isnt really immersive, but i guess its just a matter of time you or someone else builds upon this and we get voice acting all over CoH

back to the Zukunft

 

@Jkwak

Link to comment
Share on other sites

5 hours ago, jkwak said:

the idea is great, but Windows Text to speech isnt really immersive, but i guess its just a matter of time you or someone else builds upon this and we get voice acting all over CoH

Totally agree; Windows Text for normal human voices is pretty bad.  There is support for both google text-to-speech (better) and ElevenLabs (much better) but it is hard to setup in the current release.  The next will be much better (maybe this weekend); I've added a configuration panel for setting the elevenlabs api key (they allow for a large amount of text-to-speech each month on a free account).  You will also be able to set the default engine to use for unknown voices both for NPC and players.

For NPCs it is easy because they are repetitive and easy to cache to disk.  So a high quality voice is easy to justify.  For players the cache is rarely useful and a little creepy, so I disabled it.  I'm cheap-as-hell, so I'm making it easy to use Windows TTS for players (because it is free and fast) while using the slivers of pennies high quality services for NPCs.
 

One case where Windows TTS is more than fine -- Clockwork.  If anything it is not robotic enough, so I'm wrapping it in vocoder effects.  It's pretty good.  Oh, I can attach..  a work in progress, but here are "Prototype Oscillator" and a Vahzilok "Reaper"; I'm reasonably happy with both these.

  • Like 2
  • Thanks 1
Link to comment
Share on other sites

16 hours ago, VVonder said:

Totally agree; Windows Text for normal human voices is pretty bad.  There is support for both google text-to-speech (better) and ElevenLabs (much better) but it is hard to setup in the current release.  The next will be much better (maybe this weekend); I've added a configuration panel for setting the elevenlabs api key (they allow for a large amount of text-to-speech each month on a free account).  You will also be able to set the default engine to use for unknown voices both for NPC and players.

For NPCs it is easy because they are repetitive and easy to cache to disk.  So a high quality voice is easy to justify.  For players the cache is rarely useful and a little creepy, so I disabled it.  I'm cheap-as-hell, so I'm making it easy to use Windows TTS for players (because it is free and fast) while using the slivers of pennies high quality services for NPCs.
 

One case where Windows TTS is more than fine -- Clockwork.  If anything it is not robotic enough, so I'm wrapping it in vocoder effects.  It's pretty good.  Oh, I can attach..  a work in progress, but here are "Prototype Oscillator" and a Vahzilok "Reaper"; I'm reasonably happy with both these.

You're doing amazing work.

 

Would it be possible to offer the ability to switch TTS provider please, in case ElevenLabs goes out of business?

 

..It only takes one Beanbag fan saying that they JRANGER it for the devs to revert it.

Link to comment
Share on other sites

38 minutes ago, Herotu said:

You're doing amazing work.

 

Would it be possible to offer the ability to switch TTS provider please, in case ElevenLabs goes out of business?

 

Thanks.  Right now it has Windows TTS, Google TTS and ElevenLabs, the next easy one is Amazon Polly.  I'm interested in getting Coqui working too.  That would give us another local option but I'm a little worried about resource requirements.  Should be a fun experiment.

The next challenge is that having a bunch of perfectly smooth and clear human voices is great, but many of the foes in-game are very much non-human.  An easy example are the snakes in COV.  They sound terrible because the text-to-speech is trying to pronounce ssspeach like thisss and gets it all wrong.  Most TTS engines support something called SSML which has a phoneme tag that I'll try and manipulate to get the right sounds.

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later

 

New demo; much better voice quality and some visibility of the UI.  It can now use (all at once) ElevenLabs, Amazon Polly, Google Text-to-Speech and Windows TTS.

 

Yeah, you can't actually hear me talking for a lot of this because I didn't balance the volume very well.  Bonus.

 

I still have some bugs to squish before I cut another windows installable release, maybe this weekend.  But.. it's pretty slick now and once you're used to it the game feels a little hollow without it.

 

  • Like 1
Link to comment
Share on other sites

  • 1 month later

This again?  

 

 

This is the text to speech system, but with a translation layer.  You select a language (Chinese, French, German, Japanese, Korean, Spanish), and it will translate every [NPC], [TEAM] and Tell message and speak it out loud.  It's a bit of a parlor trick, but it may really open the game up to people with weak English.

  • Like 1
Link to comment
Share on other sites

  • 1 month later

Thanks; I'm making steady progress.  Latest new stuff is https://github.com/jason-kane/coh_npc_voices/pull/12

 

I rewrote all (well, most) of the widgets to use customtkinter instead of vanilla tk/ttk.  I added Azure and OpenAI voice support.

 

Some simple quality of life things; like when you level up it says congrats and tells you what level you've just reached.

 

Some more utility things, like the damage table, it's for the current session:

image

 

(^ I've fixed the accuracy numbers and 'special' cosmetics); this is to provide you some hard numbers to decide on the best slotting based on your play style.  I need to give the latest build two or three more game sessions to make sure it is stable and I'll cut a new release.

  • Like 1
Link to comment
Share on other sites

I am thinking this could be ... more generic. You know? Like, for example, something you run in the background to read party chat in SWTOR, or give voice to the voiceless in games like World of Warcraft or Oldschool Runescape or something - there could be a lot of interest. A lot of applications.. The possibilities are, vast!

 

Does it have to read a log? Maybe it could read memory locations, looking for bytes within the ascii character range? Might be rather complicated ... might need pre-sets for each game.


I'm getting excited, I should just shut up and be grateful for the work that you've done and continue to do. I don't want to put you off with silly grandiose fantasies.

..It only takes one Beanbag fan saying that they JRANGER it for the devs to revert it.

Link to comment
Share on other sites

17 minutes ago, Herotu said:

I am thinking this could be ... more generic. You know? ...

 

Does it have to read a log? Maybe it could read memory locations, looking for bytes within the ascii character range? Might be rather complicated ... might need pre-sets for each game.

 

 

The generic approach would look a little like Vortex (https://www.nexusmods.com/about/vortex/); each game would need just enough code to locate the right logs, tail them properly, differentiate the things that should be spoken from the things that can be ignored and choose voices for each speaker.  I fiddled with reading from CoH memory instead or in additions to logs; I want to get current xp, arch/primary/secondary etc.. but I haven't gotten that working.  I can send key presses to the game, I've only barely scratched the surface of the options that opens up.

 

  • Like 2
Link to comment
Share on other sites

Needs a lot of work, but there's definitely potential here.  In the present form, I find it more distracting than immersive.  But I'm sure you've got a lot of tweaking that you mean to do before releasing a finished product.  Looking forward to see what you come up with! 👍

Link to comment
Share on other sites

New release is available:  https://github.com/jason-kane/coh_npc_voices/releases/tag/v3.2

 

No big features -- mostly incremental improvements.  Oh, it will try and send a /tell to itself, it isn't nefarious.  It's the best way I have to determine your archetype, level, primary and secondary -- it sends a tell to yourself then catches the $variable expanded version in the chat log.

 

I'm going to try and stick to adding polish and stability to the current features for the next release or two.

 

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...