Domanda

Ho un problema, quando cerco di registrare e poi riprodurre il file che è stato appena registrato. Posso registrare e riprodurre il suono, ma i puzza di qualità. La sua non è solo male è davvero difficile da ascoltare e suonare un po 'come la sua voce generato dal computer. Io uso l'Andriod SDK-emulatore. Il codice che configura l'aspetto di registrazione come questo;

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 a riprodurre il file più avanti appare così;

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.

È stato utile?

Soluzione

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

Altri suggerimenti

Prova 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 incidente sul codice di fascia bassa Android dispositivi quindi provare a rimuovere setAudioChannels e setAudioSamplingRate.

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

Simile alla risposta di Mohit marwal, è possibile impostare la frequenza di campionamento e bit rate. 44100 è la, frequenza di campionamento di qualità CD standard. La maggior parte dei download audio commerciali sono codificati ad almeno 128000 bit al secondo (non kilobit al secondo, come mostrato nella risposta di Mohit). Quindi, quelli sarebbero buoni valori di partenza. Inoltre, si dovrebbe utilizzare un solo canale, a ridurre la dimensione del file a metà, a meno che non si dispone di un microfono stereo e necessità di registrare in stereo.

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

Quando ho impostato questi valori, la dimensione del file e qualità sia aumentata, ma ancora non al livello io preferirei. Forse il restante rumore è da un povero microfono sul mio dispositivo, ma non ho provato con un microfono esterno o rispetto ad altri dispositivi.

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

Prova a impostare questi nel costruttore:

  • Audio Fonte: MIC
  • Sample rate: 16000
  • Numero di canali: CHANNEL_CONFIGURATION_MONO
  • Formato: ENCODING_PCM_16BIT
  • Dimensioni buffer: 16000 * 30 (30 secondo buffer)

Esempio di codice:

recorder = new AudioRecord(
                          MediaRecorder.AudioSource.MIC,
                          16000,
                          AudioFormat.CHANNEL_CONFIGURATION_MONO,
                          AudioFormat.ENCODING_PCM_16BIT,
                          16000*30);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top