Voice translation Qt

From GCompris
Revision as of 13:38, 8 January 2023 by Animtim (talk | contribs) (Spliting a single recorded file)
Jump to: navigation, search

Status

You can get on this page the status of what's missing for each locale.

Get the voices

You can browse the voices online from git online repository or clone it:

git clone https://invent.kde.org/education/gcompris-data.git

Create your voices directory

First copy the English voices as a template in a new directory with you locale name (e.g. my):

cd gcompris-data/voices
cp -r en my

Provide your voice translation in gcompris-data/voices/my for each English voice.

Recording / Encoding

It is best to choose somebody that speaks and articulate well your language (a teacher is a good candidate).

You can find a lot of practical advices in librivox that can help improve the quality of the recording.

  • You can make the recording with audacity. It is mandatory to use mono wav 16bit/44100Hz to get the best quality/size ratio and because this works for any sound card (If you are using a Zoom H1, configure the DIP switches under it with 'LO CUT=ON', 'AUTO LEVEL=ON', 'REC FORMAT=WAV' and select WAV format 44/16 in the display panel).
  • Save as WAV file
  • Normalize the wav files if necessary. You may use a script like this to normalize the sound:
#!/bin/sh
mkdir normalized
cp *.wav normalized/
cd normalized
for i in *.wav; do
  normalize $i
done
  • In the directory where WAV files are, run:
oggenc -q3 --downmix -a "(name of author) -d "date of recording (YYYY/MM/DD)" -c "copyright=GPL V3+" *.wav

The ogginfo command should display the comment.

  • Copy OGG files in the corresponding directory

Spliting a single recorded file

You can make a recording session in a single file and then split it with Audacity. First step is to change it from stereo to mono (menu Tracks -> Stereo to Mono). Then you can label each word or sentence by selecting it and using the "track->add label at selection" option (ctrl-b).

You can label as many words as the file contains. Try to be precise and avoid unnecessary blank at start and end of words. Once the labels are placed, use the 'File->export multiple" feature (ctrl-shift-l). Select wav format.

In the meta data dialog, put your name in Artist, album title is GCompris, put the Year and add a Copyright tag with the value GPL V3+. You can then click on 'set default' and no more worry about that. You can even in the global configuration in the export option disable the metadata dialog box entirely.

Then normalize the output wav files using the same script as explained in the "Recording / Encoding" section.

Then convert the wav files to ogg using a script like this:

#!/bin/sh
mkdir ogg
for f in *.wav; do
  oggenc -q3 -o ogg/${f%.*}.ogg --downmix $f
  vorbiscomment -w ogg/${f%.*}.ogg -t "ARTIST=<your name here>" -t "TITTLE=GCompris" -t "COPYRIGHT=GPL V3+" -t "DATE=2015"
done 

Tagging

If you don't have the correct tag information in the ogg files, you can retag them with:

#!/bin/sh
for f in *.ogg; do
  vorbiscomment -w $f -t "ARTIST=<you name>" -t "TITTLE=GCompris" -t "COPYRIGHT=GPL V3+" -t "DATE=2015"
done

Normalizing

Volumes of files may mismatch. It is better to normalize the wav files, as explained in the previous sections. Though if you don't have the wav files anymore, it is still possible to do it on the ogg files, but it will not give the same quality as if it was done on the wav files. To normalize the ogg files, you can use a script like this:

#!/bin/sh
for f in *.ogg; do
  normalize-ogg $f
done

Stereo to Mono

Same as normalizing, it is better to convert from Stereo to Mono on the wav files. If you missed this step and only have the ogg files available, you can still convert them in mono with:

#!/bin/sh
for f in *.ogg; do
  oggdec $f 
  oggenc -q3 -o $f --downmix ${f%.*}.wav
  vorbiscomment -w $f -t "ARTIST=<your name here>" -t "TITTLE=GCompris" -t "COPYRIGHT=GPL V3+" -t "DATE=2015"
done

Alphabet

The English alphabet directory contains files named U0030.ogg. These are the voices for each single letter in your locale with a UTF-8 Unicode notation. For example, U+0030 is the character 0, and U+0069 is the character i. You can get the table for each subset.

Warning: We only need the lower case version of each letter. For example, we have U+0061 (letter 'a') but we don't need U+0041 (letter 'A'). Same for accentuated letter.

Lang word list

The lang activity contains a set of about 1000 images originaly comming from the art4apps project and are released under CC-BY-SA. In order to make it available in your language, you must provide a voice recording of each words and an UTF-8 encoded file named content-<your_locale>.json that contains the translation of each word as spoken in the ogg file. The ogg files are in the voice directory <locale>/words and the json file in in the source code under /src/activities/lang/resource/content-<your-locale>.json. If your language has genders it is mandatory to enter them in the recording and the content file.

You can see on a single page the images and their english name.

Shipping

Once done, the easiest way is to tar all this files and send them to the GCompris maintainer.

tar -cvzf voices_my.tgz my

Integration

The voice are packaged in an rcc file. It can be tested by following this instructions.

To create the rcc file, use the script update_voices.sh in gcompris-data/voices (you can comment the lines to generate aac and mp3 versions if you are using linux). It creates all the rcc files for all the langs in .rcc/voices-ogg. To test your creation, copy the files here under $HOME/.cache/KDE/gcompris-qt/data2/voices-ogg and run GCompris with the download option disabled or the version of gcompris.net will overwrite your version if it exists there.

Once done, the generated rcc must be uploaded on our download server by someone with the admin rights.