123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- //
- // MidiPlayerEngine.h
- // MidiPlayer
- //
- // Created by Kyle on 2021/11/30.
- //
- #import <Foundation/Foundation.h>
- #import <AudioToolbox/AudioToolbox.h>
- #import "CAudioUnit.h"
- NS_ASSUME_NONNULL_BEGIN
- @protocol PlayerEngineDelegate <NSObject>
- /// 加载成功回调
- - (void)initPlayerEngineSuccess:(float)totalTime;
- /* 范围:[0,1],每10ms更新一次 */
- - (void)ProgressUpdated:(float)progress currentTime:(MusicTimeStamp)currentTime;
- /* 播放结束回调 */
- - (void)playEnd;
- /* 歌曲数据加载完,可返回歌曲总时长 */
- - (void)GetMusicTotalTime:(float)time;
- @end
- @interface MidiPlayerEngine : NSObject
- @property (nonatomic, strong) NSMutableArray *muteTrackArray; // 需要禁音的track
- @property (nonatomic, assign) float accompanyVolume; // 伴奏音量配置 默认0.2
- @property (nonatomic, assign) Float64 baseRate; // 基准rate
- // 主要乐器id
- @property (nonatomic, assign) NSInteger instrumentId; // 主乐器id
- @property (nonatomic, assign) UInt32 baseInstrumentTrack; // 主乐器轨道
- @property (nonatomic, strong) NSMutableArray *baseInstrumentArray; // 主乐器轨道
- // 定义汇报进度频率 默认10ms
- @property (nonatomic, assign) NSInteger reportTime;
- @property (nonatomic, strong) NSMutableArray *instrumentTrackNameArray; // 每个track 对应的名称
- /* 选段播放控制 */
- // 选段的开始时间
- @property (nonatomic, assign) MusicTimeStamp startTime;
- // 选段的结束时间
- @property (nonatomic, assign) MusicTimeStamp endTime;
- @property (nonatomic,weak)id<PlayerEngineDelegate> delegate;
- - (void)configSoundFilePath:(NSString *)filePath;
- /* 加载MIDI文件 */
- - (BOOL)loadMIDIFileWithString:(NSString *)filePath;
- /* 根据轨道名称获取单个轨道的编号*/
- - (NSInteger)getSingleTrackNumByName:(NSString *)trackName;
- /* 通过轨道名称获取对应的轨道*/
- - (NSMutableArray *)getTrackNumerFromName:(NSArray *)trackNameArray;
- /**根据乐器编号获取所在轨道*/
- - (NSMutableArray *)getTrackWithInstrumentId:(UInt32)instrumentId;
- /**设置对应乐器编号所在轨道的播放音量*/
- - (BOOL)volumeTrackVolumeWithInstrumentId:(UInt32)instrumentId volume:(float)volume;
- - (void)getAllTrackVolume;
- /* 播放 */
- - (void)playMIDIFile;
- /* 暂停 */
- - (void)stopPlayingMIDIFile;
- /* 清空加载的音乐数据 */
- - (void)cleanup;
- /* 获取当前音乐的播放时间,单位:秒 */
- - (double)musicTotalTime;
- /* 获取当前音乐的播放时间,单位:秒 */
- - (double)musicCurrentTime;
- /* 播放器当前状态 */
- - (BOOL)isPlayingFile;
- /* 设置播放速度,快播:(1,+∞),慢放:(0,1) */
- - (BOOL)setMusicPlayerSpeed:(double)speed;
- /* 设置播放进度 progress的设置范围[0,1] 精度会有影响*/
- - (void)setProgress:(double)progress;
- /* 设置播放的进度开始时间 */
- - (void)setProgressTime:(MusicTimeStamp)startTime;
- /* 屏蔽具体一种乐器的声音。注意:屏蔽操作需要在加载MIDI文件之前调用!!! */ //
- - (void)muteWithInstrument:(UInt8)instrument;
- /* 屏蔽鼓组。注意:屏蔽操作需要在加载MIDI文件之前调用!!! */
- - (void)muteWithDrum;
- /* 調節某一軌的音量 範圍:[0,1] */
- - (void)volume:(float)volume WithTrack:(UInt32)trackNum;
- /* 调整除了 trackNum 之外的 其他轨道的音量 范围[0,1]*/
- - (void)volumeOtherTrackExcept:(UInt32)trackNum withVolume:(float)volume;
- /* 屏蔽某些轨道的的声音 可在进行中操作 (用于原声和伴奏的切换)*/
- - (void)muteTrack:(BOOL)isMute WithTrack:(NSMutableArray *)trackArray;
- - (void)muteTrackWithTrackNameExclude:(NSMutableArray *)trackNameArray;
- // 恢复AUGraph
- - (void)resumeAUGraph;
- #pragma mark ------ 变调 调整hz
- // 转成442HZ播放
- - (void)transformTo442Hz;
- // hz调整 440 - 442。。。。。。。
- - (void)adjustPitchByHZ:(float)newHZ;
- #pragma mark ---- 自动循环功能和播放时同步节拍器暂未实现
- // 是否重复播放
- @property (nonatomic, assign) BOOL isLooping;
- // 是否伴随节拍器
- @property (nonatomic, getter=isClickTrackEnabled) BOOL clickTrackEnabled;
- // 设置自动循环播放
- - (void)startPlaybackLoop;
- /// Starts playback of the music sequence from the specified position.
- /// @param position The MusicTimeStamp to begin playback from.
- - (void)startPlaybackFromPosition:(MusicTimeStamp)position;
- /**
- * Resumes playback of the music sequence from the MusicTimeStamp that the player last stopped at.
- */
- - (void)resumePlayback;
- /**
- * Stops playback of the music seuqenece.
- */
- - (void)stopPlayback;
- @end
- NS_ASSUME_NONNULL_END
|