安卓播放音效

public class MyActivity extends Activity {  
    /** Called when the activity is first created. */  
    SoundPool sp;                           //得到一个声音池引用  
    HashMap<Integer,Integer> spMap;           //得到一个map的引用  
    Button b1;                              //声音播放控制按钮  
    Button b1Pause;                             //声音暂停控制按钮  
    Button b2;                              //声音播放控制按钮  
    Button b2Pause;                             //声音暂停控制按钮  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        initSoundPool();                        //初始化声音池  
        b1=(Button)findViewById(R.id.Button01);//声音播放控制按钮实例化  
        b2=(Button)findViewById(R.id.Button02);//声音播放控制按钮实例化  
        b1Pause=(Button)findViewById(R.id.Button1Pause);  
        b2Pause=(Button)findViewById(R.id.Button2Pause);  
        b1.setOnClickListener(new View.OnClickListener() {//给按钮注册Click事件监听  
            @Override  
            public void onClick(View v) {  
                playSound(1,1);     //播放第一首音效,循环一遍  
                Toast.makeText(MyActivity.this, "播放音效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, "暂停音效1", Toast.LENGTH_SHORT).show();  
        }});  
        b2.setOnClickListener(new View.OnClickListener() {  
            @Override  
            public void onClick(View v) {  
                playSound(2,1);     //播放第二首音效,循环一遍  
            Toast.makeText(MyActivity.this, "播放音效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, "暂停音效2", Toast.LENGTH_SHORT).show();  
        }});  
    }  
    public void initSoundPool(){            //初始化声音池  
        sp=new SoundPool(  
                5,              //maxStreams参数,该参数为设置同时能够播放多少音效  
                AudioManager.STREAM_MUSIC,  //streamType参数,该参数设置音频类型,在游戏中通常设置为:STREAM_MUSIC  
                0               //srcQuality参数,该参数设置音频文件的质量,目前还没有效果,设置为0为默认值。  
        );  
        spMap=new HashMap<Integer,Integer>();  
        spMap.put(1, sp.load(this, R.raw.attack02, 1));//加载音频文件,并将其放入map中!  
        spMap.put(2, sp.load(this, R.raw.attack14, 1));  
    }  
    public void playSound(int sound,int number){    //播放声音,参数sound是播放音效的id,参数number是播放音效的次数  
        AudioManager am=(AudioManager)this.getSystemService(this.AUDIO_SERVICE);//实例化AudioManager对象  
        float audioMaxVolumn=am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  //返回当前AudioManager对象的最大音量值  
        float audioCurrentVolumn=am.getStreamVolume(AudioManager.STREAM_MUSIC);//返回当前AudioManager对象的音量值  
        float volumnRatio=audioCurrentVolumn/audioMaxVolumn;    //左右声道音量;  
        sp.play(  
                spMap.get(sound),                   //播放的音乐id  
                volumnRatio,                        //左声道音量  
                volumnRatio,                        //右声道音量  
                1,                                  //优先级,0为最低  
                number,                             //循环次数,0不循环,-1永远循环  
                1                                   //回放速度 ,该值在0.5-2.0之间,1为正常速度  
        );  
    }  
}
时间: 2024-12-13 15:33:36

安卓播放音效的相关文章

安卓播放pcm数据

Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现的.MediaPlayer在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaPlayer程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制. 但是该类只能对完整的音频文件进行操作,而不能直接对纯PCM音频数据操作.假如我们通过解码得到PCM数

android SoundPool播放音效

MediaPlayer的缺点: 资源占用量高,延时时间较长 不支持多个音效同时播放 SoundPool主要用于播放一些较短的声音片段,CPU资源占用率低和反应延时小,还支持自行色设置声音的品质,音量,播放比率等参数,避免使用SoundPool来播放歌曲或者做游戏背景音乐,只有那些短促的密集的声音才考虑使用SoundPool播放 构造器: public SoundPool (int maxStreams, int streamType, int srcQuality) Parameters max

Cocos2d 播放音效

Cocos2D对音乐/音效播放的封装已经很好了,下边是例子: 定义2个文件: [cpp] view plaincopy #define MUSIC_FILE        "LOLBgMusic.mp3" #define EFFECT_FILE      "Attack.wav" 在初始化的时候预加载音乐/音效文件: [cpp] view plaincopy //预加载 CocosDenshion::SimpleAudioEngine::sharedEngine()

Android设备 cocos2dx 骨骼动画注册事件播放音效,退到后台再返回黑屏问题

最近遇到一个cocos2dx 骨骼动画注册事件播放音效,在骨骼动画播放的时候,按HOME键退到桌面,再次打开游戏的时候,会黑屏. 解决办法如下,可能不是太完美,至少解决了大部分问题. 1.在org.cocos2dx.lib下的 Cocos2dxRenderer.java 中添加native方法 public static native void setIsPause(boolean isPause); 2.在Cocos2dxRenderer.java对应的Java_org_cocos2dx_li

iOS 播放音效

音效:通俗的说是短音频,音频文件必须满足下面的条件 1.播放的时间不能超过30秒 2.数据必须是 PCM或者IMA4流格式 3.必须被打包成下面三个格式之一:Core Audio Format (.caf), Waveform audio (.wav), 或者 Audio Interchange File (.aiff) 1.引入框架 1 #import <AudioToolbox/AudioToolbox.h> 2.播放音效 1 - (void)touchesEnded:(NSSet *)t

C#播放音效(web/winform)

[System.Runtime.InteropServices.DllImport("winmm.DLL", EntryPoint = "PlaySound", SetLastError = true)]        private static extern bool PlaySound(string szSound, System.IntPtr hMod, PlaySoundFlags flags); [System.Flags]        public

unity3d 安卓播放视频替代视频纹理

导出apk,是不能用电影纹理的,所以我们只能用这个办法 这个 Handheld.PlayFullScreenMovie(); 或者这个函数            iPhoneUtils.PlayMovie(); void OnGUI() { if (GUI.Button(new Rect(Screen.width / 2 - 10, Screen.height / 2 - 10, 100,20), "(h)CancelOnTouch")) { Handheld.PlayFullScre

cocos2dx AudioEngine在Android7上播放音效卡顿问题处理

1.此问题在cocos2dx 3.13/3.14版本(其它版本没有测试过)在Android7中使用AudioEngine的play2d函数播放音效时出现. 调试时出现如下提示: 2.论坛中相关讨论帖地址:http://forum.cocos.com/t/android7/44119 3.解决办法: 将cocos2d-x\cocos\audio\android\AudioPlayerProvider.cpp中的getSystemAPILevel() < 17都改为getSystemAPILevel

按钮点击播放音效

1.引入音频管理文件 #import <AVFoundation/AVFoundation.h> 2.方法抽取 /************ 播放音效 *****************************/ - (void)playSoundEffect:(NSString *)name withType:(VoiceType)type { //播放扫描二维码的声音 SystemSoundID soundID; NSString *strSoundFile = [[NSBundle mai