Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated wyoming package broke wyoming-piper tts #9

Open
jerblack opened this issue Feb 19, 2024 · 6 comments
Open

Updated wyoming package broke wyoming-piper tts #9

jerblack opened this issue Feb 19, 2024 · 6 comments

Comments

@jerblack
Copy link

I reinstalled the requirements.txt for wyoming-piper last night and it installed a new version of the wyoming package, and now I am no longer able to use TTS from the HA interface and my piper service is logging the following:

Feb 19 08:09:11 wyoming python3[19699]: ERROR:asyncio:Task exception was never retrieved
Feb 19 08:09:11 wyoming python3[19699]: future: <Task finished name='Task-10' coro=<AsyncEventHandler.run() done, defined at /home/jeremy/wyoming-piper/.venv/lib/python3.10/site-packages/wyoming/server.py:28> exception=FileNotFoundError(2, 'No such file or directory')>
Feb 19 08:09:11 wyoming python3[19699]: Traceback (most recent call last):
Feb 19 08:09:11 wyoming python3[19699]:   File "/home/jeremy/wyoming-piper/.venv/lib/python3.10/site-packages/wyoming/server.py", line 35, in run
Feb 19 08:09:11 wyoming python3[19699]:     if not (await self.handle_event(event)):
Feb 19 08:09:11 wyoming python3[19699]:   File "/home/jeremy/wyoming-piper/wyoming_piper/handler.py", line 98, in handle_event
Feb 19 08:09:11 wyoming python3[19699]:     wav_file: wave.Wave_read = wave.open(output_path, "rb")
Feb 19 08:09:11 wyoming python3[19699]:   File "/usr/lib/python3.10/wave.py", line 509, in open
Feb 19 08:09:11 wyoming python3[19699]:     return Wave_read(f)
Feb 19 08:09:11 wyoming python3[19699]:   File "/usr/lib/python3.10/wave.py", line 159, in __init__
Feb 19 08:09:11 wyoming python3[19699]:     f = builtins.open(f, 'rb')
Feb 19 08:09:11 wyoming python3[19699]: FileNotFoundError: [Errno 2] No such file or directory: ''

Here's the command line I am using in my wyoming-piper service, and I didn't see any other flags to specify another folder, so I don't know what it's looking for in the error. Any ideas? :

ExecStart=/home/jeremy/wyoming-piper/.venv/bin/python3 -m wyoming_piper \
  --piper '/home/jeremy/.local/bin/piper' \
  --uri 'tcp://0.0.0.0:10200' \
  --data-dir /config/piper_data/data \
  --download-dir /config/piper_data/download \
  --voice en_US-libritts_r-medium \
  --max-piper-procs 16 \
  --update-voices
@synesthesiam
Copy link
Contributor

The error suggests that the piper executable isn't generating WAV files.

@jerblack
Copy link
Author

The following troubleshooting changed nothing.

  • Removing piper and readding in the Wyoming integation.
  • Moving out of my LXD container back to my piper installation in the standard Docker image
  • Deleting all the downloaded voices and having them redownload
  • Switching voices, although this did reveal that the only voice that couldn't use TTS was the one I wanted to use, which was libritts_r medium. All the others worked.

In the end, what fixed it was just restarting Home Assistant on my Pi. Now libritts_r works and the error above no longer occurs. Closing issue.

@jerblack
Copy link
Author

Update:
Thinking that the problem might be resolved fully by the reboot, I removed the working Docker instance of Piper from the Wyoming integration and moved back to my LXD install of Piper, and the problem occurred again with that FileNotFoundError error. This persisted even after another HA reboot.

This was my setup process in LXD (which I use just like a regular Linux VM). I am just cloning the repo and running script/setup for each of the three components:

git clone https://github.com/rhasspy/wyoming-faster-whisper.git
cd wyoming-faster-whisper
script/setup
cd ~
git clone https://github.com/rhasspy/wyoming-piper.git
~/wyoming-piper/script/setup
script/setup
cd~
git clone https://github.com/rhasspy/piper.git
~/piper/src/python_run
script/setup

And then from ~/piper/src/python_run I run the following to verify Piper is working:

echo the time is now 3 15 pm | script/piper --cuda --model /config/piper_data/data/en_US-libritts_r-medium.onnx --output_file time.wav

This works fine, and generates the appropriate wav file, which I verified matches the text I gave, so Piper is definitely able to generate TTS audio.
I'm not doing any other special configuration beyond my service file, which looks like this:

# /etc/systemd/system/piper.service
[Unit]
Description=Piper
After=network.target

[Service]
Type=simple
User=jeremy
WorkingDirectory=/home/jeremy/wyoming-piper
ExecStart=/home/jeremy/wyoming-piper/script/run \
  --piper '/home/jeremy/piper/src/python_run/script/piper' \
  --uri 'tcp://0.0.0.0:10200' \
  --data-dir /config/piper_data/data \
  --download-dir /config/piper_data/download \
  --voice en_US-libritts_r-medium \
  --max-piper-procs 16 \
  --update-voices
Restart=always

[Install]
WantedBy=multi-user.target

The main difference as far as I understand at the moment is that the older Docker version is running an older version of wyoming-piper that works, and what I'm using in LXD is just the latest from your repo, which is where the FileNoteFoundError is generated.
All of this is probably putting the cart before the horse though since the main reason I wanted to do any of this was to get Cuda support in Piper, but the merge request to add it looks like it's been sitting idle waiting on final approval for the last two months now. Why is that by the way?

@jerblack jerblack reopened this Feb 26, 2024
@synesthesiam
Copy link
Contributor

All of this is probably putting the cart before the horse though since the main reason I wanted to do any of this was to get Cuda support in Piper, but the merge request to add it looks like it's been sitting idle waiting on final approval for the last two months now. Why is that by the way?

I'd love to get CUDA support in, but I have a lot on my TODO list. For wyoming-piper and CUDA, I think a better approach than rhasspy/wyoming-piper#5 would be to switch over to the Python version of piper and install onnxruntime-gpu into the container.

@OCT0PUSCRIME
Copy link

OCT0PUSCRIME commented Mar 28, 2024

@jerblack

Did you ever figure this out? I am having the same issue. The wav files do not seem to be coming into the /tmp directory as they are supposed to. I followed the same process in my LXC that you did. I believe it worked the first command I sent, but after a couple changes it no longer seems to be working. Another note, from homeassistant > media > TTS > Piper I can send a request like "test". I get the same logs as you with file not found. If I try to send "test" again I don't even get any further logs. I have to change the message to something new, like "testing" to see the file not found error again.

Edit: I guess just not using piper-tts in the python env works fine. For now I will use the binary. Also following on the CUDA support.

@ms1design
Copy link

FYI @synesthesiam @jerblack here's how I got it to work in our Home Assistant integration project on Jetson devices: dusty-nv/jetson-containers@4ba5dc4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants