Für ein Homeautomatisations Projekt mit Raspberry Pi, brauchte ich mp3 Dateien für die Ansage. Damit alles lokal läuft, und ich nicht die mp3 Dateien per Web jedesmal erzeugen bzw. laden muss, habe ich mal eben 1000 mp3 Dateien erzeugt. Jede mit dem jeweiligen Inhalt bzw. Ansage in deutsch in Mono mit 44khz in 16bit mit der Zahl aus dem Dateinamen. Jede Datei ist nur so um die 25 Kb groß.
Also alle Zahlen von 0 – 1000. Das Ergebnis ist hier nun kostenlos zum Downloaden in einer gezippten Datei mp3-1-1000.zip (14,8 MB).
Hier eine Hörprobe der 777.mp3 Datei:
Mit diesen Dateien, kann nun leicht eine Ansage von Systemdaten bzw. Temperaturen oder Flugdaten erfolgen.
Wie habe ich die nun alle erzeugt?
Mit der folgenden JUnit Methode:
1 2 3 4 5 6 7 8 9 10 11 |
@Test void textToMp3Text1000() { try { for (int i = 0; i < 1001; i++) { Konvert.textToMp3(API_KEY, i + ".mp3", "" + i); } } catch (Exception e) { System.err.println("Error: " + e.getMessage()); } } |
Hier die Konvert.java Klasse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package de.wenzlaff.sound; import java.io.FileOutputStream; import com.voicerss.tts.AudioCodec; import com.voicerss.tts.AudioFormat; import com.voicerss.tts.Languages; import com.voicerss.tts.VoiceParameters; import com.voicerss.tts.VoiceProvider; /** * Beispiel für Text to MP3 Datei. * * Lib Download von http://www.voicerss.org/sdk/java.aspx * * @author Thomas Wenzlaff * */ public class Konvert { /** * Methode erstellt eine MP3 Datei aus dem Text * * @param text der Inhalt der MP3 Datei * @param dateiname der Name der MP3 Datei * @throws Exception bei Fehler */ public static void textToMp3(String key, String dateiname, String text) throws Exception { VoiceProvider tts = new VoiceProvider(key); VoiceParameters params = new VoiceParameters(text, Languages.German); params.setCodec(AudioCodec.MP3); params.setFormat(AudioFormat.Format_44KHZ.AF_44khz_16bit_mono); params.setBase64(false); params.setSSML(false); params.setRate(0); byte[] voice = tts.speech(params); FileOutputStream fos = new FileOutputStream(dateiname); fos.write(voice, 0, voice.length); fos.flush(); fos.close(); } } |
Für die Umwandlung und das SDK habe ich den kostenlosen Service verwendet, wie auch hier schon mal beschrieben
Anschließend, habe ich noch alle Dateien mit meinem Script getaggt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash # # Thomas Wenzlaff # # Das Script tag-mp3-files.sh zum Taggen von mp3 Dateien im ./mp3 Verzeichnis. # # cd ./mp3 || exit echo "Tagge alle ./mp3/*.mp3 Dateien." for i in *.mp3 ; do dateiname=$(echo "${i}" | sed 's/.mp3$//') echo "${i}" id3v2 -t "Ansage der Zahl $dateiname" -T "1" -A "wenzlaff.de" -a "Thomas Wenzlaff" -y "2018" -c "$dateiname" -g 39 "${i}" done |
Dafür muss auf dem Raspberry Pi das id3v2 Programm installiert sein. Das kann leicht mit
1 |
sudo apt-get install id3v2 |
durchgefürt werden. Mit dem können die Tags für die mp3 Dateien wie folgt gesetzt werden, wie die man Page zeigt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
ID3V2(1) User Command ID3V2(1) NAME id3v2 - Adds/Modifies/Removes/Views id3v2 tags, converts/lists id3v1 tags SYNOPSIS id3v2 [ OPTION ] [ FILE ] OPTIONS -h, --help Display help and exit -f, --list-frames Display all possible frames for id3v2 -L, --list-genres Lists all id3v1 genres -v, --version Display version information and exit -l, --list Lists the tag(s) on the file(s) -R, --list-rfc822 Lists using an rfc822-style format for output -d, --delete-v2 Deletes id3v2 tags -s, --delete-v1 Deletes id3v1 tags -D, --delete-all Deletes both id3v1 and id3v2 tags -C, --convert Converts id3v1 tag to id3v2 -a, --artist ARTIST Set the artist information -A, --album ALBUM Set the album title information -t, --song SONG Set the song title information -c, --comment DESCRIPTION:COMMENT Set the comment information -g, --genre num Set the genre number -y, --year num Set the year -T, --track num/num Set the track number/(optional) total tracks NOTE You can set the value for any id3v2 frame by using '--' and then frame id For example: id3v2 --TIT3 Monkey! file.mp3 would set the "Subtitle/Description" frame to "Monkey!". |
Mit dem Programm kann man auch leicht die Metainfos abfragen. Z.B. mit id3v2 -l 777.mp3 für die mp3 Datei 777.mp3 von oben:
Oder in iTunes:
mit ein paar Details:
und infos über die Datei: