7
A
回答
7
看http://developer.android.com/reference/android/media/AudioRecord.html
当你读缓冲字节值将代表幅度。字节值越高,声音越大。
下面是一些我在一个应用程序中使用的缩小版,我写了一段时间后:
添加到您的mainifest.xml
<uses-permission android:name="android.permission.RECORD_AUDIO" />
soundlevel.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ToggleButton
android:id="@+id/togglebutton_record"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />
<ProgressBar
android:id="@+id/progressbar_level"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
SoundLevel.java
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.widget.CompoundButton;
import android.widget.ProgressBar;
import android.widget.ToggleButton;
public class SoundLevel extends Activity {
private static final int sampleRate = 11025;
private static final int bufferSizeFactor = 10;
private AudioRecord audio;
private int bufferSize;
private ProgressBar level;
private Handler handler = new Handler();
private int lastLevel = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.soundlevel);
level = (ProgressBar) findViewById(R.id.progressbar_level);
level.setMax(32676);
ToggleButton record = (ToggleButton) findViewById(R.id.togglebutton_record);
record.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
if (isChecked) {
bufferSize = AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT) * bufferSizeFactor;
audio = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
audio.startRecording();
Thread thread = new Thread(new Runnable() {
public void run() {
readAudioBuffer();
}
});
thread.setPriority(Thread.currentThread().getThreadGroup().getMaxPriority());
thread.start();
handler.removeCallbacks(update);
handler.postDelayed(update, 25);
} else if (audio != null) {
audio.stop();
audio.release();
audio = null;
handler.removeCallbacks(update);
}
}
});
}
private void readAudioBuffer() {
try {
short[] buffer = new short[bufferSize];
int bufferReadResult;
do {
bufferReadResult = audio.read(buffer, 0, bufferSize);
for (int i = 0; i < bufferReadResult; i++){
if (buffer[i] > lastLevel) {
lastLevel = buffer[i];
}
}
} while (bufferReadResult > 0 && audio.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING);
if (audio != null) {
audio.release();
audio = null;
handler.removeCallbacks(update);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private Runnable update = new Runnable() {
public void run() {
SoundLevel.this.level.setProgress(lastLevel);
lastLevel *= .5;
handler.postAtTime(this, SystemClock.uptimeMillis() + 500);
}
};
}
相关问题
- 1. 检查android中的噪声/声音
- 2. iOS获得声音响度
- 3. android:检测声音水平
- 4. 的Android - 检查收音机我打
- 5. 我想要检索的Android
- 6. 声音增殖的影响
- 7. Android的声音流
- 8. 在android中检测'Whistle'声音
- 9. 我想检查的ArrayList索引声明,不使用得到
- 10. 声音计android
- 11. Android和声音
- 12. Android:如何在不受任何Android系统音量(铃声,媒体等)影响的音量下播放声音?
- 13. 如何在录音时检查音频的强度(强度)?
- 14. 检查声音是否完成c#
- 15. 检查,如果声音播放
- 16. 检查系统是否有声音C#
- 17. Soundex和检查无效声音
- 18. Android:检查话筒是否收到任何声音
- 19. 回声和噪音在声音webRTC android
- 20. 检测声音Javascript
- 21. 在Android中检测声音或语音的开始
- 22. 缺失;在声明之前我检查Firebug中的响应?
- 23. 如何检查声音是否停止在我的声卡上播放
- 24. Android声音扬声器
- 25. 我想检查在php
- 26. 我想通过检查NODE_ENV
- 27. 我想检查$('#td1').text()===“x”?
- 28. 如何在Delphi 7中收听麦克风并检测声音响度
- 29. 检测音频中的特定声音
- 30. 如何获得来自主音频通道的当前声音的响度?
感谢您的回复。你可以给我一个代码实现的例子。帮助我吧。 –
编辑我的答案并添加示例代码。 – jawsware
非常非常有用! – Antonio