Hi,
Bad news that you failed - what went wrong and what was the workaround?
Thanks for the useful links, I'll go back to them if my approach fails.
Right now I'm stuck on a 'Broken pipe' exception while writing a stream from 
the TTS-generated file to the console where Lame executes.
The approach is to execute Lame in a console which converts the inputstream  
from PCm to mp3. The inputstream is generated from the file which the TTS 
engine is still writing to.
It is the 
bouts.write(b); 
that generates the "broken pipe" exception.

Here is the code if anyone wants to help
brgds
Andreas

String command = "/bin/bash -c  \"/usr/bin/lame -r -x -m m -b 32 -s 22.05 - - > 
output.mp3\" ";
                log.info("COMMAND: "+command );
                
                BufferedOutputStream bouts=null;
                BufferedInputStream bfins=null; 
                BufferedReader br2=null;
                BufferedReader input=null; 
                
                try {
                    Runtime rt = Runtime.getRuntime();
                    Process pr = rt.exec(command);                           
                    bouts=new BufferedOutputStream(pr.getOutputStream());//will 
use this stream to send data to Lame
                    File tmpFile = new File(tmpOutputFileNamePath);// this is 
the file where data is being written from the TTS
                    while(tmpFile.exists()==false)
                    {
                        log.info("File does not exist yet... going to sleep" ); 
       
                        Thread.sleep(500);
                    }
                    bfins = new BufferedInputStream(new 
FileInputStream(tmpFile));
                    
                    int b=0;
                    int noOfBytesAvailable=0;
                    // Read chunks of bytes and write them to the Lame input 
stream
                    while(ttsThreadObj.isAlive()) // TODO might miss some data 
when the thread has finished
                    {
                        noOfBytesAvailable= bfins.available();
                        if(noOfBytesAvailable>0)
                        {
                            log.info(noOfBytesAvailable +" bytes available" );  
  
                            for( ;noOfBytesAvailable>0;noOfBytesAvailable--)    
          
                            {
                                b=bfins.read();                                
                                bouts.write(b);
                            }  
                        }
                        else {
                            log.info("Nothing available..." );          
                        }
                    }



--- On Tue, 9/8/09, Aleksandar Kostadinov <ava...@friendofpooh.com> wrote:

> From: Aleksandar Kostadinov <ava...@friendofpooh.com>
> Subject: Re: [mp3encoder] text to speech application - will lame solve my 
> problem?
> To: "MP3 encoders development list" <mp3encoder@minnie.tuhs.org>
> Date: Tuesday, September 8, 2009, 10:36 AM
> I have once tried to make a TTS
> engine write to a pipe file and have
> lame read from the pipe file but that failed badly. I found
> a
> workaround so didn't find a fix.
> 
> Is this Linux? You could try some magic with ALSA. For
> example writing
> to file or memory and have lame read from there. As well
> I've heard
> sound servers are also quite capable (pulseaudio, etc.).
> 
> And btw for me encoding is often at 50x on my old laptop so
> I'm not
> sure why encoding for you takes so much time.
> 
> On Tue, Sep 8, 2009 at 10:44 AM, Andreas Karlsson<andreas_k...@yahoo.com>
> wrote:
> > Hi guys,
> > I'm into writing an application in JAVA that takes the
> output from a TTS (Text to speech) engine and outputs that
> as a mp3 stream on a webpage.
> > My problem is the TTS-engine generating raw PCM as
> output and I have to start sending the mp3-stream before the
> TTS is done since 10 second of speeach takes 10 second to
> generate.
> > I read some parts from the LAME documentation and I'm
> into trying calling the command line version of LAME (linux)
> from within my program with something like
> > cat PCMFileUnderConstruction | lame -r -m m -b 32 -s
> 22.05 - - > output.mp3
> >
> > The raw PCM is sampled with 22.05 kHz.
> >
> > Will this work, reading from a file that the TTS is
> still generating?
> > I want Lame to process the content being written to
> that file until the file PCMFileUnderConstruction is
> closed.
> >
> > brgds
> > Andreas
> >
> >
> >
> >
> >
> > _______________________________________________
> > mp3encoder mailing list
> > mp3encoder@minnie.tuhs.org
> > https://minnie.tuhs.org/mailman/listinfo/mp3encoder
> >
> _______________________________________________
> mp3encoder mailing list
> mp3encoder@minnie.tuhs.org
> https://minnie.tuhs.org/mailman/listinfo/mp3encoder
> 



      
_______________________________________________
mp3encoder mailing list
mp3encoder@minnie.tuhs.org
https://minnie.tuhs.org/mailman/listinfo/mp3encoder

Reply via email to