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é là
Pour créer des fichiers midi http://onlinesequencer.net/
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