安卓Android手机支持哪些音频格式?
答案:3 悬赏:0
解决时间 2021-04-27 21:17
- 提问者网友:单纯说谎家
- 2021-04-27 15:02
安卓手机支持哪些音频格式?
最佳答案
- 二级知识专家网友:24K纯糖
- 2021-04-27 15:34
都支持 你下个软件不就好了
全部回答
- 1楼网友:白日梦制造商
- 2021-04-27 16:41
你下载一个poweramp安上就什么格式都支持了。
- 2楼网友:猖狂的痴情人
- 2021-04-27 16:29
实现技术: android.media.soundpool实现 (管理和播放应用程序的声音资源,直接加载到内存)。
一.基础知识:
1. 创建一个soundpool :
我们先看看soundpool函数的定义,如下:
[java]
public soundpool(
int maxstream, // 同时播放的流的最大数量
int streamtype,// 流的类型,一般为stream_music
int srcquality // 采样率转化质量,当前无效果,使用0作为默认值
)
public soundpool(
int maxstream, // 同时播放的流的最大数量
int streamtype,// 流的类型,一般为stream_music
int srcquality // 采样率转化质量,当前无效果,使用0作为默认值
) eg.
soundpool soundpool = new soundpool(3, audiomanager.stream_music, 0);
创建了一个最多支持3个流同时播放的,类型标记为音乐的soundpool。
2. 加载一个音频文件:
以下方法,取其一即可:
[java]
int load(context context, int resid, int priority) //从apk资源载入
int load(filedescriptor fd, long offset, long length, int priority) //从filedescriptor对象载入
int load(assetfiledescriptor afd, int priority) //从asset对象载入
int load(string path, int priority) //从完整文件路径名载入
int load(context context, int resid, int priority) //从apk资源载入
int load(filedescriptor fd, long offset, long length, int priority) //从filedescriptor对象载入
int load(assetfiledescriptor afd, int priority) //从asset对象载入
int load(string path, int priority) //从完整文件路径名载入 我目前使用的是第一种,从apk资源载入:
[java]
int load(
context context, // 应用程序的上下文,即当前的activity,可理解为谁来调用这个方法。
int resid, // 资源的id
int priority // 优先级,我们设置为1即可。
)
int load(
context context, // 应用程序的上下文,即当前的activity,可理解为谁来调用这个方法。
int resid, // 资源的id
int priority // 优先级,我们设置为1即可。
)
3. 播放音效:
[java]
int play(
int soundid, // 播放的音乐id
float leftvolume, // 左声道音量
float rightvolume, // 右声道音量
int priority, // 优先级,0为最低
int loop, // 循环次数,0为不循环,-1为永远循环
float rate // 回放速度,该值在0.5-2.0之间,1为正常速度。
)
int play(
int soundid, // 播放的音乐id
float leftvolume, // 左声道音量
float rightvolume, // 右声道音量
int priority, // 优先级,0为最低
int loop, // 循环次数,0为不循环,-1为永远循环
float rate // 回放速度,该值在0.5-2.0之间,1为正常速度。
)
4. 暂停音效:
[java]
void pause(int streamid) // 参数为 音效的id。
void pause(int streamid) // 参数为 音效的id。
二.编程实现:
1. 界面编辑(reslayoutmain.xml):
[java]
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:text="播放音效1"
android:id="@+id/button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="播放音效2"
android:id="@+id/button02"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="暂停音效1"
android:id="@+id/button1pause"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
android:text="暂停音效2"
android:id="@+id/button2pause"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
linearlayout 定义了一个 vertical(垂直方向) 上的线性布局。
在这个布局之内,填充四个按钮控件,其text, id, layout_width, 和layout_height 参数在里面有填充说明。
界面布局效果如下:
2. 代码编辑(srcwyfzclmyactivity.java):
[java]
package wyf.zcl;
import java.util.hashmap; // 引入相关包
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 {
soundpool sp; //得到一个声音池引用
hashmap 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() {
@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();
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){ //播放声音,参数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为正常速度
);
}
}
package wyf.zcl;
import java.util.hashmap; // 引入相关包
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 {
soundpool sp; //得到一个声音池引用
hashmap 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() {
@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();
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){ //播放声音,参数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为正常速度
);
}
}
前排几个import用来导入程序依赖的相关包;
然后是activity类,相当于注册我们界面的回调函数,@override了activity的 oncreate()函数,当创建myactivity(即我们的窗口时)调用该方法。
initsoundpool()函数 初始化音效池;
findviewbyid 将按钮控件实例化;
@override 按钮的按键监听函数 setonkeylistener()。
============================================================================================
eclipse显示行号: 【ctrl+f10】-->>【show line numbers】
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息