java.lang.RuntimeException: setAudioSource failed.이라는 에러가 뜹니다
main소스코드는
public class MainActivity extends AppCompatActivity {
SoundMeter sb;
TextView result;
double decibel;
Button start;
String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb = new SoundMeter();
result = (TextView)findViewById(R.id.check_deci);
start = (Button)findViewById(R.id.button1);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sb.start();
str = "현재 데시벨 : " + sb.getAmplitude();
decibel = sb.getAmplitude();
result.setText(str);
}
});
}
public class SoundMeter {
static final private double EMA_FILTER = 0.6;
private MediaRecorder mRecorder = null;
private double mEMA = 0.0;
public void start() {
if (mRecorder == null) {
mRecorder = new MediaRecorder();
mRecorder.reset();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
mRecorder.start();
mEMA = 0.0;
}
}
public void stop() {
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
public double getAmplitude() {
if (mRecorder != null)
return (mRecorder.getMaxAmplitude()/2700.0);
else
return 0;
}
public double getAmplitudeEMA() {
double amp = getAmplitude();
mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
return mEMA;
}
}
}
이고
매니페스트에는
<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
추가가 되어있는 상황입니다.