QNAudioEffectMixer.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. //
  2. // QNAudioEffectMixer.h
  3. // QNRTCKit
  4. //
  5. // Created by 冯文秀 on 2022/4/8.
  6. // Copyright © 2022 Pili Engineering, Qiniu Inc. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "QNTypeDefines.h"
  10. #import "QNAudioFilterProtocol.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. @interface QNAudioEffect : NSObject
  13. /*!
  14. * @abstract 获取指定音效文件时长
  15. *
  16. * @warning 该接口为同步方法,对于在线音频文件,获取时长会存在一定的耗时,需注意调用接口所在的线程
  17. *
  18. * @param filePath 文件路径,支持本地路径以及在线文件,音频格式支持 aac、mp3、mp4、wav、m4r、caf、ogg、opus、m4a、flac
  19. *
  20. * @return int64_t 时长,单位 ms
  21. *
  22. * @since v5.1.0
  23. */
  24. + (int64_t)getDuration:(NSString *)filePath;
  25. /*!
  26. * @abstract 获取音效唯一标识符
  27. *
  28. * @return int
  29. *
  30. * @since v5.1.0
  31. */
  32. - (int)getID;
  33. /*!
  34. * @abstract 获取音效文件路径
  35. *
  36. * @return NSString 文件地址
  37. *
  38. * @since v5.1.0
  39. */
  40. - (NSString *)getFilePath;
  41. /*!
  42. * @abstract 设置音效参与混音的起始位置
  43. *
  44. * @param position 位置,单位 ms
  45. *
  46. * @since v5.1.0
  47. */
  48. - (void)setStartPosition:(int64_t)position;
  49. /*!
  50. * @abstract 获取音效参与混音的起始位置
  51. *
  52. * @return int64_t 单位 ms
  53. *
  54. * @since v5.1.0
  55. */
  56. - (int64_t)getStartPosition;
  57. /*!
  58. * @abstract 设置音效混音循环次数
  59. *
  60. * @param loopCount 循环次数,-1 为无限循环,0 为不混音,大于 0 为实际循环次数
  61. *
  62. * @since v5.1.0
  63. */
  64. - (void)setLoopCount:(int)loopCount;
  65. /*!
  66. * @abstract 获取音效混音循环次数
  67. *
  68. * @return int 循环次数,-1 为无限循环,0 为不混音,大于 0 为实际循环次数
  69. *
  70. * @since v5.1.0
  71. */
  72. - (int)getLoopCount;
  73. @end
  74. @class QNAudioEffectMixer;
  75. @protocol QNAudioEffectMixerDelegate <NSObject>
  76. /*!
  77. * @abstract 音效混音发生错误的回调
  78. *
  79. * @param audioEffectMixer 音效混音实例
  80. *
  81. * @param error 错误
  82. *
  83. * @since v5.1.0
  84. */
  85. - (void)audioEffectMixer:(QNAudioEffectMixer *)audioEffectMixer didFailWithError:(NSError *)error __deprecated_msg("Method deprecated in v5.2.4. Use `- (void)audioEffect:(QNAudioEffect *)audioEffect didFailed:(int)effectID error:(NSError *)error`");
  86. /*!
  87. * @abstract 某音效混音发生错误的回调
  88. *
  89. * @param audioEffect 音效实例
  90. *
  91. * @param effectID 音效唯一标识符
  92. *
  93. * @param error 错误
  94. *
  95. * @since v5.2.4
  96. */
  97. - (void)audioEffect:(QNAudioEffect *)audioEffect didFailed:(int)effectID error:(NSError *)error;
  98. /*!
  99. * @abstract 音效混音某音效播放完成的回调
  100. *
  101. * @param audioEffect 音效实例
  102. *
  103. * @param effectID 音效唯一标识符
  104. *
  105. * @since v5.2.4
  106. */
  107. - (void)audioEffect:(QNAudioEffect *)audioEffect didFinished:(int)effectID;
  108. @end
  109. @interface QNAudioEffectMixer : NSObject <QNAudioFilterProtocol>
  110. /*!
  111. * @abstract 创建音效类
  112. *
  113. * @warning 创建已存在的音效唯一标识符,需要先调用 destroyAudioEffectWithEffectID,否则将会返回 nil
  114. *
  115. * @param effectID 音效唯一标识符,务必保证唯一
  116. *
  117. * @param filePath 文件路径,支持本地路径以及在线文件,音频格式支持 aac、mp3、mp4、wav、m4r、caf、ogg、opus、m4a、flac
  118. *
  119. * @return QNAudioEffect 实例
  120. *
  121. * @since v5.1.0
  122. */
  123. - (QNAudioEffect *)createAudioEffectWithEffectID:(int)effectID filePath:(NSString *)filePath;
  124. /*!
  125. * @abstract 销毁音效类
  126. *
  127. * @param effectID 音效唯一标识符,务必保证唯一
  128. *
  129. * @since v5.2.0
  130. */
  131. - (void)destroyAudioEffectWithEffectID:(int)effectID;
  132. /*!
  133. * @abstract 设置某音效是否推送到远端
  134. *
  135. * @param publishEnabled 是否推送到远端
  136. *
  137. * @param effectID 音效唯一标识符
  138. *
  139. * @since v5.2.0
  140. */
  141. - (void)setPublishEnabled:(BOOL)publishEnabled effectID:(int)effectID;
  142. /*!
  143. * @abstract 获取某音效是否推送到远端
  144. *
  145. * @param effectID 音效唯一标识符
  146. *
  147. * @return BOOL 是否推送到远端
  148. *
  149. * @since v5.2.0
  150. */
  151. - (BOOL)isPublishEnabled:(int)effectID;
  152. /*!
  153. * @abstract 开始混音某音效
  154. *
  155. * @param effectID 音效唯一标识符
  156. *
  157. * @return BOOL 是否成功
  158. *
  159. * @since v5.1.0
  160. */
  161. - (BOOL)start:(int)effectID;
  162. /*!
  163. * @abstract 停止混音某音效
  164. *
  165. * @param effectID 音效唯一标识符
  166. *
  167. * @return BOOL 是否成功
  168. *
  169. * @since v5.1.0
  170. */
  171. - (BOOL)stop:(int)effectID;
  172. /*!
  173. * @abstract 暂停混音某音效
  174. *
  175. * @param effectID 音效唯一标识符
  176. *
  177. * @return BOOL 是否成功
  178. *
  179. * @since v5.1.0
  180. */
  181. - (BOOL)pause:(int)effectID;
  182. /*!
  183. * @abstract 恢复混音某音效
  184. *
  185. * @param effectID 音效唯一标识符
  186. *
  187. * @return BOOL 是否成功
  188. *
  189. * @since v5.1.0
  190. */
  191. - (BOOL)resume:(int)effectID;
  192. /*!
  193. * @abstract 获取某音效当前位置
  194. *
  195. * @param effectID 音效唯一标识符
  196. *
  197. * @return int64_t 单位 ms
  198. *
  199. * @since v5.1.0
  200. */
  201. - (int64_t)getCurrentPosition:(int)effectID;
  202. /*!
  203. * @abstract 设置某音效音量
  204. *
  205. * @warning setEffectID 已废弃,应调用 setVolume
  206. *
  207. * @param effectID 音效唯一标识符
  208. *
  209. * @param volume 音量
  210. *
  211. * @since v5.1.0
  212. */
  213. - (void)setEffectID:(int)effectID volume:(float)volume __deprecated_msg("Method deprecated in v5.2.0. Use `setVolume:`");
  214. /*!
  215. * @abstract 设置某音效音量
  216. *
  217. * @param volume 音量
  218. *
  219. * @param effectID 音效唯一标识符
  220. *
  221. * @since v5.2.0
  222. */
  223. - (void)setVolume:(float)volume effectID:(int)effectID;
  224. /*!
  225. * @abstract 获取某音效音量
  226. *
  227. * @param effectID 音效唯一标识符
  228. *
  229. * @return float 范围 0~1.0
  230. *
  231. * @since v5.1.0
  232. */
  233. - (float)getVolume:(int)effectID;
  234. /*!
  235. * @abstract 设置所有音效的音量
  236. *
  237. * @param volume 音量,范围 0~1.0
  238. *
  239. * @since v5.1.0
  240. */
  241. - (void)setAllEffectsVolume:(float)volume;
  242. /*!
  243. * @abstract 停止混音所有音效
  244. *
  245. * @return BOOL 是否成功
  246. *
  247. * @since v5.1.0
  248. */
  249. - (BOOL)stopAll;
  250. /*!
  251. * @abstract 暂停混音所有音效
  252. *
  253. * @return BOOL 是否成功
  254. *
  255. * @since v5.1.0
  256. */
  257. - (BOOL)pauseAll;
  258. /*!
  259. * @abstract 恢复混音所有音效
  260. *
  261. * @return BOOL 是否成功
  262. *
  263. * @since v5.1.0
  264. */
  265. - (BOOL)resumeAll;
  266. @end
  267. NS_ASSUME_NONNULL_END