0

オーディオファイルを再生するために使用されるアプリケーションを実装しています(テキストから音声への出力で、に保存されていmnt/sdcard/audiofiles/audio.mp3ます)。MediaPlayer を使用してこれを再生しようとすると、エラーが発生します。

コード:

MediaPlayer  mMediaPlayer = new MediaPlayer();
try {
  mMediaPlayer.setDataSource("/mnt/sdcard/audiofiles/audio01.mp3");
  mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (IllegalStateException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
mMediaPlayer.start();

エラー:

  02-05 13:11:40.859: I/SynthProxy(286): setting pitch to 100<br>
  02-05 13:11:40.898: E/MediaPlayer(15651): error (1, -2147483648)<br>
  02-05 13:11:40.898: W/System.err(15651): java.io.IOException: Prepare failed.: status=0x1<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.media.MediaPlayer.prepare(Native Method)<br>
  02-05 13:11:40.898: W/System.err(15651):  at com.example.testmedai1.MainActivity$MySpeech.onInit(MainActivity.java:93)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.speech.tts.TextToSpeech$1.onServiceConnected(TextToSpeech.java:451)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.app.ActivityThread$PackageInfo$ServiceDispatcher.doConnected(ActivityThread.java:1247)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection.run(ActivityThread.java:1264)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.os.Handler.handleCallback(Handler.java:587)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.os.Handler.dispatchMessage(Handler.java:92)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.os.Looper.loop(Looper.java:123)<br>
  02-05 13:11:40.898: W/System.err(15651):  at android.app.ActivityThread.main(ActivityThread.java:4627)<br>
  02-05 13:11:40.898: W/System.err(15651):  at java.lang.reflect.Method.invokeNative(Native Method)<br>
  02-05 13:11:40.898: W/System.err(15651):  at java.lang.reflect.Method.invoke(Method.java:521)<br>
  02-05 13:11:40.898: W/System.err(15651):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)<br>
  02-05 13:11:40.898: W/System.err(15651):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)<br>
  02-05 13:11:40.898: W/System.err(15651):  at dalvik.system.NativeStart.main(Native Method)<br>
  02-05 13:11:40.898: E/MediaPlayer(15651): start called in state 0<br>
  02-05 13:11:40.898: E/MediaPlayer(15651): error (-38, 0)<br>
  02-05 13:11:40.918: E/MediaPlayer(15651): Error (-38,0)<br>                                        

編集1:

これは私が試しているコードの合計です。button1 をクリックすると、オーディオ ファイルが作成されます。DDMS->File Exploring を使用してファイルを確認し、デスクトップに保存して再生しました。正常に動作しています。しかし、実用的にアクセスしてプレイしようとすると、エラーが発生しました。

 package com.example.testmedai1;

 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.HashMap;


 import android.media.MediaPlayer;
 import android.os.Bundle;
 import android.os.Environment;
 import android.app.Activity;
 import android.speech.tts.TextToSpeech;
 import android.speech.tts.TextToSpeech.OnInitListener;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.Toast;

 public class MainActivity extends Activity {

Button store, play;
EditText input;
String speakTextTxt;
TextToSpeech mTts;
private String path;
HashMap<String, String> myHashRender = new HashMap<String, String>();
String tempDestFile ;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    store = (Button) findViewById(R.id.button1);
    play = (Button) findViewById(R.id.button2);
    input = (EditText) findViewById(R.id.editText1);
    store.setOnClickListener(new OnClickListener()  {

        public void onClick(View v) {
          
            
            speakTextTxt = "Hello world Hello world Hello world Hello world Hello world";
            HashMap<String, String> myHashRender = new HashMap<String, String>();
            myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, speakTextTxt);

            String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath();
            Log.d("MainActivity", "exStoragePath : "+exStoragePath);
            File appTmpPath = new File(exStoragePath + "/audiofiles/");
            boolean isDirectoryCreated = appTmpPath.mkdirs();
            Log.d("MainActivity", "directory "+appTmpPath+" is created : "+isDirectoryCreated);
            String tempFilename = "audio01.mp3";
            tempDestFile = appTmpPath.getAbsolutePath() + File.separator + tempFilename;
            Log.d("MainActivity", "tempDestFile : "+tempDestFile);
            new MySpeech(speakTextTxt);
        }
    });
}

class MySpeech implements OnInitListener
{

            String tts;

    public MySpeech(String tts)
    {
        this.tts = tts;
        mTts = new TextToSpeech(MainActivity.this, this);
    }

    public void onInit(int status) 
    {
        Log.d("MainActivity", "onInit() called");
        
        int i = mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile);
        if(i == TextToSpeech.SUCCESS)
        {
                                              
          Toast toast = Toast.makeText(MainActivity.this, "Saved "+i, Toast.LENGTH_SHORT);
          toast.show();   
          
        path = "/mnt/sdcard/audiofiles/audio01.mp3";
     
        //FileInputStream fis;
        
         
        MediaPlayer  mMediaPlayer = new MediaPlayer();
        try {
            //fis = new FileInputStream();
            mMediaPlayer.setDataSource("/mnt/sdcard/audiofiles/audio01.mp3");
            mMediaPlayer.prepare();
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        mMediaPlayer.start();
        }
        else {
            Log.v("MainActivity", "error saving wav file : "+i);
        }
    }
  }
 
}

編集2:

次のコードを試してみましたが、それでも同じエラーが発生します。

class MySpeech implements OnInitListener
{

            String tts;

    public MySpeech(String tts)
    {
        this.tts = tts;
        mTts = new TextToSpeech(MainActivity.this, this);
    }

    public void onInit(int status) 
    {
        Log.d("MainActivity", "onInit() called");
        
        int i = mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile);
        if(i == TextToSpeech.SUCCESS)
        {
                                              
          Toast toast = Toast.makeText(MainActivity.this, "Saved "+i, Toast.LENGTH_SHORT);
          toast.show();   
          
        try 
        {
            audioPlayer("mnt/sdcard/audiofiles" , "audio01.mp3");  // your file location
        } 
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 


            
        }
        else {
            Log.v("MainActivity", "error saving wav file : "+i);
        }
    }
  }

 public void audioPlayer(String path, String fileName) throws IOException
 {        
        if (mp != null) 
        {   System.out.println("before mp.reset() ");
               mp.reset();     
               System.out.println("after mp.reset() ");
          }

        try 
        {
            System.out.println("after path fileName ");
            mp.setDataSource(path+"/"+fileName);
            System.out.println("after path fileName ");
        } 
        catch (IllegalArgumentException e)
        {
            // TODO Auto-generated catch block
            //mp.reset();
            System.out.println("IllegalArgumentException ");
            e.printStackTrace();
        } 
        catch (IllegalStateException e)
        {
            // TODO Auto-generated catch block
            System.out.println("IllegalStateException ");
            e.printStackTrace();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block
            System.out.println("IOException ");
            e.printStackTrace();
        }
        try 
        {
            mp.prepare();
        } catch (IllegalStateException e) 
        {
            // TODO Auto-generated catch block
            System.out.println("On prepare ");
            e.printStackTrace();
        }  
        System.out.println("Before starting");
        mp.start();
       
      
 }
 
4

3 に答える 3

0

これを試して:

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<Button id="@+id/cmd_play"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="Play the music !!!"
   />
</LinearLayout>

MusicPlayer.java

public class MusicPlayer extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);
    // Find the Button from the xml-file.
    Button cmd_play = (Button)this.findViewById(R.id.cmd_play);
    cmd_play.setOnClickListener(new OnClickListener(){
      @Override
      public void onClick(View arg0) {
        MediaPlayer mp = MediaPlayer.create(MusicPlayer.this, R.raw.everlast);
        mp.prepare();
        mp.start();
        // ie. react on the end of the music-file:
        mp.setOnCompletionListener(new OnCompletionListener(){
          // @Override
          public void onCompletion(MediaPlayer arg0) {
          // File has ended !!! <img src="http://www.anddev.org/images/smilies/wink.png" alt=";)" title="Wink" />
          }
        });
      }
    });
  }
}
于 2013-02-05T07:50:28.577 に答える
0

以下の方法でファイルを再生してみてください。

 public class MainActivity extends Activity {
    Button store, play;
    EditText input;
    String speakTextTxt;
    TextToSpeech mTts;
    private String path;
    HashMap<String, String> myHashRender = new HashMap<String, String>();
    String tempDestFile;
    MediaPlayer mMediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    store = (Button) findViewById(R.id.button1);
    play = (Button) findViewById(R.id.button2);
    input = (EditText) findViewById(R.id.editText1);
    mMediaPlayer = new MediaPlayer();
    store.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            speakTextTxt = "Hello world Hello world Hello world Hello world Hello world";
            HashMap<String, String> myHashRender = new HashMap<String, String>();
            myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
                    speakTextTxt);
            String exStoragePath = Environment  .getExternalStorageDirectory().getAbsolutePath();
            Log.d("MainActivity", "exStoragePath : " + exStoragePath);
            File appTmpPath = new File(exStoragePath + "/audiofiles/");
            boolean isDirectoryCreated = appTmpPath.mkdirs();
            Log.d("MainActivity", "directory " + appTmpPath
                    + " is created : " + isDirectoryCreated);
            String tempFilename = "audio01.mp3";
            tempDestFile = appTmpPath.getAbsolutePath() + File.separator
                    + tempFilename;
            Log.d("MainActivity", "tempDestFile : " + tempDestFile); 
             try {
                    audioPlayer(exStoragePath ,tempFilename);  // your file location
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            } 
        }
    });
}
public void audioPlayer(String path, String fileName) throws IOException {
    if (mMediaPlayer != null) {
        mMediaPlayer.reset();
    }
    try {
        mMediaPlayer.setDataSource(path + "/" + fileName);
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        // mp.reset();
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
 }

編集済み:ここで リンクを確認してください。Text to Speech を実装する方法について説明します – Implementing pause and resume in TTS using MediaPlayer .

それがあなたを助けることを願っています..

ありがとう。

于 2013-02-05T08:00:04.403 に答える
0

マニフェスト ファイルに読み取り/書き込みアクセス許可を与えてください。そうでない場合は、それを与えて、以下の例を見てください。

Android の MediaPlayer を使用して、SD カードで mp3 を再生する

于 2013-02-05T08:01:23.737 に答える