当前位置:首页 » 安卓系统 » android获取音量

android获取音量

发布时间: 2022-06-08 17:42:30

A. android 判断扬声器是否有音量 安卓巴士

从系统的音频服务中可以获取音频管理器
am=(AudioManager) getSystemService(AUDIO_SERVICE);
然后就可以获取当前的音量大小了
int current=am.getStreamVolume(AudioManager.STREAM_MUSIC);
不知道你说的是不是这个意思

B. Android怎样在代码中控制媒体音量的大小

android 代码中控制媒体音量大小,主要是使用AudioManager
这个类,来操作音量,代码如下:

java">//定义AudioManager
privateAudioManagermgr;
//实例化
mgr=(AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
//调高音量
mgr.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,AudioManager.FLAG_SHOW_UI);
//调低音量
mgr.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,AudioManager.FLAG_SHOW_UI);
最后分别加个按钮安控制增加或者减少就行了

C. 如何计算在Android的声音频率是多少

实现思路:

1. 通过AudioRecord类读取Mic传入的数据

2. 对读取的数据进行快速傅立叶变换

3. 计算出进过计算后的复数的模即为需要的频率

第一步很好实现,new 一个AudioRecord即可实现读取mic的输入,简略版代码如下:

  • AudioRecordaudioRecord=newAudioRecord(MediaRecorder.AudioSource.MIC,

  • sampleRate,AudioFormat.CHANNEL_CONFIGURATION_MONO,

  • AudioFormat.ENCODING_PCM_16BIT,sampleRate*6);

  • audioRecord.startRecording();

  • byte[]bufferRead=newbyte[READ_BUFFERSIZE];

  • while(audioRecord.read(bufferRead,0,READ_BUFFERSIZE)>0){

  • currentFrequency=processSampleData(bufferRead,SAMPLE_RATE);

  • }

这里的sampleRate取的是44100,stackoverflow上说AudioRecord的参数根据不同的机器可能不同,这一点通过遍历可能的参数新建AudioRecord类,具体可以参见stackoverflow上的这个问答。

bufferRead为读取数据存储的容器。

currentFrequency即为通过快速傅立叶变换计算出的声音频率。

processSampleDate为调用的本地方法,因为已经有人用C实现了快速傅立叶变换,通过传入参数即可计算出声音的频率。

当然,在使用mic读取数据之前需要加上相应的权限。

关于android如何通过NDK编译C语言的教程网上也有很多,在linux下很方便,在windows上就比较麻烦了,需要通过安装Cygwin模拟linux的环境,调用GCC编译文件。

这篇博客的教程讲得还是很详细的,建议没有用过NDK的可以参考一下。

这样就能计算出实时的声音频率了。

D. android系统音量为什么要+5/10

调整音量方法有两种,一种是渐进式,即像手动按音量键一样,一步一步增加或减少,另一种是直接设置音量值.

1、渐进式

public void adjustStreamVolume (int streamType, int direction, int flags)

am.adjustStreamVolume (AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
解释一下三个参数

第一个streamType是需要调整音量的类型,这里设的是媒体音量,可以是:
STREAM_ALARM 警报
STREAM_MUSIC 音乐回放即媒体音量
STREAM_NOTIFICATION 窗口顶部状态栏Notification,
STREAM_RING 铃声
STREAM_SYSTEM 系统
STREAM_VOICE_CALL 通话
STREAM_DTMF 双音多频,不是很明白什么东西

第二个direction,是调整的方向,增加或减少,可以是:
ADJUST_LOWER 降低音量
ADJUST_RAISE 升高音量
ADJUST_SAME 保持不变,这个主要用于向用户展示当前的音量

第三个flags是一些附加参数,只介绍两个常用的
FLAG_PLAY_SOUND 调整音量时播放声音
FLAG_SHOW_UI 调整时显示音量条,就是按音量键出现的那个
2、直接设置音量值的方法:

public void setStreamVolume (int streamType, int index, int flags)

am.setStreamVolume(AudioManager.STREAM_MUSIC, am.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_PLAY_SOUND);
am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的最大值
am.getStreamVolume(AudioManager.STREAM_VOICE_CALL);//得到听筒模式的当前值
第一个和第三个参数与上面的相同

第二个参数是一个音量的int值,getStreamMaxVolume(int streamType)得到的是该类型音量的最大值,可以根据这个值计算你需要的音量,我这里直接调到最大.

最后我的代码:

package com.lp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import Android.app.Activity;
import Android.content.Context;
import Android.media.AudioFormat;
import Android.media.AudioManager;
import Android.media.AudioTrack;
import Android.os.Bundle;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.SeekBar;
/**
* AudioTrack 播放音频 如wav格式
* 并允许调节音量
* @author Administrator
*
*/
public class MainActivity5 extends Activity {
private Button play;
private Button stop;
private SeekBar soundValue;

private AudioTrack at;
private AudioManager am;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_sk);
am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
play = (Button)findViewById(R.id.main_sk_play);
stop = (Button)findViewById(R.id.main_sk_stop);
soundValue = (SeekBar)findViewById(R.id.skbVolume);
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
play.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {

if(am.isSpeakerphoneOn()){
am.setSpeakerphoneOn(false);
}
//setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
am.setMode(AudioManager.MODE_IN_CALL);
System.out.println(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
System.out.println("&&&&&&&&&&&&&");
System.out.println(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));
//am.setStreamVolume(streamType, index, flags)

int bufferSizeInBytes = AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

if(at==null){
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
System.out.println("22222");
//at.setStereoVolume(100f, 100f);
at.setStereoVolume(0.7f, 0.7f);//设置当前音量大小
new AudioTrackThread().start();
}else{
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
System.out.println("111111111");
}else{
System.out.println("33333");
at = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 44100, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes, AudioTrack.MODE_STREAM);
new AudioTrackThread().start();
}
}

}
});

stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
try{
at.stop();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}
}
});

// soundValue.setMax(100);//音量调节的极限
// soundValue.setProgress(70);//设置seekbar的位置值
soundValue.setMax(am.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL));
soundValue.setProgress(am.getStreamVolume(AudioManager.STREAM_VOICE_CALL));

soundValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// float vol=(float)(seekBar.getProgress())/(float)(seekBar.getMax());
// System.out.println(vol);
// at.setStereoVolume(vol, vol);//设置音量
am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, seekBar.getProgress(), AudioManager.FLAG_PLAY_SOUND);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
}
});
}

class AudioTrackThread extends Thread{

@Override
public void run() {
byte[] out_bytes = new byte[44100];

InputStream is = getResources().openRawResource(R.raw.start);
int length ;
try{
at.play();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
try {
while((length = is.read(out_bytes))!=-1){
//System.out.println(length);
at.write(out_bytes, 0, length);
}
} catch (IOException e) {
e.printStackTrace();
}
if(at.getPlayState()==AudioTrack.PLAYSTATE_PLAYING){
try{
at.stop();
}catch (IllegalStateException e)
{
e.printStackTrace();
}
at.release();
am.setMode(AudioManager.MODE_NORMAL);
}
}

}

}
当然 权限

<uses-permission Android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission Android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="android.permission.RECORD_AUDIO" />

E. 如何设置和获取Android中各种音量

同样,设置铃声和音量的方法也很简单!设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStreamVolume(intstreamType,intindex,intflags)其中streamType有内置的常量,去文档里面就可以看到。 JAVA代码: AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//通话音量int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL ); int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL ); Log.d(VIOCE_CALL, max : + max + current : + current);//系统音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );

F. android怎么调用系统声音

Android中手机声音调节步骤:

a、通过系统服务获得声音管理器:

AudioManager audioManager = (AudioManager)getSystemService(Service.AUDIO_SERVICE);

b、根据实际需要调用适当的方法:(常用方法)

audioManager.adjustStreamVolume(int streamType, int direction, int flags);

streamType:声音类型,可取的为STREAM_VOICE_CALL(打电话时的声音), STREAM_SYSTEM(Android系统声音), STREAM_RING(电话铃响), STREAM_MUSIC(音乐声音)or STREAM_ALARM(警告声音)。

direction:调整音量的方向,可取为ADJUST_LOWER(调低音量), ADJUST_RAISE(调高音量), or ADJUST_SAME(保持先前音量)。

flags:可选标志位(如要显示出音量调节UI,使用如下flag:AudioManager.FLAG_SHOW_UI)。

audioManager.setStreamMute(int streamType, boolean state);设置指定声音类型(streamType)是否为静音。如果state为true,则设置为静音;否则,不设置为静音。

audioManager.setRingerMode(int ringerMode);

设置铃音模式,可取值为RINGER_MODE_NORMAL(铃音正常模式), RINGER_MODE_SILENT(铃音静音模式), or RINGER_MODE_VIBRATE(铃音震动模式,即铃音为静音,启动震动)。

audioManager.setMode(int mode);

设置声音模式,可取值为MODE_NORMAL(正常模式,即在没有铃音与电话的情况), MODE_RINGTONE(铃响模式), MODE_IN_CALL(接通电话模式)or MODE_IN_COMMUNICATION(通话模式)。

注意:声音的调节是没有权限要求的。

G. android 怎么获取mic音量

双击右下角的音量图标,打开音量控制面板,点“选项”,“属性”,在显示下列音量控制中选中“麦克风”,确定,在主界面里把麦克风的音量调大就ok了。 如果不是系统设置的问题,那只有换个麦克了~

H. android 音频参数怎么控制声音

对播放行为的控制是三个大家非常熟悉的方法:start()、stop()和pause()。 通过static MediaPlayer create(Context, Uri)这个方法,可以获得一个新创建的MediaPlayer对象。 在播放过程中,有几个可以监听播放过程的监听器,如: n setOnCompletionListener(MediaPlayer.OnCompletionListener listener),监听音频播放结束; n setOnErrorListener(MediaPlayer.OnErrorListener listener),监听播放过程中的错误事件; n setOnPreparedListener(MediaPlayer.OnPreparedListener listener),当prepare()被调用时触发。 然而,使用MediaPlayer播放时,也有一些问题。我们知道MediaPlayer在创建和销毁时都会耗费大量的系统资源,且创建和销毁的时间相对较长。此外,如果我们需要在同一时刻播放很多声音,MediaPlayer是不支持的。 因此,我们需要一个更加轻量级的声音播放工具。 Android提供了另外一种,叫做SoundPool,它适合播放那些需要反复播放,但时间较短的音效。它支持同时播放多种声音,这些声音在系统开始时会加载到列表中,按照这些声音的id,我们可以调用这些音效。 下面我们进入一个实例看看SoundPool到底是怎么工作的。 例如,现在在一个五子棋游戏中,我们需要在棋子落盘的时候播放一段声音。我们可以利用SoundPool,因为它时间很短,而且需要反复播放,并且我们不希望声音占用太大资源。 先看看代码: private SoundPool soundPool; soundPool= newSoundPool(10,AudioManager.STREAM_SYSTEM,5); soundPool.load(this,R.raw.collide,1); soundPool.play(1,1, 1, 0, 0, 1); 代码非常简单,第一行是声明了一个SoundPool对象,这个一般是作为类的成员属性出现的。第二行将soundPool实例化,第一个参数为soundPool可以支持的声音数量,这决定了Android为其开设多大的缓冲区,第二个参数为声音类型,在这里标识为系统声音,除此之外还有AudioManager.STREAM_RING以及AudioManager.STREAM_MUSIC等,系统会根据不同的声音为其标志不同的优先级和缓冲区,最后参数为声音品质,品质越高,声音效果越好,但耗费更多的系统资源。 第三行,系统为soundPool加载声音,第一个参数为上下文参数,第二个参数为声音的id,一般我们将声音信息保存在res的raw文件夹下,如下图所示。 第三个参数为声音的优先级,当多个声音冲突而无法同时播放时,系统会优先播放优先级高的。 第四行就是播放了,第一个参数为id,id即为放入到soundPool中的顺序,比如现在collide.wav是第一个,因此它的id就是1。第二个和第三个参数为左右声道的音量控制。第四个参数为优先级,由于只有这一个声音,因此优先级在这里并不重要。第五个参数为是否循环播放,0为不循环,-1为循环。最后一个参数为播放比率,从0.5到2,一般为1,表示正常播放。

I. android怎么设置当前的系统音量

通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单!
设置音量的方法也很简单,AudioManager提供了方法:
publicvoidsetStreamVolume(intstreamType,intindex,intflags)其中streamType有内置的常量,去文档里面就可以看到。
JAVA代码:
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//通话音量int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL );
int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL );
Log.d(VIOCE_CALL, max : + max + current : + current);//系统音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM );
Log.d(SYSTEM, max : + max + current : + current);//铃声音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING );
Log.d(RING, max : + max + current : + current);//音乐音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC );
Log.d(MUSIC, max : + max + current : + current);
//提示声音音量
max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM );
Log.d(ALARM, max : + max + current : + current);ps:
游戏过程中只允许调整多媒体音量,而不允许调整通话音量。
setVolumeControlStream(AudioManager.STREAM_MUSIC);
长时间不动,不允许黑屏,View.setKeepScreenOn(true);
估计manifest文件中需要注册权限吧

J. 如何获取和设置android系统铃声和音量大小

通过程序获取android系统手机的铃声和音量。同样,设置铃声和音量的方法也很简单! 设置音量的方法也很简单,AudioManager提供了方法: publicvoidsetStreamVolume(intstreamType,intindex,intflags)其中streamType有内置的常量,去文档里面就可以看到。 JAVA代码: AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//通话音量int max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_VOICE_CALL ); int current = mAudioManager.getStreamVolume( AudioManager.STREAM_VOICE_CALL ); Log.d(VIOCE_CALL, max : + max + current : + current);//系统音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_SYSTEM ); current = mAudioManager.getStreamVolume( AudioManager.STREAM_SYSTEM ); Log.d(SYSTEM, max : + max + current : + current);//铃声音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING ); current = mAudioManager.getStreamVolume( AudioManager.STREAM_RING ); Log.d(RING, max : + max + current : + current);//音乐音量max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_MUSIC ); current = mAudioManager.getStreamVolume( AudioManager.STREAM_MUSIC ); Log.d(MUSIC, max : + max + current : + current); //提示声音音量 max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_ALARM ); current = mAudioManager.getStreamVolume( AudioManager.STREAM_ALARM ); Log.d(ALARM, max : + max + current : + current);ps: 游戏过程中只允许调整多媒体音量,而不允许调整通话音量。 setVolumeControlStream(AudioManager.STREAM_MUSIC); 长时间不动,不允许黑屏,View.setKeepScreenOn(true); 估计manifest文件中需要注册权限吧

热点内容
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:783
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249
安卓怎么禁用应用读取列表 发布:2024-09-17 01:46:45 浏览:524
win10设密码在哪里 发布:2024-09-17 01:33:32 浏览:662
情逢敌手迅雷下载ftp 发布:2024-09-17 01:32:35 浏览:337
安卓如何让软件按照步骤自动运行 发布:2024-09-17 01:28:27 浏览:197