热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

audiorecord怎么释放_(转)AudioRecord释放资源错误(进程意外中断)

释放资源即AudioRecord.release()方法,前两天自己随手想到的一个函数,写入还真有,而且正是想要的方法--释放当前占用的资

释放资源 即AudioRecord.release()方法,前两天自己随手想到的一个函数,写入还真有,而且正是想要的方法--释放当前占用的资源,但是在使用中可能遇到各种各样的问题,不适用它问题就更严重了。

目前很多网上关于AudioRecord的讲解都没有考虑release这个方法,或者google code上面一些方法不需要release资源。但是在用的时候,尤其来电时释放mic资源是一种必须的需求,所以还是要用到release方法释放mic资源。

个人感觉各式各样的网络流行版本中,http://blog.csdn.net/zhjp4295216/archive/2010/11/09 /5996735.aspx这个还是比较靠谱的一个,但是它说的释放mic资源根本无法完全释放,会在电话中出现断断续续的情况。但对于使用可以作为一个参照版本,还是不错。

先看看api上的介绍:

public void release ()

Since: API Level 3

Releases the native AudioRecord resources. The object can no longer be used and the reference should be set to null after a call to release()

你一定觉得这个解释非常恼火,起码我觉得是的。根据我使用的结果应该意思是:

释放之后这个对象不能再被使用,而且引用必须变null。像废话,就是翻译嘛,但是意思不仅仅是翻译。

两种最基本的错误方式:

1。在一个线程里面处理录音,然后继承Thread的类中提供方法release,然后电话来之前先stop,然后release。

2。像那个网址里面,但是在run最后加上release。电话来时、或者后台运行时先pause,然后start

据这两个例子,肯定都是错的。先说问题

1。先stop或suspend再release,本质上对于audiorecord的操作还没有结束,只是要求强制关闭(stop方法本身不安全)。还是会继续占用mic,所以释放就会造成线程意外结束,系统报出线程意外中断的错误。这就是the reference should be set to null。虽然来电的情况系统会自动为你再次开启,但是总不至于每次都让用户去看到程序中断吧。

2。先pause掉之后,程序正常隐蔽,但是由于程序还会在start再次调用record,虽然是重新生成一个新的。这就是object can no longer be used and the reference should be set to null。所以在重新回到程序时会抛出相同错误。

这里解决方案已经很明显了,就是在实例程序的run结尾加上ar.release();。 来电结束时重新生成一个新的线程,让原来的线程结束去吧!这样就可以再来电和后台时成功释放mic了,希望解释这两个错误能让你了解那句话和系统抛出的这个纠结的错误。

另外,那个实例有个错误,大家想必看到了吧,还是说一下,网上错误太多了:

public void start() {

// 在调用本线程的 Activity 的 onResume 里调用,以便 Activity 恢复后继续获取麦克风输入音量

if (!isRun) {

super.start();

isRun = true;

}

}

附:很多录音在模拟器是无法测试的,所以请在真机上测试,也所以才有这个纠结的不好找到源头的错误。

private final static int CHANNEL_MODE = AudioFormat.CHANNEL_CONFIGURATION_MONO;

private final static int ENCODING = AudioFormat.ENCODING_PCM_8BIT;

recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, RATE,

CHANNEL_MODE, ENCODING, CHUNK_SIZE_IN_SAMPLES * 2);

我记得貌似只支持这个,频率是最低的吧 起码44100不支持,你可以用AudioRecord.getMinBufferSize这个方法测试一下。有个外国的网站上有人统计过,但是找不到了,忘了保存起来了,只能分享这些了,呵呵。好了,就这些



推荐阅读
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文详细介绍了Java中的访问器(getter)和修改器(setter),探讨了它们在保护数据完整性、增强代码可维护性方面的重要作用。通过具体示例,展示了如何正确使用这些方法来控制类属性的访问和更新。 ... [详细]
author-avatar
liunian007
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有