`
lucene321
  • 浏览: 179470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android开发之初探音频的播放

阅读更多

    <h1>Android开发之初探音频的播放</h1>
/*

* Android开发之初探音频的播放

* 北京Android俱乐部群:167839253

* Created on: 2011-8-23

* Author: blueeagle

* Email: liujiaxiang@gmail.com

*/





<h2>音频的播放</h2>
Android平台中关于音频的播放有两种方式,一种是SoundPool,一种是MediaPlayer。SoundPool适合短促但是对反应速度要求较高的情况。但是MediaPlay则适合较长但是对时间要求不高的情况。

音频文件一般都放在res的raw目录下。

对于SoundPool的说明:SoundPool初始化的过程是异步的,也就是说,当对SoundPool初始化时,系统会自动启动一个后台线程来完成初始化工作。因此并不会影响前台其他程序的运行。但也带来一个问题,调用初始化操作后不能立即播放,需要等待一点时间,否则可能会出错。另外,SoundPool可以同时播放多个音频文件,但是MediaPlayer同意时间却只能播放一个。



源码如下所示:

<textarea readonly name="code" class="java">/*

*  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中,便于声音的管理和操作。

    }

}

</textarea><br>
XML布局文件如下:

<textarea readonly name="code" class="html"><?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>
</textarea><br>
 
0
0
分享到:
评论

相关推荐

    Android开发常用技术初探.pdf

    《Android开发常用技术初探》 在移动互联网的飞速发展中,Android系统占据了智能手机市场的主要份额,成为开发者和用户关注的焦点。Android以其开源、灵活的特性吸引了众多开发者,不断推动着应用程序的创新和发展...

    三、初探Android开发-Android开发与实践

    【Android开发与实践详解】 Android开发是移动应用开发领域中的重要组成部分,主要使用Eclipse集成开发环境(IDE)进行。本章将深入探讨如何利用Eclipse创建Android应用程序,理解Android虚拟设备(AVD)的创建,...

    《Android手机开发》教学内容初探.pdf

    通过这样的教学内容设计,学生不仅可以掌握Android开发的基本原理,还能提升实际项目开发和团队协作的能力,为将来在Android平台上的创新和应用开发打下坚实的基础。在当前软件技术日新月异的时代,熟悉并精通...

    Android 开发从入门到精通

    #### Android开发入门:初探与实践 ##### Android开发简介 Android不仅是一个移动平台,更是集成了移动、无线、计算机及通信技术的综合性平台。借助于Android Eclipse插件,开发者能够在Eclipse环境中高效构建...

    Android 中的服务初探

    在Android系统中,服务...综上所述,"Android中的服务初探"这篇博客可能涵盖了服务的基本概念、生命周期、启动与绑定方式,以及在实际开发中的应用和优化策略,对于理解和使用Android服务是非常有价值的参考资料。

    OFDM水声通信在Android系统下实现初探.pdf

    《OFDM水声通信在Android系统下实现初探》这篇硕士论文主要探讨了如何在Android平台上实现OFDM(正交频分复用)技术应用于水声通信。OFDM技术因其高频率利用率、抗多径干扰能力和高速传输能力,近年来在水声通信领域...

    android开发资料

    ### Android开发资料知识点总结 #### 一、Android开发概述 **1.1 Android基本概念** - **1.1.1 Android简介**: Android是由Google公司主导研发的基于Linux内核的操作系统,主要用于移动设备如智能手机和平板电脑...

    专业的android开发资料

    根据给定的文件信息,我们可以深入探讨Android开发的关键知识点,这些知识对于理解Android框架、应用开发流程以及构建高效的应用程序至关重要。 ### Android的发展 自2009年以来,Android操作系统经历了显著的发展...

    android-13 part1

    《Android 13 开发详解:初探与实践》 Android 13 是谷歌推出的最新一代移动操作系统,针对开发者和用户都带来了诸多改进和优化。本文将深入探讨 Android 13 的关键特性,帮助开发者更好地理解和利用这个平台,提升...

    android xiaoyouxi

    《Android游戏开发初探:基于开源篮球小游戏"Xiaoyouxi"》 在移动设备领域,Android系统占据了举足轻重的地位,而Android游戏开发也因此成为许多编程爱好者和开发者热衷的领域。今天我们将深入探讨一个开源的...

    ZombieBird:适用于 Android 的 Flappy Bird 的克隆。 旨在学习 Android Studio 并练习游戏开发的基础知识

    《ZombieBird:Android平台上的Flappy Bird克隆与游戏开发初探》 在移动设备上,游戏开发已经成为一个热门领域,尤其是对于Android平台。ZombieBird项目就是一个很好的实例,它是一个基于Android Studio的Flappy ...

    Android Applications (1) Introduction to the Development.pdf

    ### Android应用开发初探——基于S3C6410平台 #### 一、引言 随着移动互联网的快速发展,Android作为最受欢迎的操作系统之一,在全球范围内拥有庞大的用户基础。对于开发者而言,掌握Android应用程序开发的基本原理...

    libGdx初探

    libGdx是一个强大的开源跨平台游戏开发框架,它支持Android、iOS、Windows、Linux以及HTML5等多种平台。libGdx为开发者提供了丰富的功能,包括图形渲染、音频处理、物理引擎、输入管理等,其中粒子系统是其在视觉...

    MusicPlayerLite:写的第一段 Android 代码, 2010年的时候

    本文将深入探讨这个项目,以及其背后蕴含的Android开发基础和Java语言的应用。 "MusicPlayerLite",这个名字本身就暗示了它的功能——一个轻量级的音乐播放器。对于任何初学者来说,创建一个能够播放本地音乐的应用...

    android-cannon-fire:我的第一个安卓游戏

    《安卓游戏开发初探:基于"android-cannon-fire"的实践》 在移动应用领域,Android游戏开发一直是热门话题,而“android-cannon-fire”项目则为初学者提供了一个宝贵的起点。这个项目,名为“炮火”,是用Java语言...

    HelloKitty:Hello Kitty是第一个Android应用程序

    《HelloKitty:Android开发初探》 HelloKitty,这个名字在许多人的心中唤起的是一个可爱、甜美的卡通形象,而在IT领域,它代表了Android应用开发的一个里程碑——"Hello Kitty"是许多开发者学习Android编程时创建的...

    Cocos2d-xGameTest

    《Cocos2d-x 游戏开发初探:基于"Cocos2d-xGameTest"的实践解析》 Cocos2d-x 是一款广泛应用于移动平台的游戏开发引擎,因其开源、跨平台、性能优异等特点,深受开发者喜爱。"Cocos2d-xGameTest"是一个基于这个强大...

    一个简单的libgdx游戏_java_代码_下载

    《水果捕手:libGDX游戏开发初探》 在编程世界中,游戏开发一直是一项充满挑战和乐趣的任务。Java作为广泛应用的编程语言,不仅在企业级应用领域有着广泛的应用,同样在游戏开发中也有其一席之地。本文将深入探讨一...

    JimMaze:JimMaze是基本版本的libgdx中用于Java的Android编程的2d游戏

    《JimMaze:基于libgdx的2D游戏开发初探》 JimMaze是一款以Java语言编写,专为Android平台设计的2D游戏。它充分利用了libgdx这一跨平台的游戏开发框架,使得游戏不仅能在Android设备上运行,还可以在其他支持libgdx...

Global site tag (gtag.js) - Google Analytics