Android开发之初探音频的播放
/*
* Android开发之初探音频的播放
* 北京Android俱乐部群:167839253
* Created on: 2011-8-23
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
音频的播放
Android平台中关于音频的播放有两种方式,一种是SoundPool,一种是MediaPlayer。SoundPool适合短促但是对反应速度要求较高的情况。但是MediaPlay则适合较长但是对时间要求不高的情况。
音频文件一般都放在res的raw目录下。
对于SoundPool的说明:SoundPool初始化的过程是异步的,也就是说,当对SoundPool初始化时,系统会自动启动一个后台线程来完成初始化工作。因此并不会影响前台其他程序的运行。但也带来一个问题,调用初始化操作后不能立即播放,需要等待一点时间,否则可能会出错。另外,SoundPool可以同时播放多个音频文件,但是MediaPlayer同意时间却只能播放一个。
源码如下所示:
/*
* Android开发之初探音频的播放
* MyMeidaTest01.java
* Created on: 2011-8-23
* Author: blueeagle
* Email: liujiaxiang@gmail.com
*/
package com.blueeagle;
import java.util.HashMap;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MyMeidaTest01 extends Activity {
Button button1;
Button button2;
Button button3;
Button button4;
TextView myTextView;
MediaPlayer myMediaplayer;
SoundPool mySoundpool;
HashMap<Integer,Integer> soundPoolMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initSounds();
initUI();
}
public void playSound(int sound , int loop){
//SoundPool的播放方法
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;
mySoundpool.play(soundPoolMap.get(sound), volume, volume, 1, loop, 1f);
}
private void initUI() {
// TODO Auto-generated method stub
myTextView = (TextView)findViewById(R.id.mytextview);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
button3 = (Button)findViewById(R.id.button3);
button4 = (Button)findViewById(R.id.button4);
button1.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myTextView.setText("使用MediaPlayer播放声音");
if(!myMediaplayer.isPlaying())
myMediaplayer.start();
}
});
button2.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myTextView.setText("暂停MediaPlayer播放声音");
if(myMediaplayer.isPlaying())
myMediaplayer.pause();
}
});
button3.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myTextView.setText("使用SoundPool播放声音");
playSound(1,0);
}
});
button4.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myTextView.setText("暂停SoundPool播放声音");
mySoundpool.pause(1);
}
});
}
private void initSounds() {
// TODO Auto-generated method stub
myMediaplayer = MediaPlayer.create(this, R.raw.music);
mySoundpool = new SoundPool(4,AudioManager.STREAM_MUSIC,100);
soundPoolMap = new HashMap<Integer,Integer>();
soundPoolMap.put(1,mySoundpool.load(this,R.raw.kick,1));
//初始化声音操作,使用SoundPool时,一般将声音放进一个HashMap中,便于声音的管理和操作。
}
}
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"
>
<TextView
android:id="@+id/mytextview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="没有播放任何声音"
/>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="使用Media播放声音"
/>
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="暂停Media播放声音"
/>
<Button
android:id="@+id/button3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="使用SoundPool播放声音"
/>
<Button
android:id="@+id/button4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="暂停SoundPool播放声音"
/>
</LinearLayout>
分享到:
相关推荐
《Android开发常用技术初探》 在移动互联网的飞速发展中,Android系统占据了智能手机市场的主要份额,成为开发者和用户关注的焦点。Android以其开源、灵活的特性吸引了众多开发者,不断推动着应用程序的创新和发展...
【Android开发与实践详解】 Android开发是移动应用开发领域中的重要组成部分,主要使用Eclipse集成开发环境(IDE)进行。本章将深入探讨如何利用Eclipse创建Android应用程序,理解Android虚拟设备(AVD)的创建,...
通过这样的教学内容设计,学生不仅可以掌握Android开发的基本原理,还能提升实际项目开发和团队协作的能力,为将来在Android平台上的创新和应用开发打下坚实的基础。在当前软件技术日新月异的时代,熟悉并精通...
#### Android开发入门:初探与实践 ##### Android开发简介 Android不仅是一个移动平台,更是集成了移动、无线、计算机及通信技术的综合性平台。借助于Android Eclipse插件,开发者能够在Eclipse环境中高效构建...
在Android系统中,服务...综上所述,"Android中的服务初探"这篇博客可能涵盖了服务的基本概念、生命周期、启动与绑定方式,以及在实际开发中的应用和优化策略,对于理解和使用Android服务是非常有价值的参考资料。
《OFDM水声通信在Android系统下实现初探》这篇硕士论文主要探讨了如何在Android平台上实现OFDM(正交频分复用)技术应用于水声通信。OFDM技术因其高频率利用率、抗多径干扰能力和高速传输能力,近年来在水声通信领域...
### Android开发资料知识点总结 #### 一、Android开发概述 **1.1 Android基本概念** - **1.1.1 Android简介**: Android是由Google公司主导研发的基于Linux内核的操作系统,主要用于移动设备如智能手机和平板电脑...
根据给定的文件信息,我们可以深入探讨Android开发的关键知识点,这些知识对于理解Android框架、应用开发流程以及构建高效的应用程序至关重要。 ### Android的发展 自2009年以来,Android操作系统经历了显著的发展...
《Android 13 开发详解:初探与实践》 Android 13 是谷歌推出的最新一代移动操作系统,针对开发者和用户都带来了诸多改进和优化。本文将深入探讨 Android 13 的关键特性,帮助开发者更好地理解和利用这个平台,提升...
《Android游戏开发初探:基于开源篮球小游戏"Xiaoyouxi"》 在移动设备领域,Android系统占据了举足轻重的地位,而Android游戏开发也因此成为许多编程爱好者和开发者热衷的领域。今天我们将深入探讨一个开源的...
《ZombieBird:Android平台上的Flappy Bird克隆与游戏开发初探》 在移动设备上,游戏开发已经成为一个热门领域,尤其是对于Android平台。ZombieBird项目就是一个很好的实例,它是一个基于Android Studio的Flappy ...
### Android应用开发初探——基于S3C6410平台 #### 一、引言 随着移动互联网的快速发展,Android作为最受欢迎的操作系统之一,在全球范围内拥有庞大的用户基础。对于开发者而言,掌握Android应用程序开发的基本原理...
libGdx是一个强大的开源跨平台游戏开发框架,它支持Android、iOS、Windows、Linux以及HTML5等多种平台。libGdx为开发者提供了丰富的功能,包括图形渲染、音频处理、物理引擎、输入管理等,其中粒子系统是其在视觉...
本文将深入探讨这个项目,以及其背后蕴含的Android开发基础和Java语言的应用。 "MusicPlayerLite",这个名字本身就暗示了它的功能——一个轻量级的音乐播放器。对于任何初学者来说,创建一个能够播放本地音乐的应用...
《安卓游戏开发初探:基于"android-cannon-fire"的实践》 在移动应用领域,Android游戏开发一直是热门话题,而“android-cannon-fire”项目则为初学者提供了一个宝贵的起点。这个项目,名为“炮火”,是用Java语言...
《HelloKitty:Android开发初探》 HelloKitty,这个名字在许多人的心中唤起的是一个可爱、甜美的卡通形象,而在IT领域,它代表了Android应用开发的一个里程碑——"Hello Kitty"是许多开发者学习Android编程时创建的...
《Cocos2d-x 游戏开发初探:基于"Cocos2d-xGameTest"的实践解析》 Cocos2d-x 是一款广泛应用于移动平台的游戏开发引擎,因其开源、跨平台、性能优异等特点,深受开发者喜爱。"Cocos2d-xGameTest"是一个基于这个强大...
《水果捕手:libGDX游戏开发初探》 在编程世界中,游戏开发一直是一项充满挑战和乐趣的任务。Java作为广泛应用的编程语言,不仅在企业级应用领域有着广泛的应用,同样在游戏开发中也有其一席之地。本文将深入探讨一...
《JimMaze:基于libgdx的2D游戏开发初探》 JimMaze是一款以Java语言编写,专为Android平台设计的2D游戏。它充分利用了libgdx这一跨平台的游戏开发框架,使得游戏不仅能在Android设备上运行,还可以在其他支持libgdx...