Paul's Programming Notes     Archive     Feed     Github

Raspberry Pi Text To Speech IRC Service

These are my notes for installing Eastein's announce. It's a IRC bot that will receive a message and do text to speech on the message:


  1. Download announce and extract it to it's own folder.
  2. apt-get install python-irclib
  3. apt-get install python-pip
  4. sudo apt-get install python-dev
  5. apt-get install festival festlex-cmu festlex-poslex festlex-oald libestools1.2 unzip
  6. apt-get install speech-tools
  7. pip install pyzmq --install-option="--zmq=bundled"
    or (if you have easy_install installed):
    easy_install pyzmq
  8. download mediorc and move mediorc into directory
  9. easy_install dnspython
  10. apt-get install mplayer
  11. apt-get install sox
  12. Fix permissions:
    chmod 777 saypitchprase
    chmod 777 pitchphrase2wav

Running The Program:

Run process in background by starting a screen (first navigate to the Announce folder):
  1. (start a new screen)
  2. python announced "tcp://*:4900"
  3. (detach from screen)
  4. (start a new screen)
  5. python announcebot "" "voicebot" "#yourircchannel" "tcp://0:4901"
  6. (detack from screen)
Starting the program using mp3 files in the JSON file (as always, start in the folder which has Announce):

  1. wget (use a real URL with an mp3 file)
  2. nano default.json
  3. enter into the json file: [ ["eye of the tiger", "eye_tiger.mp3"] ]
  4. ctrl+x and save
  5. (start a new screen)
  6. python announced "tcp://0:4900" default.json
  7. (detach from screen)
  8. (start a new screen)
  9. python announcebot "" "voicebot" "#yourircchannel" "tcp://0:4900"
  10. (detach from screen)
  11. now "!say eye of the tiger" in the IRC channel will trigger the mp3


Ensure your Raspberry Pi audio is working:

Testing Festival (create a text file named mytext.txt with some words first):
echo "This is a test." | festival --tts
echo "this is a test" > mytext.txt
text2wave -o myaudio.wav mytext.txt
aplay myaudio.wav

adjust the volume:
or use amixer?


Freaking brilliant tool that converts spreadsheet format things to HTML:

PhoneGap Build - cordova-2.4.0.js

If you're using Phonegap Build, you don't need to include cordova-2.4.0.js or any other specific version of cordova/phonegap. Just use phonegap.js, but you don't actually need to include phonegap.js in the file you upload to Phonegap Build.

Quote from the Phonegap Build site:
"Once you've included the necessary assets, remove the phonegap.js (cordova.js) as Build will automatically inject it during compile time."

Sharepoint Lists Crashing

If your sharepoint lists crash IE as soon as they open, try disabling the following IE addons:
Sharepoint spreadsheet Launcher
Sharepoint export database~

Open File With Excel Macro

This macro will ask the user to input an excel file, then open that excel file:

Sub RunMacro()
Dim vaFiles As Variant
Dim i As Long

vaFiles = Application.GetOpenFilename _
         (FileFilter:="Excel Filer (*.xls),*.xls", _
         Title:="Open File(s)", MultiSelect:=False)

If Not IsArray(vaFiles) Then Exit Sub

With Application
    .ScreenUpdating = False
    For i = 1 To UBound(vaFiles)
        Workbooks.Open vaFiles(i)
    Next i
    .ScreenUpdating = True
End With

End Sub

Java - Swing's Nimbus Look & Feel

Since Java SE 6 Update 10, Java has had an updated interface called Nimbus. Comparison pictures are below.

All I needed to do to use it was add this import to the top of the .java file with my main() method: import javax.swing.UIManager.*;

And this code to the top of the main() method (

public static void main(String[] args) {
try {
    for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(info.getName())) {
} catch (Exception e) {
    // If Nimbus is not available, fall back to cross-platform
    try {
    } catch (Exception ex) {
        // not worth my time
new Controller();



Note: This blog post says it is slightly slower than the default: