KSYAQPlayer.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. //
  2. // KSYAQPlayer.h
  3. // KSYStreamer
  4. //
  5. //
  6. // Created by pengbin on 10/15/17.
  7. // Copyright © 2015 ksyun. All rights reserved.
  8. //
  9. #import <AVFoundation/AVFoundation.h>
  10. #import "KSYTypeDef.h"
  11. /** 基于AudioQueue的音乐播放器
  12. * 提供声音播放的功能
  13. * 通过回调拉取新的数据
  14. * 提供音量和音调调节功能
  15. * 能将播放后的音频数据通过回调送出 (回调的数据为音效处理之后的数据)
  16. */
  17. @interface KSYAQPlayer : NSObject
  18. #pragma mark - player control
  19. /**
  20. @abstract 开始播放
  21. @param fmt, 后续送入的音频数据的格式
  22. @return 是否能够开始播放
  23. */
  24. - (BOOL) play:(AudioStreamBasicDescription*)fmt;
  25. /** 停止播放背景音乐 */
  26. - (void) stop;
  27. /** 暂停播放背景音乐 */
  28. - (void) pause;
  29. /** 恢复播放背景音乐 */
  30. - (void) resume;
  31. /**
  32. @abstract 播放音量
  33. @discussion 调整范围 0.0~1.0, 默认为1
  34. */
  35. @property (nonatomic, assign) double volume;
  36. /**
  37. @abstract 播放声音的音调
  38. @discussion 调整范围 [-24.0 ~ 24.0], 默认为0.01, 单位为半音
  39. @discussion 0.01 为1度, 1.0为一个半音, 12个半音为1个八度
  40. */
  41. @property (nonatomic, assign) double pitch;
  42. /**
  43. @abstract 播放速度
  44. @discussion 调整范围 0.5~2.0, 默认为1
  45. */
  46. @property (nonatomic, assign) double playRate;
  47. /**
  48. @abstract 输入的音频格式
  49. @discussion 每次输入音频格式可能变化时,请重新调用play: 方法
  50. */
  51. @property (nonatomic, readonly) AudioStreamBasicDescription inFmt;
  52. /**
  53. @abstract 回调输出的音频格式
  54. */
  55. @property (nonatomic, readonly) AudioStreamBasicDescription outFmt;
  56. /**
  57. @abstract 背景音乐播放静音
  58. @discussion 仅仅静音播放, 不影响回调的音频数据
  59. */
  60. @property (nonatomic, assign) BOOL mute;
  61. #pragma mark - callbacks
  62. /**
  63. @abstract 音频数据输入回调
  64. @discussion buf 送入的音频数据
  65. */
  66. @property(nonatomic, copy) BOOL (^pullDataCB)(AudioQueueBufferRef buf);
  67. /**
  68. @abstract 音频数据输出回调
  69. @discussion pData 回调输出的数据指针
  70. @discussion len sample数
  71. @discussion fmt 数据的格式
  72. @discussion pts 目前没有时间戳输出
  73. */
  74. @property(nonatomic, copy) BOOL (^putDataCB)(uint8_t** pData, int len, const AudioStreamBasicDescription* fmt, CMTime pts);
  75. #pragma mark - player state
  76. /**
  77. @abstract 音频播放是否运行
  78. @discussion 音频是否输出到speaker播放
  79. */
  80. @property (nonatomic, readonly) BOOL isRunning;
  81. /**
  82. @abstract 音频播放是否暂停
  83. @discussion 通过 pause/resume 改变状态
  84. */
  85. @property (nonatomic, readonly) BOOL isPaused;
  86. /**
  87. @abstract  播放错误码
  88. @discussion 播放错误码具体内容可以参考AudioQueue的Apple文档。
  89. */
  90. @property (nonatomic, readonly) OSStatus audioErrorCode;
  91. @end