android獲取音量
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文件中需要注冊許可權吧