简体   繁体   中英

sound waves during recording in android

How to implement sound waves during recording sound in android??

in the below code

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);
}

Do you want to merge your recorded sound with a pre-recorded sound of waves?

If so, maybe you could try to create two sound objects of the different sources. Then you maybe could write to the output file in intervals. One interval for the pre-recorded and one for the fresh one.

I actually don't know if that's even a valid way to do this. Just what my general approach would've been facing this problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM