ASIO
+ -

ASIO 函数功能介绍

2022-01-22 242 0

主机应用查询设备驱动

ASIO API为主机应用程序和驱动程序提供多个查询功能。驱动程序初始化后,应用程序将查询以下全部或部分功能:

  • ASIOGetChannels()查询可用音频通道的数量
  • ASIOGetBufferSize()获取支持的音频缓冲区大小
  • ASIOCanSampleRate()询问驱动程序/硬件是否支持特定的采样率
  • ASIOGetSampleRate()获取当前采样率
  • AsioGetLockSources()获取音频硬件的可能时钟源选项
  • AsioGetChannel Info()获取有关特定通道的信息(采样类型、名称、word clock group)
  • ASIOSetSampleRate()设置内部时钟的采样率,应作为基本采样选择外部时钟源时的速率。
  • ASIOSetClockSource()设置时钟源。
  • ASIOGetLatencies()查询相对于bufferSwitch()的固定音频延迟回调。

    ASIOGetLatencies()还必须包含ASIOCreateBuffers()调用的音频缓冲区大小,应用程序必须在创建缓冲区后调用此函数。在调用提前发生的情况下,驱动程序应假定首选缓冲区大小。

ASIO 2.0引入的其他查询。这些查询将通过ASIOFuture()调用进行。

  • kAsioCanTimeInfo查询以支持新的bufferSwitchTimeInfo()回调
  • kAsioCanTimeCode查询音频硬件的时间码支持
  • kAsioCanInputMonitor查询,用于直接输入监控支持

ASIO 2.3引入的其他查询。它们也通过ASIOFuture()实现

  • kAsioCanReportOverload查询驱动程序是否可以检测到过载情况。如果驱动返回ASE_SUCCESS它全权负责检测任何退出音频流并向主机报告。这是通过asioMessage()回调和kAsioOverload完成消息选择器。

  • kAsio GetInternalBufferSamples查询驱动程序的内部缓冲。作者ASIO公司曾经认为,司机直接与司机一起工作ASIO要求双缓冲区,但驱动程序设计者可以选择由于技术限制而添加额外的内部缓冲

由驱动程序执行的主机查询

在准备就绪状态之后,驱动程序可以通过asioMessage()回调查询应用程序以获取以下信息:

  • KasioSelector支持查询应用程序是否支持asioMessage选择器
  • kAsioEngineVersion向主机应用程序查询其实现的ASIO版本。应用程序将返回实现的最高版本。主机应用程序应始终支持较低版本的实现。

驱动通知主机应用函数

对于一些特定的事件,需要驱动程序通知主机来进行处理。驱动通过asioMessage()回调实现。

  • KasioRestrequest:如果发生意外事件或重新配置驱动程序需要重置
  • kAsioBufferSizeChange,用户配置缓冲区大小将发生变化,由(但目前很少有应用程序支持此操作,因此建议改为布KasioRestrequest)
  • kAsioResyncRequest驱动程序检测到运行不足,需要重新同步
  • kAsioLatenciesChanged驱动程序检测到延迟更改

主机应用程序必须将这些通知的处理推迟到稍后的“安全”时间,因为驱动程序必须完成对通知的处理。尤其是在kAsioResetRequest中,在asioMessage回调期间卸载驱动程序是一个坏主意,因为回调必须返回到驱动程序中,而驱动程序将不再存在。

  • sampleRateDidChange()通知主机应用程序驱动程序检测到采样率变化。通常仅用于改变采样率的外部时钟源。
  • kAsioOverload通知主机应用程序驱动程序检测到过载情况,即音频流中发生了丢失。虽然一旦过载发生,它就无法恢复,但至少主机可以通过一些适当的通知提示用户

0 篇笔记 写笔记

作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!