2011-12-20 19 views
2

アンドロイドでサウンドを録音する際に音波を実装する方法は?アンドロイドでの録音中に音波が発生する

次のコードで

super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    resultView = (TextView) findViewById(R.id.output); 

    try { 
     // the soundfile 
     File storageDir = new File(Environment 
       .getExternalStorageDirectory(), "com.hascode.recorders"); 
     storageDir.mkdir(); 
     Log.d(APP_TAG, "Storage directory set to " + storageDir); 
     outfile = File.createTempFile("hascode", ".3gp", storageDir); 

     // init recorder 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     recorder.setOutputFile(outfile.getAbsolutePath()); 

     // init player 
     player.setDataSource(outfile.getAbsolutePath()); 
    } catch (IOException e) { 
     Log.w(APP_TAG, "File not accessible ", e); 
    } catch (IllegalArgumentException e) { 
     Log.w(APP_TAG, "Illegal argument ", e); 
    } catch (IllegalStateException e) { 
     Log.w(APP_TAG, "Illegal state, call reset/restore", e); 
    } 

    btRecord = (Button) findViewById(R.id.btRecord); 
    btRecord.setOnClickListener(handleRecordClick); 

    btPlay = (Button) findViewById(R.id.btPlay); 
    btPlay.setOnClickListener(handlePlayClick); 

} 

private final OnClickListener handleRecordClick = new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (!recording) { 
      startRecord(); 
     } else { 
      stopRecord(); 
     } 
    } 
}; 

private final OnClickListener handlePlayClick = new OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (!playing) { 
      startPlay(); 
     } else { 
      stopPlay(); 
     } 
    } 
}; 

private void startRecord() { 
    Log.d(APP_TAG, "start recording.."); 
    printResult("start recording.."); 
    try { 
     recorder.prepare(); 
     recorder.start(); 
     recording = true; 
    } catch (IllegalStateException e) { 
     Log 
       .w(APP_TAG, 
         "Invalid recorder state .. reset/release should have been called"); 
    } catch (IOException e) { 
     Log.w(APP_TAG, "Could not write to sd card"); 
    } 
} 

private void stopRecord() { 
    Log.d(APP_TAG, "stop recording.."); 
    printResult("stop recording.."); 
    recorder.stop(); 
    recorder.reset(); 
    recorder.release(); 
    recording = false; 
} 

private void startPlay() { 
    Log.d(APP_TAG, "starting playback.."); 
    printResult("start playing.."); 
    try { 
     playing = true; 
     player.prepare(); 
     player.start(); 
    } catch (IllegalStateException e) { 
     Log.w(APP_TAG, "illegal state .. player should be reset"); 
    } catch (IOException e) { 
     Log.w(APP_TAG, "Could not write to sd card"); 
    } 
} 

private void stopPlay() { 
    Log.d(APP_TAG, "stopping playback.."); 
    printResult("stop playing.."); 
    player.stop(); 
    player.reset(); 
    player.release(); 
    playing = false; 
} 

private void printResult(String result) { 
    resultView.setText(result); 
} 
+0

どれでもこれに答えることができます – Ramz

+0

質問には意味がありません。あなたは音波を実装せず、デバイスはそれを記録します。また、[サンプルコード](http://sscce.org/)は最小限に抑える必要があります(完全な例を作成するためにはできるだけ短くしないことを意味します)。 – outis

答えて

0

あなたは波のあらかじめ録音された音声を使って録音した音をマージしたいですか?

もしそうなら、異なるソースの2つのサウンドオブジェクトを作成しようとする可能性があります。次に、出力ファイルに間隔で書き込むことができます。事前録音のための1つの間隔と新鮮な1つの間隔。

実際にこれが有効な方法であるかどうかはわかりません。私の一般的なアプローチはこの問題に直面していたでしょう。

+0

はい、あなたは正しいです。私はサンプルのコードを私に渡します。私はウェブを検索しますが、解決策を見つけることはできません。 – Ramz

関連する問題