iOS节拍器开发

Demo&效果图

191541572782_.pic_hd.jpg

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


201541576346_.pic_hd.jpg

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、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,012评论 3 119
  • 天如洗般湛蓝,这片粉色的牵牛如刚出浴的美人般柔媚,清新。花瓣美美的偎在一起,好一份柔情,我意荡神摇,思绪不由飘到那...
    萤窗细语阅读 301评论 0 0
  • 标题暂时想不出来,目前到了这尴尬的年纪,接到家人、亲朋好友们过度的关切,实在是无奈,头痛,每当电话铃响起时,那种心...
    游游H阅读 274评论 0 2
  • 有的人年过三十发现,自己忙忙碌碌了这么多年,没有什么收获,感觉在社会上打拼了这么久,还不能够给家人和孩子一个满意的...
    老milk麻麻阅读 194评论 0 0
  • 包子作为一种早餐有其存在的必然理由,一家实体包子店的利润与客流量往往是有一定限额的,往往是有限范围内的无奈选择,这...
    我的鱼在哪阅读 299评论 0 0