1 /* 2 * Copyright (C) 2015-2017 Alibaba Group Holding Limited 3 */ 4 5 #ifndef SOUND_CONTROL_H 6 #define SOUND_CONTROL_H 7 8 #include <stdio.h> 9 #include <stdlib.h> 10 #include <fcntl.h> 11 #include <stdarg.h> 12 #include <string.h> 13 #include <errno.h> 14 #include <unistd.h> 15 #include <aos/list.h> 16 #include <aos/kernel.h> 17 #ifndef HAAS_AUDIO_DEMO 18 #include <sys/ioctl.h> 19 #endif 20 #include "audio_drv.h" 21 22 #ifdef __cplusplus 23 extern "C" { 24 #endif 25 26 /** @defgroup a2sa_api a2sa 27 * @ingroup aos_components 28 * @{ 29 */ 30 31 /** 32 * @} 33 */ 34 35 /** @defgroup a2sa_mixer_api mixer 36 * @ingroup a2sa_api 37 * @{ 38 */ 39 40 /* 音频mixer设备节点描述信息 */ 41 typedef struct { 42 int fd; /**< 声卡mixer设备节点fd值,通过open()函数获取 */ 43 int card; /**< 声卡ID */ 44 char *name; /**< 声卡mixer设备节点名字,例如"/dev/controlC0" */ 45 struct audio_ctl_card_info card_info; /**< 声卡基础信息,例如声卡驱动名字 */ 46 struct audio_ctl_elem_info *elem_info; /**< 声卡配置信息元素地址 */ 47 unsigned int count; /**< 声卡配置信息元素个数 */ 48 } aos_mixer_t; 49 50 /** 51 * 打开ID为card的声卡的mixer设备节点 52 * 53 * @param[out] mixer 保存mixer设备节点信息的二级指针 54 * @param[in] card 期望打开的声卡ID 55 * 56 * @return 0 on success, negative error on failure. 57 */ 58 int aos_mixer_open(aos_mixer_t **mixer, int card); 59 60 /** 61 * 打印当前声卡mixer设备节点的所有属性信息 62 * 63 * @param[in] mixer 保存mixer设备节点信息的指针 64 * 65 * @return 0 on success, negative error on failure. 66 */ 67 int aos_mixer_print_info(aos_mixer_t *mixer); 68 69 /** 70 * 设置mixer设备节点中名为name的属性值为int value 71 * 72 * @param[in] mixer 保存mixer设备节点信息的指针 73 * @param[in] name 期望设置的目标属性名字 74 * @param[in] value 期望设置到名字为name的目标属性的int值 75 * 76 * @return 0 on success, negative error on failure. 77 */ 78 int aos_mixer_set_int_value(aos_mixer_t *mixer, char *name, int value); 79 80 /** 81 * 获取mixer设备节点中名为name的属性值,并保存在value指针中 82 * 83 * @param[in] mixer 保存mixer设备节点信息的指针 84 * @param[in] name 期望获取的目标属性名字 85 * @param[out] *value 获取到的目标属性值保存在int *value中 86 * 87 * @return 0 on success, negative error on failure. 88 */ 89 int aos_mixer_get_int_value(aos_mixer_t *mixer, char *name, int *value); 90 91 /** 92 * 关闭mixer设备节点 93 * 94 * @param[in] mixer 期望关闭的mixer设备节点信息的指针 95 * 96 * @return 0 on success, negative error on failure. 97 */ 98 int aos_mixer_close(aos_mixer_t *mixer); 99 100 /** 101 * 设置所有声卡中名为“Master Volume TX”的属性的值为volume 102 * 103 * @param[in] volume 期望往声卡中配置的音量值 104 * 105 * @return 0 on success, negative error on failure. 106 */ 107 int aos_set_master_volume(int volume); 108 109 /** 110 * 获取声卡中名为“Master Volume TX”的属性的值,并保存在volume指针中 111 * 112 * @param[out] *volume 获取到声卡音量值后保存到volume指针中 113 * 114 * @return 0 on success, negative error on failure. 115 */ 116 int aos_get_master_volume(int *volume); 117 118 /** 119 * 设置所有声卡为mute状态,对应的属性名为“Master Mute State” 120 * 121 * @param[in] mute 1为mute状态,0为unmute状态 122 * 123 * @return 0 on success, negative error on failure. 124 */ 125 int aos_set_mute_state(int mute); 126 127 /** 128 * 获取声卡的mute状态,并保存在*mute指针中 129 * 130 * @param[out] *mute 返回1为mute状态,0为unmute状态 131 * 132 * @return 0 on success, negative error on failure. 133 */ 134 int aos_get_mute_state(int *mute); 135 136 /** 137 * @} 138 */ 139 140 #ifdef __cplusplus 141 } 142 #endif 143 #endif /* SOUND_CONTROL_H */