| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- //
- // VideoRecordMusicView.m
- // TXLiteAVDemo
- //
- // Created by zhangxiang on 2017/9/13.
- // Copyright © 2017年 Tencent. All rights reserved.
- //
- #import "TCVideoRecordMusicView.h"
- #import "ColorMacro.h"
- #import "UIView+Additions.h"
- //#import "TCBGMSliderCutView.h"
- #define L(x) NSLocalizedString((x),nil)
- @interface TCVideoRecordMusicView(){
-
- }
- @end
- @implementation TCVideoRecordMusicView
- {
- UISlider *_sldVolumeForBGM;
- UISlider *_sldVolumeForVoice;
- // TCBGMSliderCutView* _musicCutSlider;
- UILabel* _startTimeLabel;
- // TCBGMSliderCutViewConfig* sliderConfig;
-
- NSMutableArray* _audioEffectArry;
- NSMutableArray* _audioEffectArry2;
- UIScrollView* _audioScrollView;
- UIScrollView* _audioScrollView2;
- }
- -(instancetype)initWithFrame:(CGRect)frame needEffect:(BOOL)needEffect;
- {
- self = [super initWithFrame:frame];
- if (self) {
- _audioEffectArry = [NSMutableArray arrayWithObjects:L(@"TCVideoRecordMusicView.Origin"),
- L(@"TCVideoRecordMusicView.KTV"),
- L(@"TCVideoRecordMusicView.Room"),
- L(@"TCVideoRecordMusicView.Hall"),
- L(@"TCVideoRecordMusicView.Low"),
- L(@"TCVideoRecordMusicView.Bright"),
- L(@"TCVideoRecordMusicView.Metal"),
- L(@"TCVideoRecordMusicView.Magnetic"),
- nil];
- _audioEffectArry2 = [NSMutableArray arrayWithObjects:L(@"TCVideoRecordMusicView.Origin"),
- L(@"TCVideoRecordMusicView.Child"),
- L(@"TCVideoRecordMusicView.Loli"),
- L(@"TCVideoRecordMusicView.Uncle"),
- L(@"TCVideoRecordMusicView.HeavyMetal"),
- L(@"TCVideoRecordMusicView.Foreigner"),
- L(@"TCVideoRecordMusicView.Beast"),
- L(@"TCVideoRecordMusicView.Fatty"),
- L(@"TCVideoRecordMusicView.StrongCurrent"),
- L(@"TCVideoRecordMusicView.HeavyMachinery"),
- L(@"TCVideoRecordMusicView.Ethereal"),
- nil];
- [self initUI:needEffect];
- }
- return self;
- }
- -(void)initUI:(BOOL)needEffect{
- self.backgroundColor = [UIColor clearColor];
- /***
- //混响,功能展示用,暂时先放这里
- if (needEffect) {
- CGFloat btnSpace = 10;
- CGFloat btnWidth = 40 * kScaleY;
- _audioScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 5, self.width, btnWidth)];
- _audioScrollView.contentSize = CGSizeMake((btnWidth + btnSpace) * _audioEffectArry.count, btnWidth);
- _audioScrollView.showsVerticalScrollIndicator = NO;
- _audioScrollView.showsHorizontalScrollIndicator = NO;
- for (int i=0; i<_audioEffectArry.count; ++i) {
- UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(btnSpace +(btnWidth + btnSpace) * i, 0, btnWidth, btnWidth)];
- btn.titleLabel.font = [UIFont systemFontOfSize:12.f];
- [btn setTitle:[_audioEffectArry objectAtIndex:i] forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
- [btn setBackgroundColor:[UIColor clearColor]];
- [btn.layer setMasksToBounds:YES];
- [btn.layer setCornerRadius:btnWidth/2];
- [btn addTarget:self action:@selector(selectEffect:) forControlEvents:UIControlEventTouchUpInside];
- btn.tag = i;
- [_audioScrollView addSubview:btn];
-
- if (i == 0) {
- btn.selected = YES;
- [btn setBackgroundColor:[UIColor redColor]];
- }
- }
-
- //变声类型
- _audioScrollView2 = [[UIScrollView alloc] initWithFrame:CGRectMake(0, _audioScrollView.bottom + 5, self.width, btnWidth)];
- _audioScrollView2.contentSize = CGSizeMake((btnWidth + btnSpace) * _audioEffectArry2.count, btnWidth);
- _audioScrollView2.showsVerticalScrollIndicator = NO;
- _audioScrollView2.showsHorizontalScrollIndicator = NO;
- for (int i=0; i<_audioEffectArry2.count; ++i) {
- UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(btnSpace +(btnWidth + btnSpace) * i, 0, btnWidth, btnWidth)];
- btn.titleLabel.font = [UIFont systemFontOfSize:12.f];
- [btn setTitle:[_audioEffectArry2 objectAtIndex:i] forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [btn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
- [btn setBackgroundColor:[UIColor clearColor]];
- [btn.layer setMasksToBounds:YES];
- [btn.layer setCornerRadius:btnWidth/2];
- [btn addTarget:self action:@selector(selectEffect2:) forControlEvents:UIControlEventTouchUpInside];
- btn.tag = i;
- [_audioScrollView2 addSubview:btn];
-
- if (i == 0) {
- btn.selected = YES;
- [btn setBackgroundColor:[UIColor redColor]];
- }
- }
- [self addSubview:_audioScrollView];
- [self addSubview:_audioScrollView2];
- }
- */
-
- //BGM
- UIButton *btnSelectBGM = [[UIButton alloc] initWithFrame:CGRectMake(15, 5, 30, 30)];
- [btnSelectBGM setImage:[UIImage imageNamed:@"music_change_normal"] forState:UIControlStateNormal];
- [btnSelectBGM setImage:[UIImage imageNamed:@"music_change_press"] forState:UIControlStateHighlighted];
- [btnSelectBGM addTarget:self action:@selector(onBtnMusicSelected) forControlEvents:UIControlEventTouchUpInside];
- btnSelectBGM.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
-
- UIButton *btnStopBGM = [[UIButton alloc] initWithFrame:CGRectMake(btnSelectBGM.width + 30, 5, 30, 30)];
- [btnStopBGM setImage:[UIImage imageNamed:@"music_delete_normal"] forState:UIControlStateNormal];
- [btnStopBGM setImage:[UIImage imageNamed:@"music_delete_press"] forState:UIControlStateHighlighted];
- [btnStopBGM addTarget:self action:@selector(onBtnMusicStoped) forControlEvents:UIControlEventTouchUpInside];
- btnStopBGM.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
- UILabel *labVolumeForVoice = [[UILabel alloc] initWithFrame:CGRectMake(15, btnSelectBGM.bottom + 10, 80, 16)];
- [labVolumeForVoice setText:L(@"TCVideoRecordMusicView.VolumeRecord")];
- [labVolumeForVoice setFont:[UIFont systemFontOfSize:14.f]];
- labVolumeForVoice.textColor = UIColorFromRGB(0xFFFFFF);
- [labVolumeForVoice sizeToFit];
- _sldVolumeForVoice = [[UISlider alloc] initWithFrame:CGRectMake(labVolumeForVoice.left, labVolumeForVoice.bottom + 10,self.width - 30, 20)];
- _sldVolumeForVoice.minimumValue = 0;
- _sldVolumeForVoice.maximumValue = 2;
- _sldVolumeForVoice.value = 1;
- _sldVolumeForVoice.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- [_sldVolumeForVoice setThumbImage:[UIImage imageNamed:@"slider"] forState:UIControlStateNormal];
- [_sldVolumeForVoice setMinimumTrackTintColor:RGB(238, 100, 85)];
- [_sldVolumeForVoice setMaximumTrackImage:[UIImage imageNamed:@"gray"] forState:UIControlStateNormal];
- [_sldVolumeForVoice addTarget:self action:@selector(onVoiceValueChange:) forControlEvents:UIControlEventValueChanged];
-
- UILabel *labVolumeForBGM = [[UILabel alloc] initWithFrame:CGRectMake(labVolumeForVoice.left, _sldVolumeForVoice.bottom + 20 , 80 , 16)];
- [labVolumeForBGM setText:L(@"TCVideoRecordMusicView.VolumeBGM")];
- [labVolumeForBGM sizeToFit];
- [labVolumeForBGM setFont:[UIFont systemFontOfSize:14.f]];
- labVolumeForBGM.textColor = UIColorFromRGB(0xFFFFFF);
- _sldVolumeForBGM = [[UISlider alloc] initWithFrame:CGRectMake(labVolumeForVoice.left, labVolumeForBGM.bottom + 10,self.width - 30, 20)];
- _sldVolumeForBGM.minimumValue = 0;
- _sldVolumeForBGM.maximumValue = 2;
- _sldVolumeForBGM.value = 1;
- _sldVolumeForBGM.autoresizingMask = UIViewAutoresizingFlexibleWidth;
- [_sldVolumeForBGM setThumbImage:[UIImage imageNamed:@"slider"] forState:UIControlStateNormal];
- [_sldVolumeForBGM setMinimumTrackTintColor:RGB(238, 100, 85)];
- [_sldVolumeForBGM setMaximumTrackImage:[UIImage imageNamed:@"gray"] forState:UIControlStateNormal];
- [_sldVolumeForBGM addTarget:self action:@selector(onBGMValueChange:) forControlEvents:UIControlEventValueChanged];
-
- _startTimeLabel = [[UILabel alloc] initWithFrame:CGRectMake(15,_sldVolumeForBGM.bottom + 20,200,16)];
- [_startTimeLabel setTextColor:[UIColor whiteColor]];
- [_startTimeLabel setFont:[UIFont systemFontOfSize:14.f]];
- // [_startTimeLabel setText:[NSString stringWithFormat:L(@"TCVideoRecordMusicView.StartFrom"),[TCBGMSliderCutView timeString:0]]];
-
- [self addSubview:btnSelectBGM];
- [self addSubview:btnStopBGM];
- [self addSubview:labVolumeForBGM];
- [self addSubview:_sldVolumeForBGM];
- [self addSubview:labVolumeForVoice];
- [self addSubview:_sldVolumeForVoice];
- [self addSubview:_startTimeLabel];
- [self freshCutView:150];
- }
- -(void) freshCutView:(CGFloat) duration{
- dispatch_async(dispatch_get_main_queue(), ^(){
- // [_musicCutSlider removeFromSuperview];
- //1.thumbHeight + 2* borderHeight =_musicCutSlider.frame.y;
- //2._musicCutSlider.frame.y目前只支持40
- // sliderConfig = [TCBGMSliderCutViewConfig new];
- // sliderConfig.duration = duration;
- // sliderConfig.frame = CGRectMake(15, _startTimeLabel.bottom + 10, self.width - 30, 54);
- // _musicCutSlider = [[TCBGMSliderCutView alloc] initWithImage:[UIImage imageNamed:@"wave_chosen"] config:sliderConfig];
- // _musicCutSlider.delegate = self;
- // [self addSubview:_musicCutSlider];
- });
- }
- -(void)onBtnMusicSelected
- {
- if (_delegate && [_delegate respondsToSelector:@selector(onBtnMusicSelected)]) {
- [_delegate onBtnMusicSelected];
- }
- }
- //-(void) resetCutView{
- // [_musicCutSlider resetCutView];
- //}
- - (void)selectEffect:(UIButton *)button {
- for(UIView *view in _audioScrollView.subviews){
- if ([view isKindOfClass:[UIButton class]]) {
- UIButton *btn = (UIButton *)view;
- btn.selected = NO;
- [btn setBackgroundColor:[UIColor clearColor]];
- }
- }
- button.selected = YES;
- [button setBackgroundColor:[UIColor redColor]];
- if (self.delegate) [self.delegate selectAudioEffect:button.tag];
- }
- /// 变声类型
- - (void)selectEffect2:(UIButton *)button {
- for(UIButton *view in _audioScrollView2.subviews){
- if ([view isKindOfClass:[UIButton class]]) {
- UIButton *btn = (UIButton *)view;
- btn.selected = NO;
- [btn setBackgroundColor:[UIColor clearColor]];
- }
- }
- button.selected = YES;
- [button setBackgroundColor:[UIColor redColor]];
- if (self.delegate) [self.delegate selectAudioEffect2:button.tag >= 5 ? button.tag + 1 : button.tag];
- }
- -(void)onBtnMusicStoped
- {
- if (_delegate && [_delegate respondsToSelector:@selector(onBtnMusicStoped)]) {
- [_delegate onBtnMusicStoped];
- }
- }
- -(void)onBGMValueChange:(UISlider*)slider
- {
- if (_delegate && [_delegate respondsToSelector:@selector(onBGMValueChange:)]) {
- [_delegate onBGMValueChange:slider.value];
- }
- }
- -(void)onVoiceValueChange:(UISlider*)slider
- {
- if (_delegate && [_delegate respondsToSelector:@selector(onVoiceValueChange:)]) {
- [_delegate onVoiceValueChange:slider.value];
- }
- }
- #pragma mark - RangeContentDelegate
- //- (void)onRangeLeftChanged:(TCBGMSliderCutView*)sender percent:(CGFloat)percent{
- // if(sliderConfig){
- // [_startTimeLabel setText:[NSString stringWithFormat:L(@"TCVideoRecordMusicView.StartFrom"),[TCBGMSliderCutView timeString:percent*sliderConfig.duration]]];
- // }
- // else{
- // [_startTimeLabel setText:[NSString stringWithFormat:L(@"TCVideoRecordMusicView.StartFrom"),[TCBGMSliderCutView timeString:0]]];
- // }
- //}
- //
- //- (void)onRangeLeftChangeEnded:(TCBGMSliderCutView*)sender percent:(CGFloat)percent
- //{
- //// NSLog(@"end:%f",percent*sliderConfig.duration);
- // if (_delegate && [_delegate respondsToSelector:@selector(onBGMRangeChange:endPercent:)]) {
- // [_delegate onBGMRangeChange:_musicCutSlider.leftScale endPercent:_musicCutSlider.rightScale];
- // }
- //}
- - (void)onRangeRightChangeEnded:(id)sender
- {
- // NSLog(@"left:%f right:%f",_musicCutSlider.leftScale, _musicCutSlider.rightScale);
- if (_delegate && [_delegate respondsToSelector:@selector(onBGMRangeChange:endPercent:)]) {
- // [_delegate onBGMRangeChange:_musicCutSlider.leftScale endPercent:_musicCutSlider.rightScale];
- }
- }
- -(void)resetVolume
- {
- _sldVolumeForBGM.value = 1;
- _sldVolumeForVoice.value = 1;
- }
- @end
|