Потоковое воспроизведение или воспроизведение mp3 с онлайн-адреса в приложении - PullRequest
0 голосов
/ 11 мая 2011

Привет, мне нужно воспроизвести mp3-файл из API Google texttospeech на здесь . Но я не могу понять, как это сделать, вот код, который я пытался, но не сработал.

String url = "http://translate.google.com/translate_tts?tl=en&q="+URLEncoder.encode(home)+URLEncoder.encode(scores[0])+
        URLEncoder.encode(away)+URLEncoder.encode(scores[1]);

    player = new MediaPlayer();
    try {
        BufferedInputStream bis = new BufferedInputStream(new java.net.URL(url).openStream());
        FileOutputStream fos = new FileOutputStream("/sdcard/tts_google.mp3");
        BufferedOutputStream bos = new BufferedOutputStream(fos,1024);
        byte [] data = new byte[1024];

        int x=0;
        while((x=bis.read(data,0,1024))>=0){
            bos.write(data,0,x);               
        }
        player.reset();
        player.start();

    } catch (MalformedURLException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

Этот выдает ошибку,

05-11 14:04:12.967: ERROR/MediaPlayer(20055): start called in state 1
05-11 14:04:12.967: ERROR/MediaPlayer(20055): error (-38, 0)
05-11 14:04:12.967: DEBUG/MediaPlayer(20055): start() out
05-11 14:04:12.997: ERROR/MediaPlayer(20055): Error (-38,0)

А вот второй код, который я попробовал

httpClient = new DefaultHttpClient();
    handler = new BasicResponseHandler();
    httpGet = new HttpGet(url);

    try {

        String response = httpClient.execute(httpGet,handler);
        Log.d("SCORODROID", response);

        File mp3File = File.createTempFile("tts_result",".mp3");
        FileOutputStream fos = new FileOutputStream(mp3File);
        fos.write(response.getBytes());

        FileInputStream fis = new FileInputStream(mp3File);
        player.setDataSource(fis.getFD());

        player.prepare();
        player.start();

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Этот также дает ошибку

05-11 14:05:40.687: ERROR/MediaPlayer(20132): Unable to to create media player
05-11 14:05:40.687: WARN/System.err(20132): java.io.IOException: setDataSourceFD failed.: status=0x80000000
05-11 14:05:40.687: WARN/System.err(20132):     at android.media.MediaPlayer.setDataSource(Native Method)
05-11 14:05:40.687: WARN/System.err(20132):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:891)
05-11 14:05:40.687: WARN/System.err(20132):     at com.scoredroid.android.LiveScoreFetcher.ttsGoogle(LiveScoreFetcher.java:80)
05-11 14:05:40.687: WARN/System.err(20132):     at com.scoredroid.android.SpeechInputActivity$GetMetadata.onPostExecute(SpeechInputActivity.java:151)
05-11 14:05:40.687: WARN/System.err(20132):     at com.scoredroid.android.SpeechInputActivity$GetMetadata.onPostExecute(SpeechInputActivity.java:1)
05-11 14:05:40.687: WARN/System.err(20132):     at android.os.AsyncTask.finish(AsyncTask.java:417)
05-11 14:05:40.687: WARN/System.err(20132):     at android.os.AsyncTask.access$300(AsyncTask.java:127)
05-11 14:05:40.687: WARN/System.err(20132):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
05-11 14:05:40.687: WARN/System.err(20132):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-11 14:05:40.687: WARN/System.err(20132):     at android.os.Looper.loop(Looper.java:143)
05-11 14:05:40.687: WARN/System.err(20132):     at android.app.ActivityThread.main(ActivityThread.java:4196)
05-11 14:05:40.687: WARN/System.err(20132):     at java.lang.reflect.Method.invokeNative(Native Method)
05-11 14:05:40.687: WARN/System.err(20132):     at java.lang.reflect.Method.invoke(Method.java:507)
05-11 14:05:40.687: WARN/System.err(20132):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-11 14:05:40.687: WARN/System.err(20132):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

Кстати, ни один из примеров кода не помог мне?

1 Ответ

0 голосов
/ 11 мая 2011

Вы уверены, что получаете MP3 оттуда? Вы проверили ответ? Например, использование wget в консоли дает ошибку 403, хотя она работает в браузере по этому URL. Так что, вероятно, Google блокирует такие запросы (то есть не из браузера). Если вы хотите просто использовать TTS, попробуйте использовать встроенный движок TTS .

...