2016-01-29 17 views
7

Sto tentando di registrare audio su Android e di riscontrare problemi con la qualità, rispettivamente, il formato scelto.Differenza di qualità audio su Kitkat/Lollipop

Io uso la seguente configurazione

mr=new MediaRecorder(); 
mr.setAudioSource(MediaRecorder.AudioSource.MIC); 
mr.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
mr.setOutputFile("somepath"); 
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 

Questo codice restituisce tuttavia risultati molto diversi su due dispositivi in ​​esecuzione diverse versioni di Android (4.4.4 e 5.1.1).

Quando guardo le intestazioni dei file, mostra diversi formati per entrambi i file (3gp4 su 4.4.4 - mp42 su 5.1.1). VLC tuttavia "insiste" su entrambi utilizzando AAC, ma mostra frequenze di campionamento molto diverse, 8k per il file 4.4.4 e 48k per 5.1.1.

Qualcuno un'idea perché?

+0

Cosa diavolo ha a che fare con XML? –

risposta

1

tenta di impostare tutto questo:

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); //I would use MediaRecorder.AudioEncoder.AMR_NB 
recorder.setAudioEncodingBitRate(16); 
recorder.setAudioSamplingRate(44100); 
recorder.setOutputFile(outputFile.getAbsolutePath()); 
recorder.prepare(); 
recorder.start(); 

Oppure utilizzare librerie esterne: http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/android/releases/RehearsalAssistant_0_8_2/src/urbanstew/RehearsalAssistant/

Cambiando registratore:

RehearsalAudioRecorder recorder = new RehearsalAudioRecorder(RehearsalAudioRecorder.RECORDING_UNCOMPRESSED, MediaRecorder.AudioSource.MIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT); 
recorder.setOutputFile(outputFile.getAbsolutePath()); 
recorder.prepare(); 
recorder.start(); 

UPDATE

controllare anche questo:

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
if (Build.VERSION.SDK_INT >= 10) { 
    recorder.setAudioSamplingRate(44100); 
    recorder.setAudioEncodingBitRate(96000); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
} else { 
    // older version of Android, use crappy sounding voice codec 
    recorder.setAudioSamplingRate(8000); 
    recorder.setAudioEncodingBitRate(12200); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
} 
recorder.setOutputFile(file.getAbsolutePath()); 
try { 
    recorder.prepare(); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 

Sembra che i dispositivi con SDK inferiore a 10 non possano registrare una buona qualità.

+0

Ho già provato a impostare la frequenza di campionamento ma sembrava ignorarlo. Proverò inoltre a impostare il bit rate. Per quanto riguarda AMR_NB, questo mi darebbe una qualità audio altrettanto cattiva su tutti i dispositivi. Perché preferisci? – user5854159

+0

è più probabile che si comporti allo stesso modo su tutti i dispositivi e non è così male. –

+0

Ho ancora bisogno di provare a ** specificatamente ** impostare la velocità in bit, ma nei miei test finora sembrava che AMR_NB fosse molto più ovattato della sua controparte MP4 più chiara. – user5854159

Problemi correlati