Ich arbeite an Audio Recorder App mit AudioRecord
nicht MediaRecorder
. Ich schreibe diesen Code zu notieren:Android AudioRecord - Record Audio mit kleiner Dateigröße
private void startRecord(){
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
try {
file.createNewFile();
OutputStream outputStream = new FileOutputStream(file);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
DataOutputStream dataOutputStream = new DataOutputStream(bufferedOutputStream);
int minBufferSize = AudioRecord.getMinBufferSize(8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
short[] audioData = new short[minBufferSize];
AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
minBufferSize);
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();
}
}
Es funktioniert gut. aber ich habe eine große Dateigröße. Ich nahm ungefähr 1 Minute auf und ich hatte Datei mit Größe ungefähr 1.2M.
Ich versuchte MediaRecorder
mit diesem Code zu verwenden:
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setOutputFile(fileName);
mMediaRecorder.prepare();
mMediaRecorder.start();
Es ist toll und aufgezeichnet 5 Minuten mit der Dateigröße etwa 500 K oder weniger. Aber ich muss AudioRecord verwenden, weil ich eine Aufgabe auf Audio byteweise anwenden muss.
Kann ich die gleiche Dateigröße in MediaRecorder
haben, wenn ich AudioRecord
verwende?
Vielen Dank.
Perfekt, danke für Ihre Antwort hilft es mir sehr, das eigentliche Problem zu bestimmen. Ich werde Lahme Bibliothek versuchen. Wenn Sie ein Beispiel für manuelle Komprimierung haben, werde ich Ihnen dankbar sein. Nochmals vielen Dank –
Wenn Sie nur innerhalb Ihrer Anwendung mit aufgenommenem Sound arbeiten würden, können Sie einfach einen beliebigen Komprimierungsalgorithmus verwenden, der bereits in Java implementiert wurde ([zip] (http://www.oracle.com/technetwork/articles/java/compress-1565076) .html)) oder Bibliotheken von Drittanbietern. Ich kann nicht wirklich gute Lösung für rohen Sound empfehlen, überprüfen Sie diese Seite: [Schnelle Komprimierung in Java] (http://stackoverflow.com/questions/3918189/fast-compression-in-java) – akaish