звуковые волны во время записи в Android - PullRequest
2 голосов
/ 20 декабря 2011

Как реализовать звуковые волны при записи звука в Android ??

в приведенном ниже коде

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

1 Ответ

0 голосов
/ 25 декабря 2011

Хотите объединить записанный звук с предварительно записанным звуком волн?

Если это так, возможно, вы могли бы попытаться создать два звуковых объекта из разных источников. Тогда вы, возможно, могли бы записать в выходной файл через определенные промежутки времени. Один интервал для предварительно записанного и один для нового.

Я на самом деле не знаю, является ли это верным способом сделать это. Как раз то, с чем мой общий подход столкнулся бы с этой проблемой.

...