【发布时间】:2013-08-16 05:54:33
【问题描述】:
我正在使用下面的代码来获取设备的有效采样率,但对于我的三星 Galaxy Tab 1 OS 版本 2.3.6,它总是为 audioRecorder.getState() 发送 0,但对于三星 Galaxy S2 则很好。
我总是得到 desiredRate = -1; 的 Galaxy Tab 方法
public static void getValidSampleRates() {
int desiredRate = 0;
for (int rate : new int[] {44100, 8000, 11025, 16000, 22050}) { // add the rates you wish to check against
int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_CONFIGURATION_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);
if (bufferSize > 0) {
// buffer size is valid, Sample rate supported
AudioRecord audioRecorder = new AudioRecord(AudioSource.MIC, rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, 21168);
if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED)
desiredRate = -1;
else
desiredRate = rate;
}
}
}
我在 Android manifest 文件中添加了以下权限
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<application
请帮忙
【问题讨论】:
-
你在 logcat 中得到任何错误打印吗?我本来希望
AudioRecord构造函数打印错误。如果您将bufferSize传递给AudioRecord构造函数而不是使用硬编码的21168值会怎样? -
尝试将您的代码更改为
int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_IN_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);,并将instatiaton 行更改为AudioRecord audioRecorder = new AudioRecord(AudioSource.MIC, rate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize+2000);
标签: java android audio audiorecord