1# audio<a name="ZH-CN_TOPIC_0000001078525242"></a> 2 3- [简介](#section11660541593) 4- [目录](#section161941989596) 5 - [接口说明](#section1551164914237) 6 - [使用说明](#section129654513264) 7 8- [相关仓](#section1371113476307) 9 10## 简介<a name="section11660541593"></a> 11 12Audio仓下主要包含HDI接口,HDI接口主要用于: 13 14- 管理声卡驱动的加载、卸载 15- 创建音频播放、录音对象 16- 选择音频场景 17- 设置音频属性 18- 设置音频音量及增益 19- 控制音频播放及录音的启、停等 20 21**图 1** Audio仓相关模块逻辑视图<a name="fig3672817152110"></a> 22 23 24## 目录<a name="section161941989596"></a> 25 26Audio仓下源代码目录结构如下所示 27 28``` 29drivers/peripheral/audio/ 30└── interfaces #Audio驱动对外接口存放目录 31 └── include #Audio驱动对北向提供的HDI接口存放目录 32``` 33 34### 接口说明<a name="section1551164914237"></a> 35 36Audio驱动提供给Audio Service可直接调用的能力接口,主要功能有:加载/卸载音频声卡驱动、创建音频播放/录音对象、启停音频播放/录音、调节音频音量等。 37 38提供的部分接口说明如[表1 Audio HDI接口](#table1513255710559)所示: 39 40**表 1** Audio HDI接口 41 42<a name="table1513255710559"></a> 43<table><thead align="left"><tr id="row171321857155517"><th class="cellrowborder" valign="top" width="10.721072107210723%" id="mcps1.2.4.1.1"><p id="p6132957115511"><a name="p6132957115511"></a><a name="p6132957115511"></a>头文件</p> 44</th> 45<th class="cellrowborder" valign="top" width="66.36663666366637%" id="mcps1.2.4.1.2"><p id="p14132125715552"><a name="p14132125715552"></a><a name="p14132125715552"></a>接口名称</p> 46</th> 47<th class="cellrowborder" valign="top" width="22.912291229122914%" id="mcps1.2.4.1.3"><p id="p18132205755516"><a name="p18132205755516"></a><a name="p18132205755516"></a>功能描述</p> 48</th> 49</tr> 50</thead> 51<tbody><tr id="row13132357165514"><td class="cellrowborder" rowspan="3" valign="top" width="10.721072107210723%" headers="mcps1.2.4.1.1 "><p id="p15132185775510"><a name="p15132185775510"></a><a name="p15132185775510"></a>audio_manager.h</p> 52<p id="p18132157175510"><a name="p18132157175510"></a><a name="p18132157175510"></a></p> 53<p id="p2133757135510"><a name="p2133757135510"></a><a name="p2133757135510"></a></p> 54</td> 55<td class="cellrowborder" valign="top" width="66.36663666366637%" headers="mcps1.2.4.1.2 "><p id="p11132857135517"><a name="p11132857135517"></a><a name="p11132857135517"></a>int32_t (*GetAllAdapters)(struct AudioManager *manager, struct AudioAdapterDescriptor **descs, int32_t *size);</p> 56</td> 57<td class="cellrowborder" valign="top" width="22.912291229122914%" headers="mcps1.2.4.1.3 "><p id="p213285715558"><a name="p213285715558"></a><a name="p213285715558"></a>获取音频驱动中支持的所有适配器的列表</p> 58</td> 59</tr> 60<tr id="row9132135715515"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p16133957155517"><a name="p16133957155517"></a><a name="p16133957155517"></a>int32_t (*LoadAdapter)(struct AudioManager *manager, const struct AudioAdapterDescriptor *desc, struct AudioAdapter **adapter);</p> 61</td> 62<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p113315745519"><a name="p113315745519"></a><a name="p113315745519"></a>加载一个音频适配器(声卡)的驱动</p> 63</td> 64</tr> 65<tr id="row171330575555"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p913315573557"><a name="p913315573557"></a><a name="p913315573557"></a>void (*UnloadAdapter)(struct AudioManager *manager, struct AudioAdapter *adapter);</p> 66</td> 67<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1413365765514"><a name="p1413365765514"></a><a name="p1413365765514"></a>卸载一个音频适配器(声卡)的驱动</p> 68</td> 69</tr> 70<tr id="row1513316577554"><td class="cellrowborder" rowspan="6" valign="top" width="10.721072107210723%" headers="mcps1.2.4.1.1 "><p id="p15133657185517"><a name="p15133657185517"></a><a name="p15133657185517"></a>audio_adapter.h</p> 71<p id="p1513315717555"><a name="p1513315717555"></a><a name="p1513315717555"></a></p> 72<p id="p81331057125513"><a name="p81331057125513"></a><a name="p81331057125513"></a></p> 73<p id="p18703206155812"><a name="p18703206155812"></a><a name="p18703206155812"></a></p> 74<p id="p17186692581"><a name="p17186692581"></a><a name="p17186692581"></a></p> 75<p id="p28322099581"><a name="p28322099581"></a><a name="p28322099581"></a></p> 76</td> 77<td class="cellrowborder" valign="top" width="66.36663666366637%" headers="mcps1.2.4.1.2 "><p id="p1213365714550"><a name="p1213365714550"></a><a name="p1213365714550"></a>int32_t (*InitAllPorts)(struct AudioAdapter *adapter);</p> 78</td> 79<td class="cellrowborder" valign="top" width="22.912291229122914%" headers="mcps1.2.4.1.3 "><p id="p201331557185512"><a name="p201331557185512"></a><a name="p201331557185512"></a>初始化一个音频适配器所有的端口驱动</p> 80</td> 81</tr> 82<tr id="row171331657185514"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p913305715553"><a name="p913305715553"></a><a name="p913305715553"></a>int32_t (*CreateRender)(struct AudioAdapter *adapter, const struct AudioDeviceDescriptor *desc, const struct AudioSampleAttributes *attrs, struct AudioRender **render);</p> 83</td> 84<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p161332570553"><a name="p161332570553"></a><a name="p161332570553"></a>创建一个音频播放(render)接口的对象</p> 85</td> 86</tr> 87<tr id="row41331557165518"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p6133145713559"><a name="p6133145713559"></a><a name="p6133145713559"></a>int32_t (*DestroyRender)(struct AudioAdapter *adapter, struct AudioRender *render);</p> 88</td> 89<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p131331557175510"><a name="p131331557175510"></a><a name="p131331557175510"></a>销毁一个音频放音(render)接口的对象</p> 90</td> 91</tr> 92<tr id="row77021769584"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p77031566584"><a name="p77031566584"></a><a name="p77031566584"></a>int32_t (*GetPortCapability)(struct AudioAdapter *adapter, const struct AudioPort *port, struct AudioPortCapability *capability);</p> 93</td> 94<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1470315695811"><a name="p1470315695811"></a><a name="p1470315695811"></a>获取一个音频适配器的端口驱动的能力集</p> 95</td> 96</tr> 97<tr id="row71857914585"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1318619155811"><a name="p1318619155811"></a><a name="p1318619155811"></a>int32_t (*SetPassthroughMode)(struct AudioAdapter *adapter, const struct AudioPort *port, enum AudioPortPassthroughMode mode);</p> 98</td> 99<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1186597589"><a name="p1186597589"></a><a name="p1186597589"></a>设置音频端口驱动的数据透传模式</p> 100</td> 101</tr> 102<tr id="row18831119115815"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p48323975814"><a name="p48323975814"></a><a name="p48323975814"></a>int32_t (*GetPassthroughMode)(struct AudioAdapter *adapter, const struct AudioPort *port, enum AudioPortPassthroughMode *mode);</p> 103</td> 104<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p15832129135813"><a name="p15832129135813"></a><a name="p15832129135813"></a>获取音频端口驱动的数据透传模式</p> 105</td> 106</tr> 107<tr id="row1452521025813"><td class="cellrowborder" rowspan="8" valign="top" width="10.721072107210723%" headers="mcps1.2.4.1.1 "><p id="p12525910165811"><a name="p12525910165811"></a><a name="p12525910165811"></a>audio_render.h</p> 108<p id="p1929018168192"><a name="p1929018168192"></a><a name="p1929018168192"></a></p> 109<p id="p99515179192"><a name="p99515179192"></a><a name="p99515179192"></a></p> 110<p id="p11331918201913"><a name="p11331918201913"></a><a name="p11331918201913"></a></p> 111<p id="p209341981918"><a name="p209341981918"></a><a name="p209341981918"></a></p> 112<p id="p1996019191197"><a name="p1996019191197"></a><a name="p1996019191197"></a></p> 113<p id="p2812720131919"><a name="p2812720131919"></a><a name="p2812720131919"></a></p> 114<p id="p942322013262"><a name="p942322013262"></a><a name="p942322013262"></a></p> 115</td> 116<td class="cellrowborder" valign="top" width="66.36663666366637%" headers="mcps1.2.4.1.2 "><p id="p105259109581"><a name="p105259109581"></a><a name="p105259109581"></a>int32_t (*RenderFrame)(struct AudioRender *render, const void *frame, uint64_t requestBytes, uint64_t *replyBytes);</p> 117</td> 118<td class="cellrowborder" valign="top" width="22.912291229122914%" headers="mcps1.2.4.1.3 "><p id="p752531095814"><a name="p752531095814"></a><a name="p752531095814"></a>往音频驱动中播放(render)一帧输出数据(放音,音频下行数据)</p> 119</td> 120</tr> 121<tr id="row172902161193"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p16290141681918"><a name="p16290141681918"></a><a name="p16290141681918"></a>int32_t (*GetRenderPosition)(struct AudioRender *render, uint64_t *frames, struct AudioTimeStamp *time);</p> 122</td> 123<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p1929141611198"><a name="p1929141611198"></a><a name="p1929141611198"></a>获取音频输出帧数的上一次计数</p> 124</td> 125</tr> 126<tr id="row1948179195"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p1395181710193"><a name="p1395181710193"></a><a name="p1395181710193"></a>int32_t (*SetRenderSpeed)(struct AudioRender *render, float speed);</p> 127</td> 128<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p169531741912"><a name="p169531741912"></a><a name="p169531741912"></a>设置音频的播放速度</p> 129</td> 130</tr> 131<tr id="row1331121813197"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p533121871912"><a name="p533121871912"></a><a name="p533121871912"></a>int32_t (*GetRenderSpeed)(struct AudioRender *render, float *speed);</p> 132</td> 133<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p4331131817195"><a name="p4331131817195"></a><a name="p4331131817195"></a>获取音频当前的播放速度</p> 134</td> 135</tr> 136<tr id="row1393181951920"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p79410191191"><a name="p79410191191"></a><a name="p79410191191"></a>int32_t (*SetChannelMode)(struct AudioRender *render, enum AudioChannelMode mode);</p> 137</td> 138<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p17948193197"><a name="p17948193197"></a><a name="p17948193197"></a>设置音频播放的通道模式</p> 139</td> 140</tr> 141<tr id="row12422102092613"><td class="cellrowborder" valign="top" headers="mcps1.2.4.1.1 "><p id="p194231720102610"><a name="p194231720102610"></a><a name="p194231720102610"></a>int32_t (*GetChannelMode)(struct AudioRender *render, enum AudioChannelMode *mode);</p> 142</td> 143<td class="cellrowborder" valign="top" headers="mcps1.2.4.1.2 "><p id="p342315202267"><a name="p342315202267"></a><a name="p342315202267"></a>获取音频播放当前的通道模式</p> 144</td> 145</tr> 146</tbody> 147</table> 148 149### 使用说明<a name="section129654513264"></a> 150 151该仓核心功能包括两个方面: 152 1531. 提供Audio HDI接口供北向音频服务调用,实现音频服务的基本功能。 1542. 作为标准南向接口,保证南向OEM产商实现HDI-adapter的规范性,保证生态良性演进。 155 156具体接口调用及实现,以接口注释为准。 157 158## 相关仓<a name="section1371113476307"></a> 159 160[驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 161 162[drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) 163 164[drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) 165 166[drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) 167 168[drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral) 169 170