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