gpt4 book ai didi

java - Android:audioRecorder.getState() 在 Samsung Galaxy Tab 中发送 0

转载 作者:行者123 更新时间:2023-11-30 03:25:51 25 4
gpt4 key购买 nike

我正在使用下面的代码来获取设备的有效采样率,但对于我的三星 Galaxy Tab 1 操作系统版本 2.3.6,它始终为 audioRecorder.getState() 发送 0,但它很好适用于三星 Galaxy S2。

对于 Galaxy Tab,我总是得到 desiredRate = -1;

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

请帮忙

最佳答案

我在这里看到两个问题:

  1. 您正在为 bufferSizeInBytes 使用硬编码值。根据documentation ,如果您使用小于 getMinBufferSize 的值,将导致初始化失败。为什么不在构造函数中使用 bufferSize 的值?此外,在调用 getMinBufferSize 时使用相同的 channelConfig 值。

  2. 类似于此 question 中的答案, 有人可能没有释放 AudioRecord 资源。您可以对 if 语句进行一些更改,如下面的代码块所示。如果这是真的,那么您的代码将在尝试初始化 44100 的比特率时失败,正确释放资源,然后成功初始化 8000 的比特率。如果您仍然想要 44100 的比特率,请使用new int[] {44100, 44100, 8000, 11025, 16000, 22050}

下面的代码块包括对您的代码所做的两项更改。请尝试一下,让我知道你得到了什么。

public static void getValidSampleRates() {
int desiredRate = 0;
for (int rate : new int[] {44100, 8000, 11025, 16000, 22050}) {
int bufferSize = AudioRecord.getMinBufferSize(rate, AudioFormat.CHANNEL_IN_MONO, 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, bufferSize);

if (audioRecorder.getState() != AudioRecord.STATE_INITIALIZED) {
desiredRate = -1;
audioRecorder.release();
} else {
desiredRate = rate;
break;
}
}
}
}

关于java - Android:audioRecorder.getState() 在 Samsung Galaxy Tab 中发送 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18266680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com