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>  

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

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
%d blogueurs aiment cette page :