Musique et sons

Pour ajouter un son « beep »  ou autre, par exemple lors du clic sur un bouton il convient d’utiliser la fonction SoundPool.

     //-- Déclaration de l'espace son (nombre de sons à jouer (ici 2), de type musique, 0)  
     soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);  
     //-- Listener de son  
     soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {  
      @Override  
      public void onLoadComplete(SoundPool soundPool, int sampleId,int status)   
            {loaded = true;});  

Ensuite de récupérer le nom des ressources « son » (ressources à placer dans un dossier « raw », créé sous Eclipse dans le répertoire « res » du projet (via un clic droit sur « res », choix New->Folder). La fichier son (format mp3) étant copié via clic-droit menu import->File System.

     //-- Récupération de l'id de la ressource du son  
     sound_id = this.getResources().getIdentifier("beep", "raw",  
         this.getPackageName());  
     soundID1 = soundPool.load(this, sound_id, 1);  

Pour le volume sonore soit on indique l’application utilisera les touches matérielles du téléphone :

     //--Ajustement du volume musical avec les touches du téléphone        
     this.setVolumeControlStream(AudioManager.STREAM_MUSIC);  

Ou alors on calcule un volume sonore moyen :

            AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);  
            float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);  
            float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
            float volume = actualVolume / maxVolume;  

On déclare ensuite le listener du bouton :

   //-- Ecoute du Bouton1  
   public void addListenerOnButton1() {         
           buttonSon1 = (Button) findViewById(R.id.buttonSon1);  
           buttonSon1.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
            //-- Si le son est dans le buffer de son :  
            if (loaded) {  
                 //-- Id Son, Volume HP Gauche, HP Droite, priorité, loupe (-1 continu), taux)   
              soundPool.play(soundID1, volume, volume, 1, 0, 1f);  
              Log.e("Test", "Played sound Beep");  
            }  
                }  
           });}  

Pour placer une musique de fond, on déclare un Player :

     //-- Déclaration du player de musique  
     ap = new AsyncPlayer("MaMusique");  

Puis on l’active via la commande .play (commande .stop pour arrêter !)

  public void Musique()    
  { //-- Parametres de Play : Contexte (this ou getApplicationContext(), URI, Boucle (true or false),    
   ap.play(this, Uri.parse(uri), true, AudioManager.STREAM_MUSIC);      
   if (loaded) {   
    Log.e("Test", "Played Musique "+musOnOff);   
   }   
  }   

Le code complet d’un exemple de player de son et musique est donné ici

Remarque :

Pour jouer un fichier MIDI il est nécessaire d’utiliser le mediaplayer. Déclaration : MediaPlayer mediaPlayer;

Affectation du fichier MIDI : mediaPlayer = MediaPlayer.create(this, R.raw.midi_sound);

Lancement de la musique : mediaPlayer.start();

Le code avec midi est donné

Pour créer des fichiers midi http://onlinesequencer.net/

Screenshot_2013-08-22-18-22-01

Script du fichier SoundActivity

 package com.andrologiciels.andromusic;  
 import android.app.Activity;  
 import android.media.AsyncPlayer;  
 import android.media.AudioManager;  
 import android.media.SoundPool;  
 import android.media.SoundPool.OnLoadCompleteListener;  
 import android.net.Uri;  
 import android.os.Bundle;  
 import android.util.Log;  
 import android.view.View;  
 import android.view.WindowManager;  
 import android.view.View.OnClickListener;  
 import android.widget.Button;  
 public class SoundActivity extends Activity {  
   SoundPool soundPool;  
   int soundID1;  
   int soundID2;   
   AsyncPlayer ap;  
      int musOnOff=0;  
      String uri = "android.resource://com.andrologiciels.andromusic/raw/musique";       
   boolean loaded = false;  
   Button buttonSon1;  
   Button buttonSon2;  
   Button buttonMusique;  
   Button buttonMusiqueService;  
   Button buttonQuit;  
   int sound_id;  
      AudioManager audioManager;  
   float volume;  
   /** Called when the activity is first created. */  
   @Override  
   public void onCreate(Bundle savedInstanceState) {  
     super.onCreate(savedInstanceState);  
     //-- Affichage de l'écran principal  
     setContentView(R.layout.main);  
     //-- Laisser l'affichage actif  
     this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);  
     //--Ajustement du volume musical avec les touches du téléphone        
     this.setVolumeControlStream(AudioManager.STREAM_MUSIC);  
     //-- Appel des listener des boutons :  
     addListenerOnButton1();  
     addListenerOnButton2();  
     addListenerOnButtonMusique();  
     addListenerOnButtonQuit();  
     //-- Déclaration de l'espace son (nombre de sons à jouer (ici 2), de type musique, 0)  
     soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);  
     //-- Listener de son  
     soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {  
      @Override  
      public void onLoadComplete(SoundPool soundPool, int sampleId,int status)   
            {loaded = true;}    
     });  
     //-- Récupération de l'id de la ressource du son  
     sound_id = this.getResources().getIdentifier("beep", "raw",  
         this.getPackageName());  
     soundID1 = soundPool.load(this, sound_id, 1);  
     sound_id = this.getResources().getIdentifier("beepbis", "raw",  
         this.getPackageName());  
     soundID2 = soundPool.load(this, sound_id, 1);    
           audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);  
     volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);  
     //-- Déclaration du player de musique  
     ap = new AsyncPlayer("MaMusique");  
   }  
   //-- Ecoute du Bouton1  
   public void addListenerOnButton1() {         
           buttonSon1 = (Button) findViewById(R.id.buttonSon1);  
           buttonSon1.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
            //-- Si le son est dans le buffer de son :  
            if (loaded) {  
                 //-- Id Son, Volume HP Gauche, HP Droite, priorité, loupe (-1 continu), taux)   
              soundPool.play(soundID1, volume, volume, 1, 0, 1f);  
              Log.e("Test", "Played sound Beep");  
            }  
                }  
           });}  
   //-- Ecoute du Bouton2  
   public void addListenerOnButton2() {         
           buttonSon2 = (Button) findViewById(R.id.buttonSon2);  
            buttonSon2.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
            if (loaded) {  
              soundPool.play(soundID2, volume, volume, 1, 0, 1f);  
              Log.e("Test", "Played sound BeppBis");  
            }  
                }  
           });}  
   //-- Ecoute du Bouton3 (musique)  
   public void addListenerOnButtonMusique() {         
           buttonMusique = (Button) findViewById(R.id.buttonMusique);  
            buttonMusique.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
                     if (musOnOff==0)  
                       {Musique();  
                       musOnOff=1;  
                       }  
                     else  
                       {ap.stop();  
                       musOnOff=0;  
                       }  
                }  
           });}  
   //-- Ecoute du BoutonQuit  
   public void addListenerOnButtonQuit() {         
           buttonQuit = (Button) findViewById(R.id.buttonQuit);  
            buttonQuit.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
                     if (musOnOff==0)  
                       ap.stop();  
                     finish();  
            }       
           });}   
 public void Musique()   
 {  //-- Parametres de Play : Contexte (this ou getApplicationContext(), URI, Boucle (true or false),   
   ap.play(this, Uri.parse(uri), true, AudioManager.STREAM_MUSIC);       
   if (loaded) {  
     Log.e("Test", "Played Musique "+musOnOff);  
   }  
 }  
 @Override  
 public void onStop ()  
 //------- Si l'application est arrétée (bouton Home ou back)  
 {     super.onStop();  
 if (musOnOff==1)  
   ap.stop();  
 }  
 }  

Et du fichier main.xml :

 <?xml version="1.0" encoding="utf-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:orientation="vertical" android:layout_width="fill_parent"  
   android:layout_height="fill_parent">  
   <!-- Pour désactiver le click de touche : soundEffectsEnabled -->  
   <Button  
     android:id="@+id/buttonSon1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:soundEffectsEnabled="false"  
     android:text="Son1" />  
   <Button  
     android:id="@+id/buttonSon2"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:soundEffectsEnabled="false"  
     android:text="Son2" />  
   <Button  
     android:id="@+id/buttonMusique"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:soundEffectsEnabled="false"  
     android:text="Musique" />  
     <Button  
     android:id="@+id/buttonQuit"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:soundEffectsEnabled="true"  
     android:text="Quit" />  
 </LinearLayout>  

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories