¿Cómo puedo transferir el búfer de audio para reproducirlo directamente
Intenté crear un buffer de audio y enviarlo a una nueva clase. En esta clase, jugaría este buffer con AudioTracker pero no funciona. Puedo oír el sonido a tiempo, pero el sonido es como un efecto paralelo. No tengo Idear por mi error y no encontré una respuesta para este problema. Espero que puedas ayudarme. (Lo siento, mi inglés no es el mejor) Código de sorpresa:
public class input { private static final String TAG = "Aufnahme"; private AudioRecord recorder = null; private boolean isRecording = false; private int SAMPLERATE = 8000; private int CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; private int bufferSize = AudioRecord.getMinBufferSize(SAMPLERATE, CHANNELS, AUDIO_FORMAT); private Thread recordingThread = null; public void startRecording() { recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLERATE, CHANNELS, AUDIO_FORMAT, bufferSize); recorder.startRecording(); isRecording = true; recordingThread = new Thread(new Runnable() { public void run() { writeAudioData(); } }); recordingThread.start(); } public void stopRecording() { isRecording = false; recorder.stop(); recorder.release(); recorder = null; recordingThread = null; } private void writeAudioData() { byte data[] = new byte[bufferSize]; while (isRecording) { recorder.read(data, 0, bufferSize); send(data); } } private void send(byte[] data) { int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); at.play(); at.write(data, 0, bufferSize); at.stop(); at.release(); }
- ¿Es posible grabar llamadas telefónicas a través de una aplicación para Android?
- Archivo .m4a archivo Android
- Grabación de llamadas en android por qué esto no funciona
- Frecuencia de muestreo y ruido de Android MediaRecorder
- Eliminar el ruido del registro de la muestra de audio mediante audiorecorder
- Análisis de audio de Android en tiempo real
- Cómo utilizar el altavoz interno para reproducir sonido mientras que un conector de 3,5 mm enchufado para grabar sonido utilizando un micrófono externo
- Utilice el botón del auricular para grabar sonido
- Tratando de grabar audio, pero recibiendo el mensaje "mediarecorder se fue con eventos no controlados" y "Señal fatal 11 (SIGSEGV) ..."
- Mejorar la calidad de grabación de audio Android?
- Retardo de grabación de audio
- Android: silencie el micrófono mientras graba vídeo
- ¿Cómo mantiene Google Keep Speech Recognition mientras se guarda la grabación de audio al mismo tiempo?
Ok, me di cuenta del problema. El efecto de sala provenía del sonido del altavoz que se grabó en tiempo real. Mal error.
La razón cuando escribes datos en el objeto AudioTrack
, realmente lo abre, escribe en buffer, lo cierra y lo libera, y si el tamaño mínimo del búfer es tan pequeño, en realidad no se puede oír debido a la reinytilización constante del AudioTrack. Esta es la razón por la que se resuelve cambiando el tamaño del búfer. Si lo hace 8000 y su frecuencia de muestreo es 8000, oirá el sonido con un segundo de retraso. Para resolver esto, deshágase de su método de envío y cambie el método writeAudio a esto:
Private void writeAudioData () {byte data [] = nuevo byte [bufferSize];
int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM); at.play(); while (isRecording) { recorder.read(data, 0, bufferSize); at.write(data, 0, bufferSize); } at.stop(); at.release();
- Android Limit EditText sólo a la entrada entero
- Android: configuración del relleno en un fondo de imagen de superposición