Como executar áudio em aplicações Android

O Android oferece várias maneiras de reproduzir arquivos de áudio em aplicativos, seja para criar um player de música, reproduzir efeitos sonoros ou sons de notificações. Neste post, veremos como executar áudio em aplicações Android utilizando o MediaPlayer e o SoundPool para gerenciar e reproduzir arquivos de áudio em uma aplicação Android.

1. Utilizando o MediaPlayer para reproduzir áudio

A classe MediaPlayer é a mais indicada para reproduzir arquivos de áudio maiores, como músicas. Ela é fácil de configurar e oferece métodos para reproduzir, pausar, parar e controlar o volume.

Passo a passo com MediaPlayer

  1. Adicionar o arquivo deáÁudio: Primeiro, adicione o arquivo de áudio na pasta res/raw do seu projeto. Crie essa pasta caso ela ainda não exista.

  2. Configurar o MediaPlayer: No código da sua atividade (Activity), inicialize o MediaPlayer apontando para o arquivo de áudio.

Exemplo de código:

import android.media.MediaPlayer;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Inicializa o MediaPlayer com o áudio da pasta raw
        mediaPlayer = MediaPlayer.create(this, R.raw.meu_audio);
    }

    // Método para iniciar o áudio
    public void iniciarAudio() {
        if (mediaPlayer != null) {
            mediaPlayer.start();
        }
    }

    // Método para pausar o áudio
    public void pausarAudio() {
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
        }
    }

    // Método para parar o áudio e resetar
    public void pararAudio() {
        if (mediaPlayer != null) {
            mediaPlayer.stop();
            mediaPlayer.prepareAsync();  // Para que possa ser iniciado novamente
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null) {
            mediaPlayer.release();  // Libera o recurso do MediaPlayer
            mediaPlayer = null;
        }
    }
}

Explicação:

  • start(): Inicia a reprodução do áudio.
  • pause(): Pausa a reprodução.
  • stop(): Para o áudio completamente.
  • release(): Libera os recursos de áudio quando o MediaPlayer não é mais necessário.

Dica: Sempre libere o MediaPlayer chamando release() no método onDestroy() para evitar consumo excessivo de memória.

2. Reproduzindo sons curtos com SoundPool

Para efeitos sonoros curtos, como cliques de botão ou sons de notificações, o SoundPool é mais eficiente, pois permite carregar e reproduzir rapidamente pequenos arquivos de áudio.

Passo a passo com SoundPool

  1. Configurar o SoundPool: No código da sua atividade, inicialize o SoundPool e carregue os arquivos de áudio que deseja reproduzir.

Exemplo de código:

import android.media.AudioAttributes;
import android.media.SoundPool;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private SoundPool soundPool;
    private int somClique;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Configura o SoundPool com atributos de áudio
        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_GAME)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();

        soundPool = new SoundPool.Builder()
                .setMaxStreams(5)
                .setAudioAttributes(audioAttributes)
                .build();

        // Carrega o som na memória e guarda o ID
        somClique = soundPool.load(this, R.raw.som_clique, 1);
    }

    // Método para tocar o som
    public void tocarSom() {
        soundPool.play(somClique, 1, 1, 0, 0, 1);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        soundPool.release();  // Libera os recursos de áudio do SoundPool
        soundPool = null;
    }
}

Explicação:

  • load(): Carrega o som no SoundPool e retorna um ID que será usado para reproduzi-lo.

  • play(): Reproduz o som carregado. Os parâmetros são:

    • somClique: ID do som a ser reproduzido.
    • volume esquerdo e direito: Controle do volume para cada canal.
    • priority: Prioridade do som (não aplicável em todos os dispositivos).
    • loop: Número de vezes que o som será repetido (0 = sem repetição).
    • rate: Taxa de reprodução (1.0 é o padrão).

Dica: Use o SoundPool para sons curtos e rápidos, e o MediaPlayer para áudios mais longos.

3. Melhorando a experiência do usuário

Considere adicionar controles de áudio ao seu layout para que o usuário possa iniciar, pausar e parar o áudio. Além disso, verifique a condição do MediaPlayer ou SoundPool para garantir que o áudio não seja reproduzido em momentos indesejados.

4. Exemplo completo com botões no layout

No arquivo XML do layout, adicione os botões para controle de áudio:

<Button
    android:id="@+id/btn_iniciar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Iniciar" />

<Button
    android:id="@+id/btn_pausar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Pausar" />

<Button
    android:id="@+id/btn_parar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Parar" />

No código da Activity, conecte os botões para controlar a reprodução de áudio usando o MediaPlayer:

Button btnIniciar = findViewById(R.id.btn_iniciar);
Button btnPausar = findViewById(R.id.btn_pausar);
Button btnParar = findViewById(R.id.btn_parar);

btnIniciar.setOnClickListener(v -> iniciarAudio());
btnPausar.setOnClickListener(v -> pausarAudio());
btnParar.setOnClickListener(v -> pararAudio());

Outro exemplo prático

Para executar arquivos de áudio, precisamos utilizar a classe MediaPlayer e instanciar um objeto da classe:

import android.media.MediaPlayer;
   
   ...   

   MediaPlayer mp = null;

Se você for usar botões para acionar os áudios, será necessário implementar a interface View.OnClickListener para capturar os eventos de clique dos botões:

 ...
   
   public class MainActivity extends AppCompatActivity implements View.OnClickListener {   
   
...

Neste caso, foi utilizado um listView para mostrar as opções de áudio:

...
   
   ListView lista = findViewById(R.id.lista);
   
   ...
   
   mp = new MediaPlayer();
   mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
   
      @Override
      public void onPrepared(MediaPlayer mp) {
         mp.start();
      }
   });
        
   lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   
   @Override
   public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
   
   if (mp.isPlaying())
       mp.stop();
   else {
   
   //Verifica a posição do listView selecionada, chama o método para tocar áudio e passa a posição
      switch (position) {
         case 0:
            tocarAudio(position);
            break;
         case 1:
            tocarAudio(position);
            break;
         case 2:
            tocarAudio(position);
            break;
         case 3:
            tocarAudio(position);
            break;
        }
  }
  
  ...   

O método tocarAudio() recebe a posição do ítem do listView (pos) e executa o áudio de acordo com essa informação:

   private void tocarAudio(int pos){
      try{
            mp.reset();
            
            if(mp != null){
               AssetFileDescriptor afd = null; //objeto para ler os dados de som
               
               switch (pos){
                     case 0:
                        afd = getResources().openRawResourceFd(R.raw.meu_audio01);
                        break;
                     case 1:
                        afd = getResources().openRawResourceFd(R.raw.meu_audio02);
                        break;
                     case 2:
                        afd = getResources().openRawResourceFd(R.raw.meu_audio03);
                        break;
                     case 3:
                        afd = getResources().openRawResourceFd(R.raw.meu_audio04);
                        break;  
              }            
            
            if (afd != null) {
                mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mp.prepareAsync(); //transfere o objeto mp para o estado preparado 
            }
        }
     } catch (Exception e) {
        Log.e("ERRO: ", e.getMessage());   
     }       
 }

O método onDestroy() libera recursos após a utilização do MediaPlayer:

   public void onDestroy() {
        if (mp != null) {
            mp.release();
            mp = null;
        }
        super.onDestroy(); //chama construtor da classe Activity (herdada)
    }

Com o uso do MediaPlayer e do SoundPool, você consegue adicionar áudio ao seu aplicativo Android de maneira eficiente, melhorando a experiência do usuário e adicionando interatividade à aplicação.

Escolha o método mais adequado com base no tipo e tamanho do áudio que você precisa, e sempre libere os recursos de áudio para garantir o bom desempenho do aplicativo.

Quer aprender de forma prática como desenvolver apps nativos para iOS e Android, construindo aplicativos do zero até aplicativos completos com Integrações com API´s, Banco de dados, Autenticação, Mapas, Animações e Design?

Além do curso, você receberá mais 3 BÔNUS, o curso completo de JavaScript e também o Curso de React JS e Node JS onde vamos desenvolver aplicações e sistemas web do zero.

Garanta a sua vaga ainda hoje e aproveite a nossa super promoção!

CLIQUE NA IMAGEM ABAIXO E SAIBA MAIS DETALHES:

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões sobre como executar áudio em aplicações Android? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Sobre o Autor

Benedito Silva Júnior
Benedito Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *