Implementation Technology: android. media. SoundPool (manages and plays audio resources of applications and loads them directly to the memory ).
I. Basic Knowledge:
1. Create a SoundPool:
Let's take a look at the definition of the SoundPool function, as follows:
[Java]
Public SoundPool (
Int maxStream, // maximum number of streams simultaneously played
Int streamType, // stream type, which is generally STREAM_MUSIC
Int srcQuality // sampling rate conversion quality. No effect currently. Use 0 as the default value.
)
Public SoundPool (
Int maxStream, // maximum number of streams simultaneously played
Int streamType, // stream type, which is generally STREAM_MUSIC
Int srcQuality // sampling rate conversion quality. No effect currently. Use 0 as the default value.
) Eg.
SoundPool soundPool = new SoundPool (3, AudioManager. STREAM_MUSIC, 0 );
Creates a SoundPool that supports simultaneous playback of up to three streams and marks the type as music.
2. Load an audio file:
You can use either of the following methods:
[Java]
Int load (Context context, int resId, int priority) // load data from the APK Resource
Int load (FileDescriptor fd, long offset, long length, int priority) // load data from the FileDescriptor object
Int load (AssetFileDescriptor afd, int priority) // load data from the Asset object
Int load (String path, int priority) // load data from the complete file path
Int load (Context context, int resId, int priority) // load data from the APK Resource
Int load (FileDescriptor fd, long offset, long length, int priority) // load data from the FileDescriptor object
Int load (AssetFileDescriptor afd, int priority) // load data from the Asset object
Int load (String path, int priority) // load from the complete file path name. I currently use the first one, which is loaded from the APK Resource:
[Java]
Int load (
Context context, // the Context of the application, that is, the current Activity, which can be understood as who calls this method.
Int resId, // resource ID
Int priority // priority. Set this parameter to 1.
)
Int load (
Context context, // the Context of the application, that is, the current Activity, which can be understood as who calls this method.
Int resId, // resource ID
Int priority // priority. Set this parameter to 1.
)
3. Playback sound effects:
[Java]
Int play (
Int soundID, // the ID of the music to be played
Float leftVolume, // left audio volume
Float rightVolume, // right audio volume
Int priority, // priority, 0 is the lowest
Int loop, // number of cycles. 0 indicates no loop, and-1 indicates permanent loop.
Float rate // playback speed. The value ranges from 0.5 to 2.0, and 1 indicates the normal speed.
)
Int play (
Int soundID, // the ID of the music to be played
Float leftVolume, // left audio volume
Float rightVolume, // right audio volume
Int priority, // priority, 0 is the lowest
Int loop, // number of cycles. 0 indicates no loop, and-1 indicates permanent loop.
Float rate // playback speed. The value ranges from 0.5 to 2.0, and 1 indicates the normal speed.
)
4. Pause sound effects:
[Java]
Void pause (int streamID) // The parameter is the sound effect ID.
Void pause (int streamID) // The parameter is the sound effect ID.
Ii. Programming implementation:
1. Edit the interface (reslayoutmain. xml ):
[Java]
Android: orientation = "vertical"
Android: layout_width = "fill_parent"
Android: layout_height = "fill_parent"
>
Android: text = "Playing Sound 1"
Android: id = "@ + id/Button01"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "playback sound 2"
Android: id = "@ + id/Button02"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "Pause sound 1"
Android: id = "@ + id/Button1Pause"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "Pause sound 2"
Android: id = "@ + id/Button2Pause"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: orientation = "vertical"
Android: layout_width = "fill_parent"
Android: layout_height = "fill_parent"
>
Android: text = "Playing Sound 1"
Android: id = "@ + id/Button01"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "playback sound 2"
Android: id = "@ + id/Button02"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "Pause sound 1"
Android: id = "@ + id/Button1Pause"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
Android: text = "Pause sound 2"
Android: id = "@ + id/Button2Pause"
Android: layout_width = "fill_parent"
Android: layout_height = "wrap_content">
LinearLayout defines a linear layout of vertical (vertical direction.
In this layout, fill in four button controls, including the text, id, layout_width, and layout_height parameters.
The interface layout is as follows:
2. code editing (srcwyfzclMyActivity. java ):
[Java]
Package wyf. zcl;
Import java. util. HashMap; // introduce related packages
Import android. app. Activity;
Import android. media. AudioManager;
Import android. media. SoundPool;
Import android. OS. Bundle;
Import android. view. View;
Import android. widget. Button;
Import android. widget. Toast;
Public class MyActivity extends Activity {
/** Called when the activity is first created .*/
SoundPool sp; // gets a sound pool reference
HashMap spMap; // get a map reference
Button b1; // specifies the audio playback control Button.
Button b1Pause; // specifies the pause control Button.
Button b2; // audio playback control Button
Button b2Pause; // specifies the pause control Button.
@ Override
Public void onCreate (Bundle savedInstanceState ){
Super. onCreate (savedInstanceState );
SetContentView (R. layout. main );
InitSoundPool (); // initialize the sound pool
B1 = (Button) findViewById (R. id. Button01); // audio playback control Button instantiation
B2 = (Button) findViewById (R. id. Button02); // audio playback control Button instantiation
B1Pause = (Button) findViewById (R. id. Button1Pause );
B2Pause = (Button) findViewById (R. id. Button2Pause );
B1.setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
PlaySound (); // play the first sound effect, loop through it
Toast. makeText (MyActivity. this, "Playing Sound 1", Toast. LENGTH_SHORT). show ();
}});
B1Pause. setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
Sp. pause (spMap. get (1 ));
Toast. makeText (MyActivity. this, "Pause sound 1", Toast. LENGTH_SHORT). show ();
}});
B2.setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
PlaySound (); // play the second sound, loop it over
Toast. makeText (MyActivity. this, "Playing Sound 2", Toast. LENGTH_SHORT). show ();
}});
B2Pause. setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
Sp. pause (spMap. get (2 ));
Toast. makeText (MyActivity. this, "Pause sound 2", Toast. LENGTH_SHORT). show ();
}});
}
Public void initSoundPool () {// initialize the sound pool
Sp = new SoundPool (
5, // maxStreams parameter, which is used to set the number of sound effects that can be played at the same time
AudioManager. STREAM_MUSIC, // streamType parameter. This parameter sets the audio type, which is usually set to STREAM_MUSIC in games.
0 // srcQuality parameter, which sets the quality of the audio file. Currently, no effect is available. Set it to 0 as the default value.
);
SpMap = new HashMap ();
SpMap. put (1, sp. load (this, R. raw. attack02, 1 ));
SpMap. put (2, sp. load (this, R. raw. attack14, 1 ));
}
Public void playSound (int sound, int number) {// playback sound. The parameter sound is the id of the playback sound, and the parameter number is the number of playback sound effects.
AudioManager am = (AudioManager) this. getSystemService (this. AUDIO_SERVICE); // instantiate the AudioManager object
Float audioMaxVolumn = am. getStreamMaxVolume (AudioManager. STREAM_MUSIC); // returns the maximum volume of the current AudioManager object.
Float audioCurrentVolumn = am. getStreamVolume (AudioManager. STREAM_MUSIC); // return the volume of the current AudioManager object.
Float volumnRatio = audioCurrentVolumn/audioMaxVolumn;
Sp. play (
SpMap. get (sound), // the id of the music to be played
VolumnRatio, // left audio volume
VolumnRatio, // right-channel volume
1, // priority, 0 is the lowest
Number, // number of cycles. 0 indicates no loops, and-1 indicates no permanent loops.
1 // playback speed. The value ranges from 0.5 to 2.0. 1 indicates the normal speed.
);
}
}
Package wyf. zcl;
Import java. util. HashMap; // introduce related packages
Import android. app. Activity;
Import android. media. AudioManager;
Import android. media. SoundPool;
Import android. OS. Bundle;
Import android. view. View;
Import android. widget. Button;
Import android. widget. Toast;
Public class MyActivity extends Activity {
/** Called when the activity is first created .*/
SoundPool sp; // gets a sound pool reference
HashMap spMap; // get a map reference
Button b1; // specifies the audio playback control Button.
Button b1Pause; // specifies the pause control Button.
Button b2; // audio playback control Button
Button b2Pause; // specifies the pause control Button.
@ Override
Public void onCreate (Bundle savedInstanceState ){
Super. onCreate (savedInstanceState );
SetContentView (R. layout. main );
InitSoundPool (); // initialize the sound pool
B1 = (Button) findViewById (R. id. Button01); // audio playback control Button instantiation
B2 = (Button) findViewById (R. id. Button02); // audio playback control Button instantiation
B1Pause = (Button) findViewById (R. id. Button1Pause );
B2Pause = (Button) findViewById (R. id. Button2Pause );
B1.setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
PlaySound (); // play the first sound effect, loop through it
Toast. makeText (MyActivity. this, "Playing Sound 1", Toast. LENGTH_SHORT). show ();
}});
B1Pause. setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
Sp. pause (spMap. get (1 ));
Toast. makeText (MyActivity. this, "Pause sound 1", Toast. LENGTH_SHORT). show ();
}});
B2.setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
PlaySound (); // play the second sound, loop it over
Toast. makeText (MyActivity. this, "Playing Sound 2", Toast. LENGTH_SHORT). show ();
}});
B2Pause. setOnClickListener (new View. OnClickListener (){
@ Override
Public void onClick (View v ){
Sp. pause (spMap. get (2 ));
Toast. makeText (MyActivity. this, "Pause sound 2", Toast. LENGTH_SHORT). show ();
}});
}
Public void initSoundPool () {// initialize the sound pool
Sp = new SoundPool (
5, // maxStreams parameter, which is used to set the number of sound effects that can be played at the same time
AudioManager. STREAM_MUSIC, // streamType parameter. This parameter sets the audio type, which is usually set to STREAM_MUSIC in games.
0 // srcQuality parameter, which sets the quality of the audio file. Currently, no effect is available. Set it to 0 as the default value.
);
SpMap = new HashMap ();
SpMap. put (1, sp. load (this, R. raw. attack02, 1 ));
SpMap. put (2, sp. load (this, R. raw. attack14, 1 ));
}
Public void playSound (int sound, int number) {// playback sound. The parameter sound is the id of the playback sound, and the parameter number is the number of playback sound effects.
AudioManager am = (AudioManager) this. getSystemService (this. AUDIO_SERVICE); // instantiate the AudioManager object
Float audioMaxVolumn = am. getStreamMaxVolume (AudioManager. STREAM_MUSIC); // returns the maximum volume of the current AudioManager object.
Float audioCurrentVolumn = am. getStreamVolume (AudioManager. STREAM_MUSIC); // return the volume of the current AudioManager object.
Float volumnRatio = audioCurrentVolumn/audioMaxVolumn;
Sp. play (
SpMap. get (sound), // the id of the music to be played
VolumnRatio, // left audio volume
VolumnRatio, // right-channel volume
1, // priority, 0 is the lowest
Number, // number of cycles. 0 indicates no loops, and-1 indicates no permanent loops.
1 // playback speed. The value ranges from 0.5 to 2.0. 1 indicates the normal speed.
);
}
}
The first few imports are used to import related packages on which the program depends;
Then there is the Activity class, which is equivalent to registering the callback function of our interface. @ Override refers to the onCreate () function of the Activity. This method is called when MyActivity (that is, our window) is created.
The initSoundPool () function initializes the sound pool;
FindViewById instantiate the button control;
@ Override: the Key listening function setOnKeyListener ().
========================================================== ========================================================== ================
Eclipse display Line number: [Ctrl + F10] --> [Show Line Numbers]