首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android AudioRecord读取总是返回-3 (ERROR_INVALID_OPERATION)

Android AudioRecord读取总是返回-3 (ERROR_INVALID_OPERATION)
EN

Stack Overflow用户
提问于 2017-06-17 11:02:12
回答 3查看 2.3K关注 0票数 8

我尝试将代码简化到最低限度,但仍然无法工作:

代码语言:javascript
运行
复制
public class MainActivity extends AppCompatActivity {

AudioRecord rec;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rec=  new AudioRecord(MediaRecorder.AudioSource.MIC,44100, AudioFormat.CHANNEL_IN_MONO,AudioFormat.ENCODING_PCM_16BIT,8192);

    short buff[] = new short[8192];
    int read = rec.read(buff,0,buff.length);
    System.out.print(read);
}

总是返回-3无论发生什么。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-19 14:50:28

和我的朋友一起,我们终于解决了这个问题。在调用read()之前,需要调用AudioRecord.startRecording()。同样,在完成之后,您应该调用AudioRecord.stop()。我不知道为什么很难找到这些基本的信息

票数 8
EN

Stack Overflow用户

发布于 2017-06-17 11:04:56

你检查过清单中的权限了吗?

代码语言:javascript
运行
复制
</application>

<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

文件上说:

从音频硬件中读取音频数据,以便记录到字节数组中。AudioRecord构造函数中指定的格式应该是ENCODING_PCM_8BIT,以对应于数组中的数据。

参数

audioData字节:将录制的音频数据写入其中的数组。此值绝不能为空。

offsetInBytes int:在audioData中以字节表示数据的索引。

sizeInBytes int:请求的字节数。返回

int 0或读取的正字节数,或下列错误代码之一。字节数不会超过sizeInBytes。

ERROR_INVALID_OPERATION (如果对象未正确初始化)

我认为您应该检查AudioRecord对象的初始化。所以看看这个答案:Android AudioRecord示例

票数 3
EN

Stack Overflow用户

发布于 2017-06-19 11:52:07

根据Android的文档-

-3表示它是无效操作

表示由于方法使用不当而导致的失败。 常数:-3 (0xfffffd)

这个问题很可能是因为它无法使用您指定的参数创建一个AudioRecord实例。

创建对象之后,尝试通过方法getState检查它是否被正确初始化。

代码语言:javascript
运行
复制
    if (rec.getState() == AudioRecord.STATE_UNINITIALIZED) {
        // Oops looks like it was not initalized correctly
    }

如果状态确实未初始化,则尝试设置不同的音频属性。请查看AudioRecord 构造函数的文档,文档提供了如何初始化不同参数的详细信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44603818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档