1. ASIO注册DllRegisterServer/DllUnregisterServer
    Windows下的ASIO分32位和64位,即使在64位操作系统下,有些软件例如千千静听,还是只会去找32位的ASIO,所以在32位OS下面我们只需安装32位ASIO,而64位OS下面我们要把32位ASIO和64位ASIO都安装上。对应于32位和64位OS,Buckhorn声卡的ASIO的文件名分别为bhuasio32.dll和bhuasio64.dll,下面我们的讲解都是基于这两个文件。

1.1 ASIO的安装
Windows下的ASIO驱动其实就是一个dll程序,提供DllRegisterServer,DllUnregisterServer这两个标准接口,供安装和卸载的时候使用。安装和卸载,可以使用Windows自带的dll注册程序regsvr32:
regsvr32 /s “C:Program Files (x86)Buckhorn_Studiohasio32.dll”
regsvr32 /s “C:Program Files (x86)Buckhorn_Studiohasio64.dll”
这时bhuauioxx.dll的DllRegisterServer接口函数会被调用。
卸载时:
regsvr32 /s /u “C:Program Files (x86)Buckhorn_Studiohasio32.dll”
regsvr32 /s /u “C:Program Files (x86)Buckhorn_Studiohasio64.dll”
这时bhuauioxx.dll的DllUnregisterServer接口函数会被调用。

1.2 ASIO 接口展现
为了让上层软件找到我们的ASIO,我们需要在DllRegisterServer函数里添加下图中的两个注册表,这是ASIO规范里的要求,上层软件都会按照这个注册表去寻找出所有的ASIO接口的—如果系统安装了不止一个ASIO声卡的话。

注意,这个CLSID的值,需要大家自己为自己的产品去生成一个的,可以使用visual studio里的Tools->Create GUID,产生全球唯一的一个GUID。

在的DllRegisterServer函数里创建这两个注册表,而在DllUnregisterServer函数里删除这两个注册表。在32位OS下这样做足够了,但在64位OS下,这两个注册表仅仅是注册了bhuasio64.dll,我么还要注册一个32位的ASIO,位于“ComputerHKEY_LOCAL_MACHINESOFTWAREWOW6432NodeASIO”下。这时,上层软件就可以找到我们的ASIO了:

  1. ASIO数据流
    ASIO和上层软件之间的音频格式是PCM,上层软件从ASIO处看到的是有多少输入通道,有多少输出通道,没有立体声5.1声道等概念,由我们的ASIO了解到的下层物理声卡和虚拟声卡的通道数(立体声,5.1声道等),把上层软件的单声道输出组装成下层声卡可以认出的多声道输出格式。而在输入方向,ASIO会把来自声卡的多声道输入数据,分离成单声道的PCM数据流。下图以双声道声卡为例描述ASIO音频流:

具体的在输出方向组合成多声道,在输入方向分离成单声道,数据帧组装方式如下图:

  1. ASIO与上下层的接口
    ASIO与上层软件之间,是通过两个buffer交换数据的,这个buffer大小就是我们在ASIO设置界面里头看到的32/64/128/256/512 Sample,当ASIO把当前buffer的输出数据发送完成,并且输入数据也接收完成时,ASIO会去调用上层软件给我们的switchbuffer函数指针,上层软件这个回调函数就会把ASIO当前的buffer取走,把另一个新buffer递交给ASIO,这个新buffer里头已经由上层软件放入了需要输出的音频数据,并且输入的数据已经被上层软件copy走了。这就类似于下图的传动轮:

而ASIO与下层驱动之间,可以通过DeviceIoCotrol(READ, OVERLAPPED)输入数据,通过DeviceIoCotrol(WRITE, OVERLAPPED)输出数据的。当然,采用异步操作,就是通过switchbuffer获取新buffer之后,立即在输出方向组合成下层声卡可以接受的多声道PCM音频流,调用DeviceIoCotrol(WRITE, OVERLAPPED)输出;而在输入方向调用DeviceIoCotrol(READ, OVERLAPPED)以读取输入音频流。由于是异步读写,这些函数调用会立即返回,然后ASIO调用WaitForMultiObject等待这些所有输入输出都完成,就把传动轮转一步,也就是调用switchbuffer进行下一轮操作。
如此,ASIO音频流就流动起来了。搞定ASIO注册和数据流之后,ASIO其它接口部分就容易了,可以下载免费的asio sdk,并参考里头的spec,详细地描述了接口要求。

原文链接:添加链接描述

音频 ASIO 驱动开发相关推荐

  1. MTK 驱动(60)---Audio驱动开发之音频链路

    Audio驱动开发之音频链路 [元器件说明] 本文中使用的 Codec 芯片为 ALC5677. [音频链路模型] 一个常见的音频链路如 图1 所示,包含 音频输入.ADC.DSP.DAC.音频输出 ...

  2. STM32MP157驱动开发——Linux 音频驱动

    STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...

  3. 论坛热贴 | RT-Thread音频驱动开发(一)

    如果你也有文章愿意分享并希望获得官方的写作指导,可以发送文章/联系方式邮件至邮箱:xuqianqian@rt-thread.com 今天主要是讲解音频虚拟驱动来分析驱动的编写.但是这篇文章并不会讲解关 ...

  4. 基于imx8mq的NAU8822音频驱动开发

    Nau8822音频驱动 说明:此驱动是基于imx8mq soc,内核版本为4.19.35. 1. 将新唐官方提供的音频解码驱动文件nau8822.c.nau8822.h添加到sound\soc\cod ...

  5. 竹林蹊径:深入浅出Windows驱动开发(china-pub预订中)

    竹林蹊径:深入浅出Windows驱动开发(china-pub预订中) 基本信息 作者: 张佩   马勇   董鉴源 出版社:电子工业出版社 ISBN:9787121125553 内容简介 本书是作者根 ...

  6. 初入android驱动开发之字符设备(一)

    大学毕业,初入公司,招进去的是android驱动开发工程师的岗位,那时候刚进去,首先学到的就是如何搭建kernel.android的编译环境,然后就是了解如何刷设备以及一些最基本的工具.如adb.fa ...

  7. Linux USB 驱动开发(五)—— USB驱动程序开发过程简单总结

    http://blog.csdn.net/zqixiao_09/article/details/51057086 设备驱动程序是操作系统内核和机器硬件之间的接口,由一组函数和一些私有数据组成,是应用程 ...

  8. Windows CE设备驱动开发之电源管理

    4.7电源管理 电源管理模块管理设备电源,从而全面改进操作系统的电源使用效率:它所有设备的电源使用,同时能与不支持电源管理的应用程序及驱动程序共存. 使用电源管理可以有效的减少目标设备的电源消耗,同时 ...

  9. S5PV210开发 -- 串口驱动开发

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78579074 上篇文章讲的 UART,更多的是硬件相关的知识.接下来进入正题 ...

  10. 新书出版:《Android深度探索(卷1):HAL与驱动开发》

    <Android深度探索(卷1):HAL与驱动开发> [1]亚马逊 [2]当当网 [3]京东商城 [4]互动网 [5]淘宝网 [6]豆瓣网 < Android深度探索(卷1):HAL ...

最新文章

  1. C#双面打印解决方法(打印word\excel\图片)
  2. 基于Flume的美团日志收集系统(二)改进和优化
  3. C#调用C++dll
  4. Oracle绝对值函数
  5. CodeForces - 1328D Carousel(构造+贪心)
  6. 浅谈web前端理解一(前端学习路线)
  7. mysql数据库之忘记root密码
  8. Linux 阵列卡驱动安装
  9. Spark RDD Action
  10. #include““ 和 #include<>
  11. XShell提示Connection closed by foreign host的问题 和 路由器分配IP的规则
  12. linux拷贝不是某个后缀的文件夹,linux下怎么把一个文件复制到多个文件夹里
  13. 推荐好用在线画图网站
  14. EP主机分销PHP源码,最新EP主机分销全解密源码+详细搭建教程
  15. 示波器的使用和二极管充放电过程
  16. java log4j 动态配置_动态更改log4j日志级别
  17. 蓝牙协议分析工具Wireshark/Frontline/Ellisys的使用
  18. 计算机识别不到硬盘,电脑检测不到硬盘怎么办,怎么修复硬盘问题
  19. 伊利诺伊香槟分校计算机排名,伊利诺伊大学香槟分校计算机专业排名好不好?_托普仕留学...
  20. csrf 功能 及 csrf装饰器使用

热门文章

  1. RapidMiner是什么,主要的功能和特点是什么?
  2. rational rose的下载和安装教程
  3. python3解析纯真ip数据库
  4. 华为android9升级包,华为Mate9官方固件ROM刷机包
  5. python爬取微博评论数据_Python爬虫之微博评论爬取!
  6. android rmvb格式下载,rmvb格式转换器安卓版
  7. 解决 googel 无法直接跳转网页打开搜索结果
  8. Head First 深入浅出系列 电子书
  9. 小数分频器vhdl实现_使用VHDL进行分频器设计(含小数)
  10. 【进销存管理系统——开题报告 分享(仅供参考呀)】