Eric Lafortune Posted October 24, 2023 Share Posted October 24, 2023 We already have a few options to convert audio files to speech coefficients, suitable for our beloved speech synthesizer: QBox Pro, BlueWizard, python_wizard, and Praat with ConvertPraatToLpc. It's my pleasure to add yet another option: ConvertWavToLpc. ConvertWavToLpc uniquely applies an accurate simulation of the TMS5200/5220 speech processors, including their approximations/quirks/bugs. The approach is intended to return the best possible speech coefficients for all input audio. It has helped me to improve the vocals in version 2 of my Bad Apple demo. The tool comes with a companion tool ConvertLpcToWav to replay the speech file to an audio file, based on the same simulation of the speech processors. It for example allows you to check how the 8-bit accuracy of the output of the TI speech synthesizer accounts for a great deal of white noise. The development turned out to be a deep rabbit hole with months of research in academic papers and practical implementations. I've explored and included/rejected a range of different techniques, discussed in the documentation. The simulation of the the TMS5200/5220 speech processors is derived from the canonical code by Lord Nightmare and others in Mame. I've converted the code from C++ to Java, refactored it for my purpose, cleaned it up, and documented it. I'm happy with the resulting code. The speech processors have the usual random seeds and stateful lattice filters, but they also interleave interpolation of LPC coefficients between speech frames. As a result, optimizing the LPC coefficients of individual frames remains challenging. The quality of the output still depends on a few settings, for which I've tried to provide sane defaults. ConvertWavToLpc and ConvertLpcToWav are part of my Video Tools for the TI-99/4A. You can find the tools, documentation, and source code on Github. Notably, you can find compiled binaries (for Java 14) in the release section. Enjoy! I'm interested to hear about your experiences. 13 Quote Link to comment Share on other sites More sharing options...
TheMole Posted October 25, 2023 Share Posted October 25, 2023 These are some of the best sounding speech synth conversions I've ever heard, well done! Quote Link to comment Share on other sites More sharing options...
Tursi Posted October 25, 2023 Share Posted October 25, 2023 I'm having trouble getting it to run though. I am not familiar with java, so I tried a few things. I'm working from the binary download on Windows. My Windows log: D:\tools\VideoToolsByEric>java -jar videotools.jar ConvertWavToLpc no main manifest attribute, in videotools.jar D:\tools\VideoToolsByEric>set CLASSPATH=d:\tools\VideoToolsByEric D:\tools\VideoToolsByEric>java ConvertWavToLpc Error: Could not find or load main class ConvertWavToLpc Caused by: java.lang.ClassNotFoundException: ConvertWavToLpc D:\tools\VideoToolsByEric>java --version java 18.0.2 2022-07-19 Java(TM) SE Runtime Environment (build 18.0.2+9-61) Java HotSpot(TM) 64-Bit Server VM (build 18.0.2+9-61, mixed mode, sharing) So then I popped over to Ubuntu: tursilion@Ripper:/mnt/d/tools/VideoToolsByEric$ java -jar videotools.jar ConvertWavToLpc no main manifest attribute, in videotools.jar tursilion@Ripper:/mnt/d/tools/VideoToolsByEric$ export CLASSPATH=/mnt/d/tools/VideoToolsByEric/ tursilion@Ripper:/mnt/d/tools/VideoToolsByEric$ java ConvertWavToLpc Error: Could not find or load main class ConvertWavToLpc Caused by: java.lang.ClassNotFoundException: ConvertWavToLpc tursilion@Ripper:/mnt/d/tools/VideoToolsByEric$ java --version openjdk 11.0.19 2023-04-18 OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1) OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu120.04.1, mixed mode, sharing) It's definitely pebkac, can you give some from from-scratch steps to get it going? Quote Link to comment Share on other sites More sharing options...
Eric Lafortune Posted October 25, 2023 Author Share Posted October 25, 2023 (edited) Java needs slightly different settings to specify the class files. Assuming you have downloaded or built the jar archive, on Windows: set CLASSPATH=d:\tools\VideoToolsByEric\videotools.jar java ConvertWavToLpc ..... On Linux: export CLASSPATH=/mnt/d/tools/VideoToolsByEric/videotools.jar java ConvertWavToLpc ..... (the path contains the jar/zip file name videotools.jar. If it's just a directory, java looks for loose .class files; mostly useful during development) You can also specify the archive with each invocation. On Windows java -cp d:\tools\VideoToolsByEric\videotools.jar ConvertWavToLpc ..... On Linux: java -cp /mnt/d/tools/VideoToolsByEric/videotools.jar ConvertWavToLpc ..... (the option -cp specifies the archive in which to look for ConvertWavToLpc. The alternative option -jar looks for a manifest file inside the archive, in which the name of the executable class is specified. This videotools.jar doesn't have such a manifest, mostly because it contains multiple executable classes to choose from.) Note that the class files have been compiled for Java 14 or higher, so Java 11 will refuse to load them. Edited October 25, 2023 by Eric Lafortune 1 Quote Link to comment Share on other sites More sharing options...
Tursi Posted October 25, 2023 Share Posted October 25, 2023 Ahh, that works! The error messages were such that googling was not giving me anything useful at all, and I didn't even think to check if the -jar command line argument was even correct. Thanks for that! Nice and simple to use, and the results are quite good 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.