2016-12-08 7 views
0

私は、AudioRecordを使ってオーディオを録音するためのアンドロイド(compileSdkVersion 23)アプリを開発しています。その理由は、FFT後にリアルタイムで周波数を取得するためです。アンドロイドのAudioRecordを使用して、録音したサウンドをファイルに保存する方法は?

だけでなく、この作品、私はアンドロイドでaudiorecordのを使って、ファイルに記録された音声を保存するために

どのように(このプロセスでは、周波数を追跡することは不要です。)音を確認するために、音記録を保存する必要がありますか?

したがって、私はAudioRecordを正しく使用していますか?ここで

はコードです:それは可能な使用は、そうでない場合は、新しいファイルに要求している場合は、あなたのファイルをダウンロードし、任意の要求のためにあなたがcahceファイルをチェックするために持っているよりも、キャッシュに保存する必要があり

public class MainActivity extends Activity { 

    int frequency = 8000; 
    int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; 
    int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; 

    AudioRecord audioRecord; 
    RecordAudio recordTask; 

    int blockSize;// = 256; 
    boolean started = false; 
    boolean CANCELLED_FLAG = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     blockSize = 256; 

     final Button btRec = (Button) findViewById(R.id.btRec); 

     btRec.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (started == true) { 
       //started = false; 
        CANCELLED_FLAG = true; 
       //recordTask.cancel(true); 
        try{ 
         audioRecord.stop(); 
        } 
        catch(IllegalStateException e){ 
         Log.e("Stop failed", e.toString()); 

        } 
        btRec.setText("Start"); 

     //   canvasDisplaySpectrum.drawColor(Color.BLACK); 

       } 

       else { 
        started = true; 
        CANCELLED_FLAG = false; 
        btRec.setText("Stop"); 
        recordTask = new RecordAudio(); 
        recordTask.execute(); 
       } 
      } 
     }); 
    } 


    private class RecordAudio extends AsyncTask<Void, double[], Boolean> { 

     @Override 
     protected Boolean doInBackground(Void... params) { 

      int bufferSize = AudioRecord.getMinBufferSize(frequency, 
        channelConfiguration, audioEncoding); 
      audioRecord = new AudioRecord(
       MediaRecorder.AudioSource.DEFAULT, frequency, 
       channelConfiguration, audioEncoding, bufferSize); 
      int bufferReadResult; 
      short[] buffer = new short[blockSize]; 
      double[] toTransform = new double[blockSize]; 
      try { 
       audioRecord.startRecording(); 
      } catch (IllegalStateException e) { 
       Log.e("Recording failed", e.toString()); 

      } 
      while (started) { 
       if (isCancelled() || (CANCELLED_FLAG == true)) { 
        started = false; 
        //publishProgress(cancelledResult); 
        Log.d("doInBackground", "Cancelling the RecordTask"); 
        break; 
       } else { 
        bufferReadResult = audioRecord.read(buffer, 0, blockSize); 

        for (int i = 0; i < blockSize && i < bufferReadResult; i++) { 
         toTransform[i] = (double) buffer[i]/32768.0; // signed 16 bit 
       } 

       //transformer.ft(toTransform); 

       //publishProgress(toTransform); 

       } 

      } 
      return true; 
     } 
    } 

} 
+0

SDカードにあなたのサウンド/歌を保存したいですか? –

+0

はい。ファイルをデバイスに保存したい場合は、いくつか問題がありますか? –

答えて

0

完全なヘルプは私の答えの一つを見てくださいDownload and cache media files

+0

さて、ありがとう!私はあなたの解決策を試みます。 –

関連する問題