All Downloads are FREE. Search and download functionalities are using the official Maven repository.

simpleivr.Text2waveSpeakGenerator.scala Maven / Gradle / Ivy

package simpleivr

import java.nio.channels.Channels
import java.nio.file.Files

import scala.io.Source

import cats.effect.IO


object Text2waveSpeakGenerator extends SpeakGenerator {
  override def apply(speak: Speaks#Speak) =
    speak.files.exists.flatMap {
      case true  => IO.unit
      case false =>
        speak.files.wavFile
          .write { writeChan =>
            IO.blocking {
              println("Falling back to text2wave because audio file does not exist: " + speak.files.supportedAudioFiles)
              val tmpFile = Files.createTempFile("chavrusa-text2wave", ".wav")
              val text2wave = Runtime.getRuntime.exec("/usr/bin/text2wave -scale 1.5 -F 8000 -o " + tmpFile.toString)
              val stdin = text2wave.getOutputStream
              stdin.write(speak.msg.getBytes())
              stdin.flush()
              stdin.close()
              text2wave.waitFor()
              Source.fromInputStream(text2wave.getErrorStream).getLines() foreach println
              Files.copy(tmpFile, Channels.newOutputStream(writeChan))
              ()
            }
          }
          .flatMap { either =>
            IO.blocking {
              either.left.foreach(_.printStackTrace())
            }
          }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy