Android播放声音文体

android开发播放声音文件

一、 MediaPlayer 播放音频的实现步骤:

1. 调用MediaPlayer.create(context, R.raw.himi);

利用MediaPlayer类调用create方法并且传入通过id索引的资源音频文件,得到实例;

2. 得到的实例就可以调用 MediaPlayer.star();

此类适合播放较大文件,此类文件应该存储在SD卡上,而不是在资源文件里,还有此类每次只能播放一个音频文件。

播放不同资源方法如下:

1、从资源文件中播放

MediaPlayer   player  =   new MediaPlayer.create(this,R.raw.test);

player.stare();

2、从文件系统播放

MediaPlayer   player  =   new MediaPlayer();

String  path   =  "/sdcard/test.mp3";

player.setDataSource(path);

player.prepare();

player.start();

3、从网络播放

(1)通过URI的方式:

String path="http://**************.mp3";     //这里给一个歌曲的网络地址就行了

Uri  uri  =  Uri.parse(path);

MediaPlayer   player  =   new MediaPlayer.create(this,uri);

player.start();

(2)通过设置数据源的方式:

MediaPlayer   player  =   new MediaPlayer.create();

String path="http://**************.mp3";          //这里给一个歌曲的网络地址就行了

player.setDataSource(path);

player.prepare();

player.start();

二、 SoundPlayer 播放音频的实现步骤:

1.   new出一个实例 ;

new SoundPool(4, AudioManager.STREAM_MUSIC, 100);

第一个参数是允许有多少个声音流同时播放,第2个参数是声音类型,第三个参数是声音的品质;

2.loadId = soundPool.load(context, R.raw.himi_ogg, 1);

3. 使用实例调用play方法传入对应的音频文件id即可!

下面讲下两个播放形式的利弊:

使用MediaPlayer来播放音频文件存在一些不足:

例如:资源占用量较高、延迟时间较长、不支持多个音频同时播放等。

这些缺点决定了MediaPlayer在某些场合的使用情况不会很理想,例如在对时间精准度要求相对较高的游戏开发中。

最开始我使用的也是普通的MediaPlayer的方式,但这个方法不适合用于游戏开发,因为游戏里面同时播放多个音效是常有的事,用过MediaPlayer的朋友都该知道,它是不支持实时播放多个声音的,会出现或多或少的延迟,而且这个延迟是无法让人忍受的,尤其是在快速连续播放声音(比如连续猛点按钮)时,会非常明显,长的时候会出现3~5秒的延迟,【使用MediaPlayer.seekTo() 这个方法来解决此问题】;

相对于使用SoundPool存在的一些问题:

1. SoundPool最大只能申请1M的内存空间,这就意味着我们只能使用一些很短的声音片段,而不是用它来播放歌曲或者游戏背景音乐(背景音乐可以考虑使用JetPlayer来播放)。

2. SoundPool提供了pause和stop方法,但这些方法建议最好不要轻易使用,因为有些时候它们可能会使你的程序莫名其妙的终止。还有些朋友反映它们不会立即中止播放声音,而是把缓冲区里的数据播放完才会停下来,也许会多播放一秒钟。

3. 音频格式建议使用OGG格式。使用WAV格式的音频文件存放游戏音效,经过反复测试,在音效播放间隔较短的情况下会出现异常关闭的情况(有说法是SoundPool目前只对16bit的WAV文件有较好的支持)。后来将文件转成OGG格式,问题得到了解决。

4.在使用SoundPool播放音频的时候,如果在初始化中就调用播放函数进行播放音乐那么根本没有声音,不是因为没有执行,而是SoundPool需要一准备时间。

具体用法如下:

     SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
        HashMap<Integer, Integer> soundPoolMap = new HashMap<Integer, Integer>();
        soundPoolMap.put(1, soundPool.load(this, R.raw.dingdong1, 1));
        soundPoolMap.put(2, soundPool.load(this, R.raw.dingdong2, 2));
        public void playSound(int sound, int loop) {
            AudioManager mgr = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
            float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
            float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
           float volume = streamVolumeCurrent/streamVolumeMax;
           soundPool.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f);
           //参数:1、Map中取值   2、当前音量     3、最大音量  4、优先级   5、重播次数   6、播放速度
      }
      this.playSound(1, 0);

时间: 2024-11-10 16:02:00

Android播放声音文体的相关文章

Android 播放声音

public static void PlayAlarmRing(Context mContext) { Uri alert = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); try { MediaPlayer mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(mContext, alert); final AudioManager audioMa

android声音播放

android播放声音,一种是soundPool,一种是mediaplayer soundpool 适合播放反映速度要求较高的声效,比如,游戏中的爆炸音效 mediaplay 适合播放时间比较长的声效,比如,游戏中的背景音乐 我们来做个例子,一个是chang.ogg,一个是duan.wav 这两个声效文件,我是从我的游戏目录中的笑傲江湖OL中搜索出来的.你也可以到你的游戏文件夹下搜索 *.ogg,*.wav 将这两个文件放到res/raw目录下,如果不存在raw目录,请创建它 定义activit

EasyPlayer声音自动停止、恢复,一键静音等功能

我们在开发播放器时,可能会需要静音或者降低音量的功能.比如说某款音乐播放器,当在后台播放时,如果此时有另外的系统通知声音发出,可能播放器会把音量降低,系统声音结束后,再调高:如果有来电了,播放器可能会把音乐暂停,等通话结束后再继续播放.还有,比方说我们在某个场合放个视频,不料音量很大,会引来很多目光(很尴尬),这时候可能我们需要一键静音的功能.那这些功能我们应该如何实现呢? Android播放声音的类为AudioTrack,播放器会先把音频流demux出来,再decode,之后,把音频PCM数据

Android中播放声音

在Android系统中,有两种播放声音的方式,一种是通过MediaPlayer,另外一种是通过SoundPool.前者主要用于播放长时间的音乐,而后者用于播放小段小段的音效,像按键音这种,其优点是资源占用了小,同时能够载入多个声音片段,再根据需要选择播放.下面分别介绍这两种方式: 1.MediaPlayer MediaPlayer有两种创建方式,方式一: MediaPlayer mp = new MediaPlayer() 通过这种方式创建MediaPlayer对象,必须在创建对象之后使用下面的

android开发播放声音文件

有两种播放音频形式,第一个:MediaPlayer 类 :第二个:SoundPool 类 MediaPlayer mediaPlayer01; mediaPlayer01 = MediaPlayer.create(YouActivity.this, R.raw.xxxx); mediaPlayer01.start(); 网上有很多介绍mp播放声音文件的几种方式就是: 1.用R.raw.x来播放raw目录下的文件, 2.用setDataSource("/sdcard/s.mp4"),但是

android通过数组,流播放声音的方法,音频实时传输

AudioRecord和AudioTrack类是Android获取和播放音频流的重要类,放置在android.media包中.与该包中 的MediaRecorder和MediaPlayer类不同,AudioRecord和AudioTrack类在获取和播放音频数据流时无需通过文件保 存和文件读取,可以动态地直接获取和播放音频流,在实时处理音频数据流时非常有用. 当然,如果用户只想录音后写入文件或从文件中取得音频流进行播放,那么直接使用MediaRecorder和MediaPlayer类是首选方案,

Android 音视频深入 十一 FFmpeg和AudioTrack播放声音(附源码下载)

项目地址,求starhttps://github.com/979451341/AudioVideoStudyCodeTwo/tree/master/FFmpeg%E6%92%AD%E6%94%BE%E9%9F%B3%E4%B9%90%EF%BC%88%E4%BF%9D%E7%A8%8B%E5%BA%8F%E4%B8%8D%E6%AD%BB%EF%BC%89 这个是FFmpeg解码出音频,给AudioTrack播放,这回才算是java与c语言之间合作 这回我们将会从c++里调用java函数,下面就

android Activity初次的启动的时候播放声音

代码例如以下: private MediaPlayer mMediaPlayer; mMediaPlayer = new MediaPlayer(); mMediaPlayer = MediaPlayer.create(this, R.raw.happy); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setLooping(true); mMediaPlayer.start(); ok,问题解决

android调节音量——AudioManager的应用

Android中可以通过程序获取系统手机的铃声和音量.同样,也可以设置铃声和音量.android中给出了AudioManager类来实现音量获取.音量控制. 本篇基于 Android API 中的 AudioManager 作讲述,最后给出实例. 下面是本篇大纲: 1.认识 AudioManager 2.AudioManager 主要方法介绍 3.参数解释 1.认识 AudioManager AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作