2010-10-16 12 views
6

Ho un problema, quando provo a registrare e poi riprodurre il file appena registrato. Posso sia registrare che riprodurre il suono ma la qualità puzza. Non è solo brutto è davvero difficile da ascoltare e sembra un po 'come una voce generata dal computer. Io uso l'emulatore SDK andriod. Il codice che imposta la registrazione è simile a questo;Cattiva qualità del suono durante la registrazione/riproduzione di suoni - Android SDK

MediaRecorder recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(path); 
recorder.prepare(); 
recorder.start(); 

E il codice che riproduce il file in seguito è simile a questo;

MediaPlayer mp = new MediaPlayer(); 
mp.reset(); 
mp.setDataSource(path); 
mp.prepare(); 
mp.start(); 

Non so quale parte che rende il suono file audio davvero male o se è solo l'emulatore che lo rende cattivo e che avrebbe funzionato su un telefono vero e proprio.

+0

Ho un file .WAV che suona bene sul mio PC ma suona come se fosse riprodotto su Android. Hai mai risolto il tuo problema? Sto usando esattamente la stessa impostazione di riproduzione che hai descritto sopra. –

risposta

1

Si sta parlando di due oggetti diversi, AudioRecorder e MediaRecorder.

0

AudioRecord accetta una varietà di argomenti che potrebbero influenzare la qualità della registrazione.

Prova a impostare questi nel costruttore:

  • Audio Fonte: MIC
  • Sample rate: 16000
  • Numero di canali: CHANNEL_CONFIGURATION_MONO
  • Formato: ENCODING_PCM_16BIT
  • dimensione del buffer: 16000 * 30 (buffer 30 secondi)

Esempio di codice:

recorder = new AudioRecord(
          MediaRecorder.AudioSource.MIC, 
          16000, 
          AudioFormat.CHANNEL_CONFIGURATION_MONO, 
          AudioFormat.ENCODING_PCM_16BIT, 
          16000*30); 
+0

Grazie mille, ma ho avuto un problema con questo, secondo; http://developer.android.com/reference/android/media/MediaRecorder.html # MediaRecorder() ci dovrebbero essere delle funzioni per questo, ad esempio "setAudioSamplingRate (int samplingRate)", ma non posso usarlo con il mio registratore, semplicemente non esiste ... Puoi dare un esempio di codice come definisci Questo? Grazie mille! – Nick3

+0

La frequenza di campionamento deve essere impostata al momento della prima inizializzazione del registratore. Tutti i parametri nella mia risposta devono essere impostati nel costruttore e quindi lasciati in pace per la durata della sessione di registrazione. –

4

provare questi

recorder = new MediaRecorder(); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);  
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
recorder.setAudioChannels(2); 
recorder.setAudioEncodingBitRate(128); 
recorder.setAudioSamplingRate(44100); 

Incase se trovate questo codice incidente su dispositivi Android di fascia bassa quindi provare a rimuovere setAudioChannels e setAudioSamplingRate.

+0

recorder.setAudioSamplingRate (44100); è più che sufficiente per rendere la voce buona nel codice sopra –

2

Non è solo l'emulatore; suona male anche sul mio Nexus 10.

Simile alla risposta di Marwal di Mohit, è possibile impostare la frequenza di campionamento e il bit rate. 44100 è la frequenza standard di campionamento del CD. La maggior parte dei download audio commerciali sono codificati ad almeno 128000 bit al secondo (non i kilobit al secondo, come mostrato nella risposta di Mohit). Quindi quelli sarebbero buoni valori iniziali. Inoltre, dovresti usare solo un canale, per tagliare le dimensioni del file a metà, a meno che tu non abbia un microfono stereo e abbia bisogno di registrare in stereo.

recorder.setAudioChannels(1); 
recorder.setAudioEncodingBitRate(128000); 
recorder.setAudioSamplingRate(44100); 

Quando ho impostato questi valori, la dimensione e la qualità del file sono aumentate, ma non al livello che preferirei. Forse il rumore rimanente proviene da un microfono scadente sul mio dispositivo, ma non l'ho testato con un microfono esterno o confrontato con altri dispositivi.

Problemi correlati