Gå til innhold

Hva bruker dere til TTS?


Anbefalte innlegg

Jeg har brukt Vera litt og der kunne man bruke sonos enheter for tts avspilling.

Jeg kunne også bruke denne type url`r for å få norsk uttalelse:

 

http://translate.google.com/translate_tts?tl=no&q=Det%20er%20meldt%20lettskyet%20v%C3%A6r,%20n%C3%A5%20er%20det%2012%20grader%20ute.%20forvent%2018%20grader%20senere%20i%20dag.

 

Med Homeseer så får jeg også til tts på sonos, men med en kjip engelsk stemme.

Lenke til kommentar
Videoannonse
Annonse

Ja, så posten din på HS-forumet, og det var jo en spennende måte å gjøre det på. :)

Jeg tror imidlertid du bryter noen bruksvilkår hos Google Translate så en offisiell støtte fra HS tror jeg ikke du finner. Men umulig å få til burde det ikke være, i utgangspunktet er det jo kun snakk om å laste ned filen å pushe det til Sonos (for deg) eller Squeezebox (for meg).

 

Jeg personlig synes det er bedre å høre på en god engelsk stemme enn en dårlig norsk stemme (á la Google Translate), og selv med en "skikkelig" norsk stemme så er de engelske bedre. I tillegg kan jeg jo ikke svare maskinen på norsk, jeg må snakke engelsk. Det var rart å høre norsk, men svare på engelsk så jeg byttet. Kjøpte Neospeech "Paul" en gang for mange år siden da den var på tilbud.

 

Jeg har til nå brukt speech til annonsering, som f.eks.

- "There's somebody at the door" når det ringer på

- "It's time for bed" når det nærmer seg leggetid og det fremdeles er lys i stua og/eller TVen er på.

- "No really! It's time for bed!" 10 minutter senere og lyset fremdeles er på...

- "Washer or dryer is done" når vaskemaskin/tørketrommel

- "Kid 1 is making noise" basert på lydsensor på barnesoverom 1

- "Kid 2 is making noise" (se over)

- "Remember to prepare trashcans for tomorrow morning" dagen før søppelbilen kommer

... og en del annet småsnacks.

 

 

Fermate her på forumet har brukt TTS mye, og inspirert av han og denne posten har jeg også begynt å sette det litt mer opp. Det er litt stilig å si "start irrigation" til mobilen, og så blir hagen vannet. (Nå skjer jo det likevel "automatisk" i år...)

Lenke til kommentar

Svare tilbake kommer vi nok ikke til å gjøre, Jeg synes de engelske stemmene som følger med er forferdelige :) Og vil heller ha en norsk.

 

Mulig man bryter noen retningslinjer, men det ganske mange plugins/api`er rundt omkring som baserer seg på nettopp denne tjenesten for TTS.

 

Jeg fant et annet innlegg fra deg på HS forumet, der du bruker 

dette for å laste ned en fil.

My.Computer.Network.DownloadFile("http://someurl.com/somefile.jpg", "c:\local_filename.jpg"

Vet du om en funksjon for å laste ned en stream til en mp3 fil, da kan jeg jo spille den av umiddelbart med sonos pluginen,

 

Jeg fant et eksempel som bruker node.js, men skulle gjerne fått brukt dette fra HS/VBscript/.NEt

function tryDownloadTTS(phrase, language, callback) {
  // Use Google tts translation service to create a mp3 file
  var tts_request = 'http://translate.google.com/translate_tts?ie=UTF-8&q=' + phrase + '&tl=' + language;

  // Construct a filesystem neutral filename
  var filename = crypto.createHash('sha1').update(phrase).digest('hex') + '-' + language + '.mp3';
  var filepath = path.resolve(webroot, 'tts', filename);

  // If not already downloaded request translation
  fs.stat(filepath, function (err, stat) {
     if (err) {
        console.log('Downloading new tts message file: ' + filepath);
        var file = fs.createWriteStream(filepath);
        var request = http.get(tts_request, function (response) {
            response.pipe(file);
            file.on('finish', function () {
              file.end();
              callback(true, filename);
            });
        }).on('error', function (err) {
          console.error('could not download file', filename, err);
          fs.unlink(dest);
          callback(false);
        });
     } else {
        console.log('Using cached tts message file: ' + filename);
        callback(true, filename);
     }
Lenke til kommentar

Okay, da kan du jo laste ned direkte og lagre det som MP3 det også.

Dim speakThis as String = "Dette er en norsk tekst"
Dim remoteFile as String = "http://translate.google.com/translate_tts?tl=no&q="  & speakThis
Dim localFile as String = "c:\tts.mp3"

'Download the file
My.Computer.Network.DownloadFile(remoteFile, localFile)

 
 
Hvis du vil ha det i et script som tar tekstlinjen din som parameter så kan vi gjøre dette:

Sub Main(Byval input as Object)
    Dim speakThis as String = input.ToString
    Dim remoteFile as String = "http://translate.google.com/translate_tts?tl=no&q="  & speakThis
    Dim localFile as String = "c:\tts.mp3"

    'Download the file
    My.Computer.Network.DownloadFile(remoteFile, localFile)
End Sub

... som du da kaller slik:

79t5t.jpg

 

Fungerer fint. :)

Lenke til kommentar

Nytt script:

Sub Main(Byval input as Object)
    Dim speakThis as String = hs.ReplaceVariables(input.ToString)
    Dim remoteFile as String = "http://translate.google.com/translate_tts?tl=no&q=" & speakThis
    Dim localFile as String = "c:\Users\Magnus\Desktop\tts.mp3"

    'Download the file
    My.Computer.Network.DownloadFile(remoteFile, localFile, "", "", False, 3000, True)
End Sub

... med $$DVR:1085: fungerte det fint. Den oversetter nevnte replacement variables, og overskriver filen hvis den kjøres. Det eneste du da trenger er å huke av for "Wait for script to finish before continuing" før du pusher mp3-filen videre til Sonos. :)

tts.mp3

Endret av Moskus
Lenke til kommentar

Jeg hadde tenkt å legge inn sonos play funksjonen i bunn av scriptet..Men det er kankje lite hensiktsmessig. Mtp hvordan det skalerer når man begynner å få en del forskjellige events man vil ha TTS på. Må tenke litt på dette.

 

Kan man ha flere ting i input/parameter feltet?  Hørtes slik ut på lydklippet du la ut.

 

f.eks bygge hele strengen der. "Det er" && $$DVR:123: && "grader utendørs"  (usikker på syntaks for VB)

Lenke til kommentar

f.eks bygge hele strengen der. "Det er" && $$DVR:123: && "grader utendørs"  (usikker på syntaks for VB)

Det fine med HS sine replacement variables er at du legger dem direkte i hele strengen. Så ditt eksempel blir da:

"Det er $$DVR:123: grader utendørs"

Som gjør at du dermed kan kombinere flere som dette:

"Det er $$DVR:123: grader utendørs og $$DVR:321: grader innendørs."

(men ellers er det kun ett &-tegn for å binde vb.net-strenger, eller du kan bruke + som i C#).

Endret av Moskus
Lenke til kommentar

 

f.eks bygge hele strengen der. "Det er" && $$DVR:123: && "grader utendørs"  (usikker på syntaks for VB)

Det fine med HS sine replacement variables er at du legger dem direkte i hele strengen. Så ditt eksempel blir da:

"Det er $$DVR:123: grader utendørs"

Som gjør at du dermed kan kombinere flere som dette:

"Det er $$DVR:123: grader utendørs og $$DVR:321: grader innendørs."

(men ellers er det kun ett &-tegn for å binde vb.net-strenger, eller du kan bruke + som i C#).

 

Det betyr da at hele feltet "replacement variables" blir tatt med inn som 1 parameter? (input.toString)

Jeg kan ikke sende med flere argumenter? f.eks om jeg vil ha et generisk TTS script, og bruke volum, sonos-player, språk etc som argumenter?

 

kvasi-kode: TTS.vb /string "Det er $$dvr:123 grader ute" /lan "no" /volume "60" /player "sonos1" 

Endret av MirusMentis
Lenke til kommentar

Scripts tar KUN ett argument: "input" i mitt tilfellet. (Det må av en eller annen grunn være av typen "Object", selv om alle scripts sender en string.)

 

Skal du sende flere argumenter må du bygge en string parser for det, men det er ikke særlig vanskelig. Se eksempel under:

Sub Main(Byval input as Object)
    Dim variables() as String = input.ToString.Split("|")

    Dim speakThis as String = hs.ReplaceVariables(variables(0))
    Dim useLAN as Boolean = variables(1)
    Dim volume as Integer = variables(2)
    Dim playerName as String = variables(3)

    Dim remoteFile as String = "http://translate.google.com/translate_tts?tl=no&q=" & speakThis
    Dim localFile as String = "c:\Users\Magnus\Desktop\tts.mp3"

    'Download the file
    My.Computer.Network.DownloadFile(remoteFile, localFile, "", "", False, 3000, True)

    'Do something clever with the other variables here...
End Sub

Method er fremdeles Main.

Parameter er dette: Dette er strengen din med $$DVR:123: variabler|False|60|sonos1

 

.... absolutt ikke testet, men jeg kan ikke se noen feil (mulig jeg må putte inn CBol() og CInt()))

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...