-
Notifications
You must be signed in to change notification settings - Fork 0
Computer singing synthesis
brailcom/singing-computer
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Singing Computer ================ Singing Computer is a utility making possible to sing lyrics of score notated in the LilyPond music typesetting system. It is intended to be used especially by visually impaired LilyPond users who need checking of mutual lyrics and notes alignment. This can be done by inserting a newly defined LilyPond command into the LilyPond score definition that generates a song written in a Festival speech synthesis definition file. That file can then be processed with Festival to create a sound file with the song sung. Basic knowledge of LilyPond is expected to be able to work with Singing Computer. If you don't know LilyPond at all, you can read a LilyPond tutorial that is distributed together with LilyPond. * Installation The first step is to ensure the following software is installed: - LilyPond (http://www.lilypond.org) -- a music typesetting system. - Festival (http://www.festvox.org/festival/index.html) -- a speech synthesis system. - Particular language support for Festival. English support is available directly from Festival web pages (http://www.festvox.org/festival/index.html), links to other languages are at http://festlang.berlios.de/languages.html. - Iconv -- character set conversion utility, distributed with GNU libc. The simplest way to install that software should be from your OS distribution packages. For instance, it is contained in the following packages: lilypond, festival, festvox-kallpc16k. After the required software is installed, it is necessary to perform the following installation steps: - Unpack the singing-computer distribution package. - Replace Festival's singing-mode.scm file with the singing-mode.scm file from singing-computer. - Install the festival.ly file to the LilyPond ly/ directory. - Install the festival.scm file to the LilyPond scm/ directory. - Install the `lilysong' file somewhere to your $PATH, e.g. /usr/local/bin/. * Usage Singing Computer defines two new LilyPond commands: \festival and \festivalsyl. They are similar to the \midi command. They have the following form: \include "festival.ly" \festival #"FILE.xml" { \tempo 4 = 100 } Score element containing lyrics must follow the command. The command means that the Festival song description file FILE.xml should be generated for the following piece of music. The defined tempo is 1/4 = 100; it is given to the \festival and \festivalsyl command the same way as to the \midi command. The \festival and \festivalsyl have the same arguments and do the same thing, they only difference is in splitting words to syllables. The \festival command generates whole words in the output FILE.xml, while the \festivalsyl command splits words into syllables according to hyphens specified in the lyrics input. English should use \festival, some other languages (such as Czech) may require using \festivalsyl. The choice of the command has not direct effect on the sound output, but right choice is needed to get the speech (song) synthesis done properly. Single input LilyPond file may contain several occurrences of the \festival and \festivalsyl commands, with output to different .xml files. Look into tests/*.ly files for some basic examples of using the commands. When the input *.ly file is processed with LilyPond, the corresponding XML file (or files) is created (unless an error occurs). This file must then be processed with Festival to create the resulting sound file. You can do that with the help of the `lilysong' script that can be called in one of the following ways: - lilysong [ -p PLAY-PROGRAM ] FILE.xml [ LANGUAGE-CODE-OR-VOICE-NAME [ SPEEDUP ] ] A sound file corresponding to the FILE.xml is created. The LANGUAGE-CODE-OR-VOICE-NAME argument in the call is given the language code (`en' and `cs' are supported) or directly the Festival voice selection function name (such as `voice_kal_diphone' or `voice_czech_ph'). The SPEEDUP optional argument is speedup of the resulting sound (see the "Problems" section below). If the `-p' option is given, the resulting WAV file is played using the given program. - lilysong FILE.ly [ LANGUAGE-CODE-OR-VOICE-NAME ] The input FILE.ly is processed with both LilyPond and Festival. Contingent speedup is automatically detected from the input file. This form of `lilysong' call works only when there is single use of the \festival and \festivalsyl commands in the input file. In both cases the resulting sound file FILE.wav gets created that can be played with any sound player. * List of warnings When Singing Computer meets situation that is likely to indicate error in the input file being processed, it prints one of the following warnings, all marked by the `***Song Warning***' label: Lyrics context not found Lyrics is declared to belong to the given context, but the context was not found. The missing context name is printed after the message. Extra notes Notes without corresponding lyrics were found. These are notes that remained in a context after all lyrics was processed. The context name and its extra notes are printed after the message. Missing lyrics Notes without corresponding lyrics were found. These are notes that remained in a single piece of music after all lyrics was processed. The context name and the extra notes are printed after the message. Extra lyrics Lyrics without corresponding notes was found. This is lyrics that remained in a context after all notes were processed. The context name and its extra lyrics are printed after the message. Unfinished slur Incomplete group of notes that should appear inside a single melisma was detected, some notes at the end are missing. Current context name and the incomplete group of notes are printed after the message. Excessive skip There is a skip in lyrics but the corresponding notes don't fill it completely, some notes are missing. The context name, skip duration, the extra skip part duration and the notes corresponding to the skip are printed after the message. Skip misalignment There is a skip in lyrics but the total duration of the corresponding notes doesn't align with the length of the skip. The context name, skip duration, the extra skip part duration and the notes corresponding to the skip are printed after the message. Slur underrun More melismata finishers than openers were detected. Rests in a slur Rests are present in a slur. The given slur contents are printed after the message. There can also occur messages marked as errors (rather than warnings). These correspond to programming errors and their occurrence should be reported to Singing Computer developers, see Contact below. * Emacs support If you want to use song synthesis support in Emacs in addition to the standard Emacs LilyPond commands, copy the file lilypond-song.el into the directory containing other LilyPond *.el files and add the following line into your ~/.emacs: (require 'lilypond-song) The Emacs singing support adds new commands for singing lyrics synthesized in the \festival and \festivalsyl LilyPond commands: M-x LilyPond-command-sing (C-c C-a) M-x LilyPond-command-sing-and-play (C-c C-q) M-x LilyPond-command-sing-last (C-c C-z) M-x LilyPond-command-clean (C-c C-x) See online documentation of the commands in Emacs for more details. NOTE: When Ecasound with Emacs support is installed, lilypond-song uses it by default. Ecasound Emacs support uses a daemon mode which usually doesn't work so you must to disable it in the ecasound-arguments Emacs variable, e.g. by disabling its "Allow remote connections" option in customize. NOTE: If you let Emacs sing and play MIDI at the same time, you may experience the timidity problem of cutting off initial silences in the MIDI music. This can be fixed by applying the patch file timidity.patch to timidity sources followed by timidity recompilation and reinstallation. Then it's also necessary to add the --preserve-silence option to the LilyPond-midi->wav-command Emacs variable. * Problems Current Festival versions contain a bug that causes Festival crashes or generating incorrect pitch values on pitch levels above 500 Hz. You can work around the bug in the following ways: 1. Applying the patch `festival.patch' on Festival. This is the only well working solution. In the Festival source directory call the command patch -p0 <.../singing-computer/festival.patch and recompile Festival. Note that Festival doesn't compile with g++ 4.0 and later, you must use an older g++ version. 2. Lowering the octave of the generated output by setting the song:*base-octave* LilyPond variable. This is necessary to do before the first use of the \festival and \festivalsyl commands in the following way: #(set! song:*base-octave* 3) Implicit value of the song:*base-octave* variable is 5. The setting above causes lowering the song pitch by 2 octaves. 3. Lowering the pitch of the output together with slowing it down and then resampling it to the right pitch. This way is somewhat more complicated. The first step is lowering the pitch and slowing down the rate before the first use of the \festival and \festivalsyl commands in the LilyPond input file: #(set! song:*base-octave-shift* -2) This makes the resulting sound 2 octaves lower and 4 times slower. After the resulting wave file FILE.wav is generated it can be resampled with the command sox FILE.wav RESAMPLED.wav 4 This way you get the song in the right octave, but the result is of very low quality. Note that Festival is generally unable to produce good speech synthesis results of very high pitches with the currently available diphone databases. * Contact You can send questions, bug reports and other things you'd like to tell us to the mailing list singing-computer@lists.freebsoft.org.
About
Computer singing synthesis
Topics
Resources
Stars
Watchers
Forks
Packages 0
No packages published