當前位置:首頁 » 安卓系統 » 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文件中需要注冊許可權吧

熱點內容
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:170
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:778
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:100
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:208
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811
銀行支付密碼器怎麼用 發布:2024-09-08 06:39:52 瀏覽:513
蘋果手機清理瀏覽器緩存怎麼清理緩存 發布:2024-09-08 06:31:32 瀏覽:554
雲伺服器的優點與缺點 發布:2024-09-08 06:30:34 瀏覽:734