1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Sugestão, como envio o byte[] para converter em um aquivo mp3 ? textToSpeech

Olá tenho o seguinte cenário, tenho uma classe que converter texto para fala usando o api do google e cria o arquivo .mp3 até ai tudo ok tudo sendo feito como deveria. porem eu tenho no meu front end uma aplicação em flex. gostaria da opnião de vcs para saber o que posso fazer, se envio o arquivo para o flex, se envio um byte[] ou como seria a melhor forma de fazer isso, e como faço ? tentei fazer uma implementacao para ver se tocava o audio dentro da mesma classe porem sem sucesso. por favor me deem uma luz.

package servico.comum;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;

/**
Converte texto em voz, gerando um arquivo de saida mp3 de acordo com a linguagem
**/
public class ServicoDeTextoVoz {

    /**
    @param 
           nomeArquivo - Nome para arquivo de saida .mp3
           textoDaFala - Lista de caracteres para verificar se é maior que 100 caracteres
    **/
    private static File criarAudio(String nomeArquivo, List<String> listaDeFalas) {
        try {
            byte[] buffer = new byte[1 << 20];
            File arquivoMP3 = new File(nomeArquivo + ".mp3");
            OutputStream os = new FileOutputStream(arquivoMP3);
            boolean shouldAppend = true;
            //Criar aquivo com todas as falas
            InputStream in = null;
            for (String fraseDeFala : listaDeFalas) {
                URLConnection connection = new URL("http://www.translate.google.com/translate_tts?tl="+ "pt-BR" + "&q=" + fraseDeFala).openConnection();
                connection.setRequestProperty("User-Agent",
                "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.2.30703)");
                connection.connect();
                in = connection.getInputStream();
                int count;
                while ((count = in.read(buffer)) != -1) {
                    os.write(buffer, 0, count);
                    os.flush();
                }
                in.close();
                if (shouldAppend) {
                    os = new FileOutputStream(new File(nomeArquivo + ".mp3"),true);
                    shouldAppend = false;
                }
            }
            in.close();
            os.close();
            System.out.println("Arquivo criado corretamente: " + nomeArquivo );

            return arquivoMP3;

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    private static ArrayList<String> criarFrases(String texto) {
        //substituir espaços em brancos por "+"
        String frasesDoTexto = texto.replaceAll(" ", "+");
        int startIndex = 0;
        ArrayList<String> result = new ArrayList<String>();
        while (startIndex < texto.length() - 1) {
            int endSnippetIndex = finalDaFrase(frasesDoTexto, startIndex);
            String snippet = frasesDoTexto.substring(startIndex, endSnippetIndex);
            if (snippet.length() >= 2) {
                if (snippet.substring(0, 1).equals("+")) {
                    snippet = snippet.substring(1);
                }
            }
            result.add(snippet);
            startIndex = endSnippetIndex;
        }
        return result;
    }

    private static int finalDaFrase(String texto, int inicioTexto) {
        //garantir que a frase seja menor que 100 caracteres.
        String subtext = (texto.substring(inicioTexto).length() > 100) ? 
                texto.substring(inicioTexto, inicioTexto + 100) : 
                    texto.substring(inicioTexto);
        int end = subtext.length();
        if (texto.substring(inicioTexto).length() > 100) {
                while (!subtext.substring(subtext.length() - 1, subtext.length()).equals("+")) {
                    subtext = subtext.substring(0, subtext.length() - 1);
                    end--;
                }
                subtext = subtext.substring(0, subtext.length() - 1);
                end--;
        }
        return end + inicioTexto;
    }

    public static File textoParaVoz(String texto, String nomeDoArquivo){

        ArrayList<String> listaDeFalas = criarFrases(texto);
        return criarAudio(nomeDoArquivo, listaDeFalas);

    }

    public static void tocaAudio() throws IOException{
        String text = "Teste de texto para fala";
        textoParaVoz(text, "teste");
    }

    public static void main(String[] args) throws IOException {
        tocaAudio();
    }

}
  • gostaria de tocar o audio dinamicamente na front-end

    Arautog   19 de mai de 2015
  • nossa alguem sabe de algo ???

    Arautog   19 de mai de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ou faça a sua própria pergunta.