绘制播放音乐时的音波图形的View

这个效果类似于这个哦:

效果如下:

源码:

MusicView.h 与 MusicView.m

//
//  MusicView.h
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MusicView : UIView

@property (nonatomic, assign) CGFloat  progress;      // 进程百分比,取值为[0,1]
@property (nonatomic, assign) CGFloat  timeInterval;  // 时间间隔

@end
//
//  MusicView.m
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "MusicView.h"

@interface MusicView ()

@property (nonatomic, assign) CGRect  baseRect; // 备份原始的frame值

@end

@implementation MusicView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        _baseRect = frame;
    }
    return self;
}

@synthesize progress = _progress;
- (void)setProgress:(CGFloat)progress
{
    if (progress <= 0) {
        _progress = 0;
    } else if (progress >= 1) {
        _progress = 1;
    } else {
        _progress = progress;
    }

    [UIView animateWithDuration:(_timeInterval > 0 ? _timeInterval : 0.99) animations:^{
        CGRect rect       = _baseRect;
        rect.size.height *=  _progress;
        self.frame        = rect;
    }];
}
- (CGFloat)progress
{
    return _progress;
}

@end

使用时的情形:

//
//  RootViewController.m
//  Music
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "MusicView.h"

@interface RootViewController ()

@property (nonatomic, strong) NSTimer    *timer;
@property (nonatomic, strong) MusicView  *musicViewLine1;
@property (nonatomic, strong) MusicView  *musicViewLine2;
@property (nonatomic, strong) MusicView  *musicViewLine3;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // 线条1
    _musicViewLine1 = [[MusicView alloc] initWithFrame:CGRectMake(100, 100, 4, 20)];
    _musicViewLine1.backgroundColor = [UIColor redColor];
    _musicViewLine1.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine1];

    // 线条2
    _musicViewLine2 = [[MusicView alloc] initWithFrame:CGRectMake(108, 100, 4, 20)];
    _musicViewLine2.backgroundColor = [UIColor redColor];
    _musicViewLine2.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine2];

    // 线条3
    _musicViewLine3 = [[MusicView alloc] initWithFrame:CGRectMake(116, 100, 4, 20)];
    _musicViewLine3.backgroundColor = [UIColor redColor];
    _musicViewLine3.timeInterval    = 0.5f;
    [self.view addSubview:_musicViewLine3];

    _timer = [NSTimer scheduledTimerWithTimeInterval:0.5f
                                              target:self
                                            selector:@selector(timerEvent)
                                            userInfo:nil
                                             repeats:YES];
}

- (void)timerEvent
{
    _musicViewLine1.progress = arc4random()%100/100.f;
    _musicViewLine2.progress = arc4random()%100/100.f;
    _musicViewLine3.progress = arc4random()%100/100.f;
}

@end

以下是核心代码:

绘制播放音乐时的音波图形的View,布布扣,bubuko.com

时间: 2024-10-16 00:01:09

绘制播放音乐时的音波图形的View的相关文章

关于Windows 8使用WMP播放音乐时WUDFHost跑CPU和硬盘的问题解决

Windows 8使用Windows Media Player播放音乐的时候,其实有一个这样的情况,WMP和某个什么名字看起来很屌的进程跑CPU很高,这个跑很高视你插入的SD卡内的文件数或者移动硬盘的文件数来定,如果文件很多,这个跑起来可以把系统都快卡死. 就像下面这样: 原因: WMP命令WPD系统服务去扫描外部移动存储,它用于更新媒体库. 系统服务就去访问那个移动设备,不断的扫描遍历移动设备的文件,所以IO和CPU使用很高,导致系统卡,读取访问缓慢. 解决: 打开服务,找到Portable

Android播放音乐时跳动的屏谱demo

Android实现播放音频时的跳动频谱,并实现可以调节的均衡器. Main.java package com.wjq.audiofx; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.audiofx.Equalizer; import android.media.audiofx.Visualizer; imp

android 5.0 播放音乐时闹钟响,此时来电话并挂断,闹钟和音乐同时响

请按照如下方法进行修改: frameworks\base\media\java\android\media\MediaFocusControl.java: 1.import packages: import com.android.internal.telephony.ITelephony; import android.os.ServiceManager; 2.增加获取当前Phone Call State的方法getPhoneCallState(): private int getPhoneC

手机影音第十五天,利用service实现后台播放音乐,在通知栏显示当前音乐信息等

代码已经托管到码云上,有兴趣的小伙伴可以下载看看 https://git.oschina.net/joy_yuan/MobilePlayer 先来一张目前的音乐播放器的效果图,当播放时,手机的状态通知栏也会有音乐信息显示. 这里可以看到有歌名.演唱者,还有歌曲的总时间,当前播放时间,当前播放进度,音乐暂停.下一首,上一首,音乐循环模式(单曲循环,顺序播放.循环播放)功能的实现.下一步就是把中间空白的部分填充歌词,然后做成根据进度显示歌词. 由于这次的内容有点多,是写了一天半的代码,讲的没那么细,

android 播放音乐-进度条

今天学渣研究了一下使用MediaPlayer播放音乐时加入进度条,进度条如今用的是android自带的seekbar,后期会跟换UI的,在之前可以播放音乐的基础上,如今加入的主要功能有两个: 1实时显示播放进度 2手动调节播放进度 如今学渣新建了一个项目来进行測试,后期会和之前博客介绍的滑动页面进行整合,预计会在service建好后整合,敬请期待.... 好了先上效果图: 关于使用进度条的基本原理非常easy,用到了几个參数: 1 歌曲的时长:单位为毫秒,MediaPlayer的getDurat

UI小项目之拳皇动画的实现(抽取加载图片和播放音乐的方法)

实现思路 1.加载图片 2.播放音乐 实现思想 1.封装思想 抽取相同代码生成一个新的方法,通过传递参数调用该方法: 2.内存管理思想 不需要每次调用方法时都重新加载图片,for循环加载图片写在ViewdidLoad中 下列代码没有对运行过程中内存管理进行优化 其中加载图片有两种方法: 通过imageNmae加载有缓存 通过imageWithContentsOfFile加载无缓存 有无缓存的区别: 有缓存,使用时不需要重新加载 无缓存,使用时才加载 #import "ViewController

AVAudioPlayer播放音乐文件及读取ipod库中的音乐文件

下面是ipad上的调试效果 下面是代码,代码中都有注释: #import <UIKit/UIKit.h>  #import <AVFoundation/AVFoundation.h>  #import <MediaPlayer/MediaPlayer.h>   @interface RootViewController : UIViewController <AVAudioPlayerDelegate> {     AVAudioPlayer *player

Android多媒体-播放多媒体时的前台服务

众所周知,一般我们将播放的逻辑都放入service当中,这样就能实现在后台继续播放音乐的功能.后台service被系统回收的概率相对来说比较低,但是这种情况也确实存在. 前台服务是那些被认为用户知道的并且在内存低的时候不允许系统杀死的服务.前台服务必须给状态栏提供一个通知,他被放到了"正在进行中(Ongoing)"标题之下,这就意味着直到这个服务被终止或从前台删除通知才能被解除. 例如,一个播放音乐的音乐播放器服务应该被设置在前台运行,因为用户明确的知道它们的操作.状态栏中的通知可能指

一种实现无缝循环播放音乐方案

场景: 为了节省页面资源,往往需要将一段小音频循环播放,通常做法是在audio标签上添加loop属性,但不幸的是,该属性并不能保证无缝循环(gapless looping)播放,明显的感觉到中间的停顿. 解决方案: 使用audio标签的Web API提供的方法和属性进行循环播放,具体如下 事件名称 事件作用 timeupdate 当前播放的时长发生改变时触发     属性名称 属性作用 currentTime                 用来获取或控制当前播放的时间,单位为s duratio