Qual será o algoritmo para um simples gravador de som no Android?
Se você quiser desenvolver uma aplicação que possa gravar som então há duas maneiras de conseguir isso em android:
- MediaRecorder Class
extends Object
Esta classe é usada para gravar áudio e vídeo. The recording control is based on a simple state machine (see below).
- MediaRecorder recorder = new MediaRecorder();
- recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- recorder.setOutputFile(PATH_NAME);
- recorder.prepare();
- recorder.start(); // Recording is now started ...
- recorder.stop();
- recorder.reset(); // You can reuse the object by going back to setAudioSource() step
- recorder.release(); // Now the object cannot be reused
Most of the application uses this class if those application are not doing any special analysis on the audio.
MediaRecorder lhe dá a amplitude máxima da última chamada do método getMaxAmplitude() para que você possa implementar um visualizador de som, por exemplo.
Um exemplo muito simples da classe MediaRecorder:
Android MediaRecorder exemplo - javatpoint
Você também pode referir este código se você quiser gravar vídeo e áudio :
googlesamples/android-MediaRecorder
2. A classe AudioRecord
classe pública AudioRecord
extends Object implementa AudioRouting
A classe AudioRecord gerencia os recursos de áudio para aplicações Java para gravar áudio a partir do hardware de entrada de áudio da plataforma. Isto é conseguido "puxando" (lendo) os dados do objeto AudioRecord.
Se você quer fazer sua análise enquanto a gravação ainda está em andamento, você precisa usar o AudioRecord, pois o MediaRecorder grava automaticamente em um arquivo e o AudioRecorder lhe dá apenas um fluxo de som bruto e você tem que comprimi-lo sozinho.
AudioRecord tem a desvantagem, que depois de chamar startRecording() você precisa pesquisar os dados da instância do AudioRecord. Além disso, você precisa ler e processar os dados suficientemente rápido para que o buffer interno não seja sobrecarregado (olhe na saída do Logcat, AudioRecord lhe dirá quando isso acontecer).
Código da classe audiorecord normalmente vai até 3000 linhas no mínimo :D
olhe nesta classe em "telegrama" para a fonte andróide da classe AudioRecord:
DrKLO/Telegram