用 Golang 开发 Android 应用 -- Audio/openAL 使用

  • 计划按以下的内容更新
  • Audio(openAL) 使用
    • Record 代码说明
    • 由 main_windows.go 展开说
    • 重要提醒

计划按以下的内容更新

  • 基本环境配置
  • 简单 UI
  • Storage 使用
  • Sensor 使用
  • Audio(openAL) 使用
  • Camera 使用
  • OpenCV 使用

Audio(openAL) 使用

  Audio 是很重要的部分,但我之前漏掉它了,所以最初的计划里没有相关内容,发现这个漏网之鱼后,我"上下求(sou)索""七拼八湊"终于搞定用于 Demo 的相关代码。这里稍微提一下过程,可以作为借鉴。首先当然是各种搜索,看是否有现成可用的 Go Audio 模块,直接搜没什么结果。后面想到 3D 引擎都需要 Audio 模块,那就搜索用 Go 实现的 3D 引擎,结果还真搜到几个有 Audio 模块。那接下来自然是学习、理解、拷贝、编码…
  总之在 Android (4.4 以上)平台都实现了 OpenSLES (Open Sound Library for Embedded Systems),但是直接用它太复杂了,所以我这里基于 openAL 来作Audio 演示。之所以把 audio 模块源码放到这个应用的vender的原因也就很明显了 ———— 它只是用来 Demo 的。

  按惯例网上一搜一大把的东西这里就不说了,那我们把演示程序的代码中有“意思”的部分来说明一下。这个 Demo 是个简单的录音程序。

Record 代码说明

   // 需手动 Load libopenal.solibs := app.FindMatchLibrary("libopenal*.so")if len(libs) > 0 {al.InitPath(libs[0])}

这一段的目的其实很简单,就是保证 dlopen("libopenal.so",...)(C代码) 能成功。这个例子中 libopenal.so 是放到 apk 的 lib/%ABI%/ 下,在 Android 7.0 上直接这样执行 dlopen("libopenal.so",...) 能成功。但在 Android 4.4 上却会失败。为了解决这个问题,需要传入 libopenal.so 的完整路径 dlopen("/data/???/libopenal.so",...),显然 app.FindMatchLibrary 这个函数就是用于查找完整路径的,它会优先找 apk 中的 lib 安装在手机中的位置。
因此上面的代码就是找到 libopenal.so 的路径,并传给 al 的初始化函数,这样就能兼容 Android 各个版本。

   // SAMPLERATE 和 SAMPLESIZE 分别是 44100、2048 这两个值等比缩小,// 调用 CaptureOpen 就能成功const DENOMINATOR = 1const SAMPLERATE = 44100 / DENOMINATORconst SAMPLESIZE = 2048 / DENOMINATOR...d := alc.CaptureOpen("", SAMPLERATE, FORMAT, SAMPLESIZE)

上面这段代码的意思并不是只有这两组数等比缩小才能成功,而是通过反复尝试,这样成功的可能性大一些。同时也要提醒一下,可能在 PC 上运行(对的,OpenAL 也可在 PC 上运行)没问题的代码,在手机上不一定能成功,如果是 CaptureOpen 失败,就尝试修改这两个值。

由 main_windows.go 展开说

这个版本的 Record 和之前的列子有一个明显的不同,就是多了一个 main_windows.go 文件,它是用来编译 PC 版的 Record 。理论上它同样支持在 linux 下运行,但因为我没有验证,所以就限定为 windows 了。这下大家之前对if runtime.GOOS == "android"的疑问,现在终于解惑了^_^ 。
其实重点是这里给出了一个用 PC 来“简单模拟” Android 的方法,我们可以先在 PC 上调试好界面,甚至是逻辑。只要模拟发各种 event ,大多数逻辑部分都可以先在 PC 上跑通过,没有问题了再在手机上验证、调试这样一定是事半功倍的。

重要提醒

最后要提醒的是要确认电脑上有audio input设备,否则可能跑不起来,包括 Android 仿真也是。
然后如果 PC 版还跑不起来,先确认 OpenAL32.dll(windwos)或libopenal.so(linux) 有没有?没有的话先安装 openal。
再确认一下是不是有 libGLESv2.dll(.so) 和 libEGL.dll(.so) ? 没有?下载一个Visual Studio Code,它里面有这两个文件。

开始提到的用于参考的 3D Engine :

  • g3n - https://github.com/g3n/engine
  • vu https://github.com/gazed/vu
  • azul3d https://azul3d.org

用 Golang 开发 Android 应用(五)—— Audio(openAL)使用相关推荐

  1. 【笔记】golang开发android app小记

    golang开发android app小记 Google和Oracle打过Java的官司以后就开始慢慢转kotlin了.从JVM虚拟机打官司,改成android用JVM从堆栈平衡转寄存器模式,再到语言 ...

  2. android openal播放器,用 Golang 开发 Android 应用(五)—— Audio(openAL)使用-Go语言中文社区...

    计划按以下的内容更新 Audio(openAL) 使用 Audio 是很重要的部分,但我之前漏掉它了,所以最初的计划里没有相关内容,发现这个漏网之鱼后,我"上下求(sou)索"&q ...

  3. go语言android开发环境搭建,golang开发android应用(一) - go语言android应用环境搭建...

    基于golang的android动态库开发,很久以前golang就支持开发android上的动态库及应用了,golang的环境搭建就不说了,直接从gomobile开始 软件依赖 golang, gom ...

  4. golang开发android的jni,用纯Golang开发Android与IOS应用

    Golang1.4就对Android开发做了些支持,1.5版本前几天好像发布了,特意看了整理下,1.5支持32位与64位的android与IOS应用开发了,当然还不是很好用,听说性能比Java做的程序 ...

  5. go语言能编android程序吗,用 Golang 开发 Android 应用(二)—— 简单 UI-Go语言中文社区...

    计划按以下的内容更新 简单 UI 关于开发一个应用,要有自己的应用名(显示用),和包名(真正唯一的应用名),简单说一台 Android 手机中所有应用的包名是唯一的,如果新安装的应用包名和已安装的应用 ...

  6. golang开发:类库篇(五)go测试工具goconvey的使用

    为什么要使用goconvey测试程序 goconvey 集成go test,go test 无缝接入.管理运行测试用例,而且提供了丰富的函数断言.非常友好的WEB界面,直观的查看测试结果. 如果没有g ...

  7. 列表怎么有限的初始化为零_《零基础学习Android开发》第五课 类与面向对象编程1-1...

    视频:<零基础学习Android开发>第五课 类与面向对象编程1-1 类的定义.成员变量.构造方法.成员方法 一.从数据与逻辑相互关系审视代码 通过前面的课程,我们不断接触Java语言的知 ...

  8. Android开发笔记(五十七)录像录音与播放

    媒体录制MediaRecorder MediaRecorder是Android自带的录制工具,通过操纵摄像头和麦克风完成媒体录制,既可录制视频,也可单独录制音频.其中对摄像头Camera的介绍参见&l ...

  9. Android开发笔记(五十四)数据共享接口ContentProvider

    ContentProvider 前面几节介绍了进程间通信的几种方式,包括消息包级别的Messenger.接口调用级别的AIDL.启动页面/服务级别的Notification,还有就是本节这个数据库级别 ...

最新文章

  1. 自己动手生成评论RSS
  2. 用 python print() 函数实现的三个特效
  3. 上学的你,是不是最怕老师给家长打电话……
  4. cvpr 深度估计_CVPR再现黑科技!你还在相信“眼见为实”?
  5. 缓冲区 | 没吃透Netty 缓冲区,还能算得上Java老司机?
  6. day7 java的构造器
  7. 什么是正则表达式?有什么用?常用的字符有哪些?
  8. 课程作业01——从命令行接收多个数字,求和之后输出结果
  9. java hashset 实现_HashSet实现原理分析(Java源码剖析)
  10. 写通俗易懂代码-用卫语句替代嵌套条件表达式
  11. latex中的对号和错号
  12. 一个好的算法工程应该具备哪几点要素?
  13. labview学习之“创建数组”函数
  14. Java编程思想(一)
  15. 深度学习视觉目标跟踪算法毕业论文【matlab】
  16. rgb sw 线主板接口在哪_有颜值也有实力!利民TL-C12S幻彩RGB电脑散热风扇评测
  17. 使用kettle向HBase导入数据
  18. 柠檬班软件测试靠谱吗 全程班毕业后7天就拿到了offer
  19. SAR,SHR,SAL,SHL区别
  20. 爬虫项目(一)爬虫+jsoup轻松爬知乎

热门文章

  1. python 文本处理 保留中英文和标点符号_python-文本处理和正则表达式
  2. 【微信小程序】onShow中接收参数
  3. WAP1.0 前端开发经验(转)
  4. 企业邮箱“成员收发权限”功能详解【如何开通企业邮箱】
  5. 3.3.6 全微分与复合求导
  6. 让“数据库审计”服务保卫你的数据库
  7. 市场调研-全球与中国沥青铺路材料市场现状及未来发展趋势
  8. 我的兄弟姐妹中感人的亲情
  9. 巴斯卡(Pascal)三角形
  10. 2022家电行业舆情监控及应对分析