2014-05-01 133 views
-3

我正在開發android音樂鋼琴應用程序。在我使用的Soundpool播放音頻,但我怎麼能記錄聲音,使用戶能唱能帶錄製音樂一起錄製自己的歌聲跳動音樂應用程序的錄音聲音

+0

您需要展示您所做的工作以及問題所在。不要指望爲你完成這項工作。 – slybloty

回答

0

下面是WO功能中的一個記錄和其他播放

private void startRecord(){ 
     File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); 

     try { 
     file.createNewFile(); 
     recording=true; 
     OutputStream outputStream = new FileOutputStream(file); 
     BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); 
     DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream); 

     int minBufferSize = AudioRecord.getMinBufferSize(SmpleRate, 
     AudioFormat.CHANNEL_IN_MONO, 
     AudioFormat.ENCODING_PCM_16BIT); 

     short[] audioData = new short[minBufferSize]; 

     AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 
       SmpleRate, 
     AudioFormat.CHANNEL_IN_MONO, 
     AudioFormat.ENCODING_PCM_16BIT, 
     minBufferSize); 

     AudioManager audio=(AudioManager)this.getSystemService(Context.AUDIO_SERVICE); 
     audio.setMicrophoneMute(true); 
     //int sessionId=audioRecord.getAudioSessionId(); 
    // NoiseSuppressor.create(sessionId); 
     audioRecord.startRecording(); 

     while(recording){ 
     int numberOfShort = audioRecord.read(audioData, 0, minBufferSize); 
     for(int i = 0; i < numberOfShort; i++){ 
     dataOutputStream.writeShort(audioData[i]); 
     } 
     } 

     audioRecord.stop(); 
     dataOutputStream.close(); 

     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

    } 


void playRecord(){ 

    File file = new File(Environment.getExternalStorageDirectory(), "test.pcm"); 

     int shortSizeInBytes = Short.SIZE/Byte.SIZE; 

    int bufferSizeInBytes = (int)(file.length()/shortSizeInBytes); 
    short[] audioData = new short[bufferSizeInBytes]; 

    try { 
    InputStream inputStream = new FileInputStream(file); 
    BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); 
    DataInputStream dataInputStream = new DataInputStream(bufferedInputStream); 

    int i = 0; 
    while(dataInputStream.available() > 0){ 
    audioData[i] = dataInputStream.readShort(); 
    i++; 
    } 

    dataInputStream.close(); 

    AudioTrack audioTrack = new AudioTrack(
    AudioManager.STREAM_MUSIC, 
    SmpleRate, 
    AudioFormat.CHANNEL_OUT_MONO, 
    AudioFormat.ENCODING_PCM_16BIT, 
    bufferSizeInBytes, 
    AudioTrack.MODE_STREAM); 

    audioTrack.play(); 
    audioTrack.write(audioData, 0, bufferSizeInBytes); 


    } catch (FileNotFoundException e) { 
    e.printStackTrace(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 
+0

什麼是採樣率? – user3592848

+0

這裏我們把整數值。您可以使用44100代替採樣率,因爲這可以被所有設備識別 – yasiriqbal776