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通知主机应用程序驱动程序检测到过载情况,即音频流中发生了丢失。虽然一旦过载发生,它就无法恢复,但至少主机可以通过一些适当的通知提示用户