iOS节拍器开发

Demo&效果图

我将节拍器View部分分成了四部分,负责处理各自操作。

###View HLRhythmSpotView负责展示节拍数,会根据节拍显示闪烁动画 HLChoiceRhythmView负责切换节拍数 HLChangeSpeedView负责切换频率 HLPlaySwitchView负责播放、暂停、切换频率

###节拍管理类 HLMetronomeAudioManager负责管理节拍的播放、暂停、频率

typedef NS_ENUM(NSInteger, HLMetronomeType) {
    
    HLMetronomeType1V4 =0,     // 1/4
    HLMetronomeType2V4,        // 2/4
    HLMetronomeType3V4,        // 3/4
    HLMetronomeType4V4,        // 4/4
    HLMetronomeType3V8,        // 3/8
    HLMetronomeType6V8         // 6/8
};

// 代理
@protocol HLMetronomeAudioManagerDelegate <NSObject>

/** 当前播放音频的总次数(用来处理上部圆View那个显示高亮状态) */
- (void)hlMetronomeAudioCurrentTotalNo:(int)currentTotalNo;

@end

@interface HLMetronomeAudioManager : NSObject

+ (instancetype)sharedAudioManager;

/** 代理 */
@property (nonatomic, weak) id <HLMetronomeAudioManagerDelegate> delegate;

/** 节拍类型 */
@property (nonatomic, assign) HLMetronomeType metronomeStat;

/** 播放速率,范围40~240 */
@property (nonatomic, assign) int rate;

/** 播放 */
- (void)play;

/** 暂停 */
- (void)pause;

@end
复制代码

每个View通过代理将用户操作事件传回HLMetronomeViewController,由HLMetronomeViewController调用HLMetronomeAudioManager的方法操作节拍音频。

#pragma mark -- 初始化节拍器播放器
- (void)initMetronomeAudio{
    
    [HLMetronomeAudioManager sharedAudioManager].delegate = self;
    [[HLMetronomeAudioManager sharedAudioManager] setMetronomeStat:HLMetronomeType1V4];
    [[HLMetronomeAudioManager sharedAudioManager] setRate:40];
    [self.rhythmSpotView updateSpotView:HLMetronomeType1V4];
}

#pragma mark -- HLChoiceRhythmViewDelegate
- (void)hlChangeRhythm:(HLMetronomeType)metronomeStat{
    
    [self.rhythmSpotView updateSpotView:metronomeStat];
    [[HLMetronomeAudioManager sharedAudioManager] setMetronomeStat:metronomeStat];
}

#pragma mark -- HLChangeSpeedViewDelegate
- (void)hlChangeSpeed:(int)speed{
    
    [[HLMetronomeAudioManager sharedAudioManager] setRate:speed];
}

#pragma mark -- HLPlaySwitchViewDelegate
- (void)hlPlay{
    
    [[HLMetronomeAudioManager sharedAudioManager] play];
}

- (void)hlPause{
    
    [[HLMetronomeAudioManager sharedAudioManager] pause];
}

- (void)hlChangeSpeedWithIsAdd:(BOOL)isAdd speed:(int)speed{
    
    [self.changeSpeedView changeSpeedWithIsAdd:isAdd speed:speed];
}

#pragma mark -- HLMetronomeAudioManagerDelegate
- (void)hlMetronomeAudioCurrentTotalNo:(int)currentTotalNo{
    
    [self.rhythmSpotView updateSpotViewHeightState:currentTotalNo];
}
复制代码

具体代码可以下载Demo查看

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值