无法检索 write() 的 AudioTrack 指针

2023-12-20

我正在尝试实现 AudioTrack 以在 Android 设备中检索来自 IAX 的来电音频,但一段时间后遇到异常。

private void writeBuff(short[] buf) {

    try {

        if (this.track == null) {
            Log.w("IAX2Audio", "write() without an AudioTrack");
            return;
        }

        int written = 0;
        while (written < buf.length) {


            if (this.track != null) {
                int res;

                res = this.track.write(buf, written, buf.length - written);      
                switch (res) {
                case AudioTrack.ERROR_INVALID_OPERATION:
                    Log.e("IAX2Audio", "Invalid write()");
                    return;
                case AudioTrack.ERROR_BAD_VALUE:
                    Log.e("IAX2Audio", "Bad arguments to write()");
                    return;
                }

                written += res;
            }

        }

    } catch (Exception e) {
        e.printStackTrace();
    }

}

异常发生在这里

 04-27 18:26:15.865: W/System.err(12681): java.lang.IllegalStateException: Unable to retrieve AudioTrack pointer for write()
04-27 18:26:15.890: W/System.err(12681):    at android.media.AudioTrack.native_write_short(Native Method)
04-27 18:26:15.895: W/System.err(12681):    at android.media.AudioTrack.write(AudioTrack.java:1023)
04-27 18:26:15.900: W/System.err(12681):    at org.androvoip.iax2.AndroidAudioInterface.writeBuff(AndroidAudioInterface.java:322)
04-27 18:26:15.900: W/System.err(12681):    at org.androvoip.iax2.AndroidAudioInterface.playbackTime(AndroidAudioInterface.java:350)
04-27 18:26:15.905: W/System.err(12681):    at org.androvoip.iax2.AndroidAudioInterface.playTick(AndroidAudioInterface.java:413)
04-27 18:26:15.905: W/System.err(12681):    at org.androvoip.iax2.AndroidAudioInterface.access$2(AndroidAudioInterface.java:406)
04-27 18:26:15.910: W/System.err(12681):    at org.androvoip.iax2.AndroidAudioInterface$3.run(AndroidAudioInterface.java:560)
04-27 18:26:15.910: W/System.err(12681):    at java.lang.Thread.run(Thread.java:856)

这是在接收正确的音频一段时间后创建的异常,当我尝试再次启动它时出现异常res = this.track.write(buf, written, buf.length - written);

这就是我停止并发布我的曲目的方式

public void stopPlay() {
    Log.d("IAX2Audio", "stopPlay()");

    if (this.track == null)
        return;

    if (this.track != null) {
        //this.track.stop();
        //this.track.release();

        if (this.track != null
                && this.track.getState() != AudioTrack.STATE_UNINITIALIZED) {
            if (track.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {
                track.stop();
                track.release();
            }
        }
    }

    try {
        if (this.playThread != null) {
            final Thread t = this.playThread;
            /* Setting this to null is the signal to the thread to exit. */
            this.playThread = null;
            t.join();
        }
    } catch (final InterruptedException e) {
        e.printStackTrace();
    }

}

请查找 AndroidAudioInterface.java 的更新修复解决方案。AndroidAudioInterface.java https://www.dropbox.com/s/bona9ft21g900lr/AndroidAudioInterface.java


这是一个简单的修复,但可能是 Android 问题,请参阅下面我的修复

if (track != null && track.getState() != AudioTrack.STATE_UNINITIALIZED) {
    if (track.getPlayState() != AudioTrack.PLAYSTATE_STOPPED) {

        try{
            track.stop();
        }catch (IllegalStateException e)
        {
            e.printStackTrace();
        }

    }

    track.release();     
    am.setMode(AudioManager.MODE_NORMAL); 

    //track.release();
    //track = null;
}

和创建时

private AudioManager am;

am = (AudioManager)this.context.getSystemService(Context.AUDIO_SERVICE); 
am.setMode(AudioManager.MODE_NORMAL); 
setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);

并且始终在线程中使用 AudioTrack 作为主线程也将交给您的应用程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法检索 write() 的 AudioTrack 指针 的相关文章

  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win
  • 由于 play-services-base-17.1.0.aar 转换错误,无法构建项目

    所以基本上我已经快一年没有打开我的 Android Studio 项目了 这次是打开和构建它的时候了 更新 Android Studio 和项目的所有插件后 我终于遇到了这个错误 Execution failed for task app
  • ListItem 附加自定义值

    我在asp net中使用dropdownlist 它有代表下拉列表项目的ListItem集合 每个ListItem只有两个字段来保存数据 Value和Text字段 但这些还不够 我想保存更多数据对于每个项目 假设附加字段中有 Text1 和
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Excel 2013 数据透视表不会更改当前页面,除非手动导航到

    我们有一小段 VBA 代码 多年来一直完美运行 本质上是 Me PivotTables APivot PivotFields AField CurrentPage Some text 这种方法一直有效 直到 Excel 2013 该行将失败
  • 如何从 Magento One Page Checkout 获取发布数据?

    为了在 Magento Checkout 中添加客户评论字段 我在相应的模板文件中添加了一个文本字段 并使用如下观察器将评论添加到订单中 comment strip tags Mage app gt getRequest gt getPar
  • 如何在 iOS 中注册自定义文件类型

    我目前正在创建一个应用程序 我想让用户在其中备份他们的文件 plist m4a 我压缩文件并将扩展名更改为自定义扩展名 专门针对我的应用程序 例如 MyBackup 然后 用户可以通过电子邮件或 iTunes 文件共享进行导出 我已经阅读过
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它
  • 如何更改 aptana studio 的背景颜色?

    如何将 Aptana IDE 或整个主题 的黑色背景更改为其他背景 例如蓝色 正如 gyozo 在评论中提到的 对于蓝色主题 请使用 窗口 gt 首选项 gt Aptana Studio gt 主题 并选择 Eclipse 主题
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • 在Python中停止ThreadPool中的进程

    我一直在尝试为控制某些硬件的库编写一个交互式包装器 用于 ipython 有些调用对 IO 的影响很大 因此并行执行任务是有意义的 使用 ThreadPool 几乎 效果很好 from multiprocessing pool import
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保
  • 使用 IIS 发布:找不到服务器 DNS

    我正在尝试使用 IIS 发布我的项目 我能够通过 Visual Studio 发布它 La aplicaci n web se public correctamente file D www plataformafantasy com Co
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域
  • 窗口未定义 - Next.js 13 - 服务器组件中的客户端组件 - [重复]

    这个问题在这里已经有答案了 Leaflet 被导入到一个导入到客户端组件的文件中 那么为什么服务器运行它并抛出此错误呢 它实际上在重试后确实有效 并最终使网站正常运行 我尝试在内部使用动态导入useEffect 没有骰子 Reference
  • 谓词对于列表中的所有元素都必须为 true

    我有一组事实 likes john mary likes mary robert likes robert kate likes alan george likes alan mary likes george mary likes har

随机推荐

  • 在android中选择文件后找不到文件错误

    我想在我的 Android 应用程序中打开 pdf 文件 现在我可以浏览 pdf 文件 浏览文件后我得到文件未找到当我检查文件是否存在时出错 现在选择文件后我选择的文件 Uridata getData 就好像 content com and
  • 停止在传单中传播“点击”事件

    在我们正在使用的一个项目中Leaflet随着Leaflet markercluster插入 纵观整个Leaflet的来源我发现它附加了 collapse 函数到地图的click事件 因此每当我单击地图时 它就会收缩之前扩展的集群 现在 我想
  • OCMockito 捕获原始类型?

    如何使用 OCMockito 捕获具有原始值的参数 MKTArgumentCaptor 似乎只能捕获对象类型 Xcode 提示 整数转换不兼容的指针 对于原始论证 你必须跳一点舞蹈 假设我们模拟了 NSMutableArray 并想要验证对
  • 在自定义主页和产品类别档案中显示 WooCommerce 产品属性

    以下代码在产品类别存档页面上显示产品属性 并且基于 在特定的 Woocommerce 产品类别档案页面上显示产品属性 https stackoverflow com questions 53510707 display product at
  • 使用 Java 8 Stream API 查找枚举值

    假设有一个名为 Type 的简单枚举 定义如下 enum Type X S1 Y S2 private String s private Type String s this s s 查找给定的正确枚举s使用带有 for 循环的静态方法可以
  • setAttribute 会自动转义 HTML 字符吗?

    我正在调查我们系统中的一个错误 其中链接的标题属性被设置为类似于click if value gt 400但实际显示的工具提示是click if value gt 400 该标题值是由用户输入定义的 因此原始工程师对文本进行了转义 这样就不
  • -rpath-link 的基本原理

    我在用 rpath link with ld当创建一个共享库时 需要来自不在默认位置的其他共享库的一些符号 例如 如果我将其创建为构建过程的一部分 我的问题是 为什么不 L选项允许具有此功能吗 为什么ld需要额外的选项来做到这一点吗 Non
  • 仅使用绝对值对数组进行排序并显示真实值

    打印绝对排序数组 请参阅示例输出以获得说明 Input 9 2 10 3 5 34 22 7 我想要输出 2 3 5 7 9 10 22 34 我被尝试过Arrays sort a 请帮帮我 谢谢 在 Java 8 中 您可以像这样使用 l
  • Android Gradle - 如何包含根项目中的资源?

    我有以下项目结构 MyProject build gradle client private server public app build gradle lint xml proguard project txt project prop
  • JSON.net反序列化对象嵌套数据

    我正在使用 SwiftType Elastic Search C 并遇到反序列化响应的问题 因为 SwiftType 将所有字段都返回为带有 a 的对象raw财产 https swiftype com documentation app s
  • setOnItemClickListener() 不适用于自定义 ListView @ Android

    我已经实现了一个自定义ListView通过扩展LinearLayout对于每一行 每行都有一个小缩略图 一个文本和一个check box The list view部署正确 我可以毫无问题地滚动和快速浏览它 But The ListView
  • Puput(基于 Wagtail 的博客)- 文件在哪里?

    我已将 puput 博客添加到现有的 Django 项目中 我遵循了设置独立博客应用程序的所有步骤 https puput readthedocs io en latest setup html https puput readthedoc
  • 无法连接到 docker 的 docker 镜像中的守护进程 docker

    我正在尝试使用 gitlab 构建 CI 我从 docker 的 docker 镜像开始 我的前端存储库没有任何问题 但现在后端使用相同的 gitlab ci 配置文件 我遇到了这个守护进程错误 这是构建的输出 0KRunning with
  • 图像叠加闪烁?

    事实是所有这些解决方案都有效 只是不适用于该项目 所以我将重新提出问题 略有不同 本质上我有一个图像 当有人将鼠标光标移到它上面时 它会显示一个 div 其中包含一个图像 又名播放按钮 当他们将光标移动到图像之外时 播放按钮就会消失 它有效
  • 是否可以在 Excel VBA 中返回复选框的名称?

    我目前正在处理几个包含数百个复选框的工作表 这些复选框背后的代码工作正常 但我正在寻找一种方法来列出每列复选框的名称 即 例如 我需要知道 G 列中所有复选框的名称 有谁知道这是否可能 预先非常感谢 考虑使用 TopLeftCell 属性
  • 可数对象和不可数对象有什么区别

    我正在尝试找出可数和不可数对象之间的差异 首先我找到了对象的类型 echo gettype data current fiat currency 这是一个Object 但是当我检查它是否是一个可数对象时 var dump data curr
  • 获取 Google 折线图的颜色值?

    可以为 Google 图表设置颜色值 但是是否可以获取图表的预设颜色值 是否有一个数组可以保存这些值并可以访问 在此 Google 网上论坛讨论中 默认颜色数组未记录且无法访问 但是 如果您想要颜色数组 泽维尔 古马拉 https grou
  • VBA:具有多个操作的单行 if 语句

    我真的应该能够用谷歌搜索这个 但我找不到我想知道的东西 我想检查文件是否存在 如果没有 将弹出一个消息框 并且 VBA 应退出子进程 If Dir C file txt vbDirectory Then MsgBox File doesn
  • 为什么 Spark ML ALS 算法打印 RMSE = NaN?

    我使用 ALS 来预测评级 这是我的代码 val als new ALS setMaxIter 5 setRegParam 0 01 setUserCol user id setItemCol business id setRatingCo
  • 无法检索 write() 的 AudioTrack 指针

    我正在尝试实现 AudioTrack 以在 Android 设备中检索来自 IAX 的来电音频 但一段时间后遇到异常 private void writeBuff short buf try if this track null Log w