2012-12-30 1 views
0

안드로이드의 미디어 레코더를 사용하여 오디오를 녹음하려고합니다. 그리고 나서 그것을 연주하고 있습니다. 녹음 된 오디오를 문자열로 변환하려면 버튼을 누르면 일부 기호와 특수 문자가 포함 된 출력이 나옵니다..3gp 오디오 파일 콘텐츠를 텍스트/문자열로 변환하는 방법?

녹음 된 오디오 파일 내용을 텍스트 또는 문자열로 변환하는 방법을 알려주세요.

여기 내 코드

public class AudioRecordTest extends Activity implements OnClickListener 
    { 
    private static final String LOG_TAG = "AudioRecordTest"; 
    private static String mFileName = null; 

    private RecordButton mRecordButton = null; 
    private MediaRecorder mRecorder = null; 

    private PlayButton mPlayButton = null; 
    private MediaPlayer mPlayer = null; 

    Button gettext; 
    TextView getit; 
    String myStr; 
    private void onRecord(boolean start) { 
     if (start) { 
      startRecording(); 
     } else { 
      stopRecording(); 
     } 
    } 

    private void onPlay(boolean start) { 
     if (start) { 
      startPlaying(); 
     } else { 
      stopPlaying(); 
     } 
    } 

    private void startPlaying() { 
     mPlayer = new MediaPlayer(); 
     try { 
      mPlayer.setDataSource(mFileName); 
      mPlayer.prepare(); 
      mPlayer.start(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 
    } 

    private void stopPlaying() { 
     mPlayer.release(); 
     mPlayer = null; 
    } 

    private void startRecording() { 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setOutputFile(mFileName); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     mRecorder.start(); 
    } 

    private void stopRecording() { 
     mRecorder.stop(); 
     mRecorder.release(); 
     mRecorder = null; 
    } 

    class RecordButton extends Button { 
     boolean mStartRecording = true; 

     OnClickListener clicker = new OnClickListener() { 
      public void onClick(View v) { 
       onRecord(mStartRecording); 
       if (mStartRecording) { 
        setText("Stop recording"); 
       } else { 
        setText("Start recording"); 
       } 
       mStartRecording = !mStartRecording; 
      } 
     }; 

     public RecordButton(Context ctx) { 
      super(ctx); 
      setText("Start recording"); 
      setOnClickListener(clicker); 
     } 
    } 

    class PlayButton extends Button { 
     boolean mStartPlaying = true; 

     OnClickListener clicker = new OnClickListener() { 
      public void onClick(View v) { 
       onPlay(mStartPlaying); 
       if (mStartPlaying) { 
        setText("Stop playing"); 
       } else { 
        setText("Start playing"); 
       } 
       mStartPlaying = !mStartPlaying; 
      } 
     }; 

     public PlayButton(Context ctx) { 
      super(ctx); 
      setText("Start playing"); 
      setOnClickListener(clicker); 
     } 
    } 

    public AudioRecordTest() { 
     mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     mFileName += "/audiorecordtest.3gp"; 
    } 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 

     LinearLayout l = (LinearLayout)findViewById(R.id.Component); 
     LinearLayout ll = new LinearLayout(this); 
     ll.setMinimumHeight(90); 
     ll.setMinimumWidth(200); 
     mRecordButton = new RecordButton(this); 
     ll.addView(mRecordButton, 
      new LinearLayout.LayoutParams(
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       0)); 
     mPlayButton = new PlayButton(this); 
     ll.addView(mPlayButton, 
      new LinearLayout.LayoutParams(
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT, 
       0)); 


     l.addView(ll); 
     // setContentView(ll); 

     gettext=(Button) findViewById(R.id.button1); 
     getit=(TextView) findViewById(R.id.textView1); 
     gettext.setOnClickListener(this); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     if (mRecorder != null) { 
      mRecorder.release(); 
      mRecorder = null; 
     } 

     if (mPlayer != null) { 
      mPlayer.release(); 
      mPlayer = null; 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 

     try { 
      myStr= readFileAsString(mFileName); 
      getit.setText(myStr); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 



    } 
    /* read the audio file and convert it in to string but it is in non readable format 
    * 
    */ 
    public static String readFileAsString(String filePath) throws java.io.IOException { 

     BufferedReader reader = new BufferedReader(new FileReader(filePath)); 
     String line, results = ""; 
     while((line = reader.readLine()) != null) 
     { 
      results += line; 
     } 
     reader.close(); 
     return results; 

    } 


    } 

도움이 필요하다.

답변

1

이 질문을 올바르게 이해할 수 있을지 잘 모르겠습니다. toString()가 무엇을 반환 할 것으로 예상됩니까? 녹음 된 음성 단어가 텍스트 표현이면 불행하게도 단순히 toString()을 호출하는 것보다 어렵습니다. 에 당신이 가진 것 그 효과를 달성하기 위해

:

  1. 가하고 .3gp 파일에서
  2. 프로세스 오디오 스트림을 추출하는 음성 인식 API

결과와 오디오 스트림 사용자가 마이크에 대해 말한 내용을 텍스트로 표현한 것입니다. 음성 인식은 일반적으로 매우 복잡한 주제이며 좋은 음성 - 텍스트 변환의 ​​성공은 인식 소프트웨어 자체뿐만 아니라 입력 스트림의 품질에 크게 의존합니다.

관련 문제