在Android中使用AudioTrack播放WAV文件

2024-04-19

我正在使用 Android,试图让我的 AudioTrack 应用程序播放 Windows .wav 文件 (Tada.wav)。坦率地说,这不应该这么难,但我听到了很多奇怪的事情。该文件保存在我手机的迷你 SD 卡上,读取内容似乎不是问题,但是当我播放该文件时(参数我非常确定是正确的),我收到几秒钟的白噪音在声音似乎自行分解为可能正确的东西之前。

我已成功录制并在电话上播放自己的声音 - 我根据本示例中的说明创建了一个 .pcm 文件:

http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html

(没有向后掩蔽)...

有人对网络上在 Android 上播放 .wav 文件的示例有一些建议或了解吗?

谢谢, R。


我偶然发现了答案(坦率地说,通过尝试 &^@!我认为不会起作用),以防有人感兴趣......在我的原始代码中(源自原始帖子链接中的示例),从文件中读取数据如下:

    InputStream             is  = new FileInputStream       (file);
    BufferedInputStream     bis = new BufferedInputStream   (is, 8000);
    DataInputStream         dis = new DataInputStream       (bis);      //  Create a DataInputStream to read the audio data from the saved file

    int i = 0;                                                          //  Read the file into the "music" array
    while (dis.available() > 0)
    {
        music[i] = dis.readShort();                                     //  This assignment does not reverse the order
        i++;
    }

    dis.close();                                                        //  Close the input stream

在此版本中,music[] 是 SHORTS 数组。因此,readShort() 方法在这里似乎有意义,因为数据是 16 位 PCM...但是,在 Android 上这似乎是问题所在。我将该代码更改为以下内容:

     music=new byte[(int) file.length()];//size & length of the file
    InputStream             is  = new FileInputStream       (file);
    BufferedInputStream     bis = new BufferedInputStream   (is, 8000);
    DataInputStream         dis = new DataInputStream       (bis);      //  Create a DataInputStream to read the audio data from the saved file

    int i = 0;                                                          //  Read the file into the "music" array
    while (dis.available() > 0)
    {
        music[i] = dis.readByte();                                      //  This assignment does not reverse the order
        i++;
    }

    dis.close();                                                        //  Close the input stream

在此版本中,music[] 是一个 BYTES 数组。我仍然告诉AudioTrack它是16位PCM数据,而我的Android似乎在将字节数组写入如此配置的AudioTrack中没有问题......无论如何,它最终听起来是对的,所以如果有人其他人想在 Android 上播放 Windows 声音,出于某种原因,这就是解决方案。啊,字节序……

R.

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

在Android中使用AudioTrack播放WAV文件 的相关文章

随机推荐

  • Java ExecutorService:awaitTermination所有递归创建的任务

    我用一个ExecutorService执行任务 该任务可以递归地创建提交给同一个任务的其他任务ExecutorService这些子任务也可以做到这一点 我现在遇到的问题是我想等到所有任务都完成 即所有任务都完成并且他们没有提交新任务 才继续
  • Xcode 将文件框中的 gpx 文件显示为灰色

    我希望我没有忽略任何事情 但我无法将 gpx 文件加载到 Xcode 中 因为它们在文件框中显示为灰色 见图 这在两个位置菜单中都有 在调试器 位置菜单中 参见下图 将 GPX 文件添加到项目 和 场景位置菜单 然而 预设 伦敦等 确实有效
  • 如何总结不同的groupby组合?

    我正在编制一份按县列出的前 3 名作物的表格 有些县的农作物品种相同 顺序相同 其他县也有相同的作物品种 但顺序不同 df1 pd DataFrame County Harney Baker Wheeler Hood River Wasco
  • 如何使用@types/express-session?

    当我写这个时 import Request from express serve static core router post req Request res next gt req session user user tsc给我一个错误
  • 在eclipse中安装了深色主题,但滚动条仍然是灰色的

    我在用日食月神 4 4 0 并试图让它完全黑暗 所以我安装了一个主题插件 Eclipse菜单 gt 帮助 gt Eclipse Marketplace 搜索 Eclipse Color Theme Plugin 在 Windows 首选项
  • 从 Windows 服务中的 OnStart 立即触发计时器_elapsed

    我正在使用一个System Timers Timer我的代码中有如下代码OnStartC Windows 服务中的方法 timer new Timer timer Elapsed timer Elapsed timer Enabled tr
  • 空的、不可编辑的 pg_hba.conf 文件

    我正在尝试使用本教程将我的 Sinatra 应用程序连接到 PostgreSQL 数据库 http samuelstern wordpress com 2012 11 28 making a simple database driven w
  • 不兼容的库版本:nokogiri.bundle 需要版本 11.0.0 或更高版本,但 libxml2.2.dylib

    当我尝试在 Hartl 的教程中运行 rspec 时 出现此错误 我用谷歌搜索了该错误 但它从来都不是针对特定版本的 而且修复程序实际上并不能解决我的问题 Users Jimbo rvm gems ruby 2 0 0 p247 gems
  • D3可折叠树不同节点颜色

    我在 d3 js 中有一个可折叠的树 我的目标是通过 类型 属性为节点着色 例如 类型 str 的节点应填充为红色 而类型 elem 的节点应填充为绿色 我就是无法让它发挥作用 有人能帮助我吗 这是我的代码
  • Android 资产、C、JNI

    如何使用 JNI 从 C 访问 Android 资产 例如 txt 文件 我正在尝试 file android asset myFile txt 以及本地 myFile txt 其中包含 jni 文件夹中的 myFile txt 副本以及
  • ActionMailer 和 Exchange

    我使用 Rails 应用程序和 Postfix 服务器成功通过 SMTP 发送邮件 现在我需要转移到启用了 POP3 和 SMTP 支持的 Exchange Microsoft ESMTP MAIL 服务 版本 6 0 3790 3959
  • SQL数据库自动备份[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 SQL 数据库 我需要每天 至少 备份它 最好每天多次 自动 这样它肯定会完成 我正在运行
  • emacs - 如何在子目录中进行查找文件搜索

    我想为 Emacs 实现类似 Resharper 的 转到文件 功能 当按下上述快捷键时 Resharper 会弹出一个接受通配符字符串的文本框 并显示一个自动完成菜单 其中列出了项目中与该通配符匹配的所有文件 source jetbrai
  • 鼠标悬停时显示链接

    我有页面的某些区域 单击这些区域时 会将用户重定向到某些地址 我的问题是 当用户 将鼠标悬停在 这些区域上时 他们会看到一个指针 但不知道它链接到哪里 就我的目的而言 用户知道他们被链接到哪里是很重要的 我相信当您将鼠标悬停在链接上时 Go
  • 保存图片到mongodb

    我正在尝试使用龙卷风 石油和 mongodb 来做到这一点 avat self request files avatar 0 body nomfich self request files avatar 0 filename try ima
  • Symfony2 Doctrine2 内存泄漏/超出内存限制

    我在symfony2和doctrine2的结合上遇到了很多麻烦 我必须处理巨大的数据集 大约 2 3 百万次写入和读取 并且必须做大量额外的工作以避免内存不足 我找出了两个要点 即 泄漏 内存 它们实际上并不是真正泄漏 而是分配了很多内存
  • 优化缓慢的 ORDER BY RAND() 查询

    我有一个正在使用的查询ORDER BY RAND 但这需要太长时间 而且随着数据的增长 情况会变得更糟 该查询连接两个表 返回 5 个随机产品以及每个产品的随机图像 表 1 产品 product id pk auto inc name de
  • 下载文件 java spring Rest api

    我想制作一个rest api控制器 spring boot 当用get请求时将允许我下载一个excel文件 目前我有这个端点 RequestMapping value download xls method RequestMethod GE
  • 如何在 Bash 中保留带引号的字符串中的换行符? [复制]

    这个问题在这里已经有答案了 我正在创建一个脚本来自动创建 apache 虚拟主机 我的脚本的一部分是这样的 MYSTRING
  • 在Android中使用AudioTrack播放WAV文件

    我正在使用 Android 试图让我的 AudioTrack 应用程序播放 Windows wav 文件 Tada wav 坦率地说 这不应该这么难 但我听到了很多奇怪的事情 该文件保存在我手机的迷你 SD 卡上 读取内容似乎不是问题 但是