如果你是新这里,你可能想订阅我的RSS提要,或在Twitter上跟着我。感谢您的来访!

了解如何创建自己的音乐可视化!

在70年代中期,雅达利Atari的首页音乐播放器,一台电视机连接到立体声,从而产生了抽象的图像与音乐同步发布。消费者可以处理图像,,扭动旋钮和推设备上的按钮。

该设备是一个市场失灵,但它是世界第一次被曝光音乐可视化。现在,音乐可视化是一种常见的技术,可以发现几乎在每一个数字媒体播放器,如iTunes或Windows Media Player。

音乐可视化在行动中看到一个例子,只需启动iTunes,开始调好,然后选择“ 查看/显示展台,允许致幻释放你的心灵!:]

在本教程中,您将创建你自己的音乐可视化。您将学习如何配置项目来播放音乐以及支持背景音乐,并创建使用UIKit中的粒子系统的粒子效果。您还将学习如何使这些粒子一首歌曲的节拍跳舞。

因此,提示了音乐和打出来的迪斯科球,事情是视觉!

注意:您可以尝试本教程使用iPhone模拟器,但你需要的设备上运行该项目,以选择不同的歌曲,并在后台播放音乐。

启动项目

要开始做事了,下载这个启动项目。启动项目具有以下功能:

  1. 它提供了一个简单的用户界面的应用程序。
  2. 支持的接口方向设置为横向。
  3. 的MediaPlayer.framework已被添加到项目中。
  4. 它包含了一个方法,它允许你从你的iPod库中挑选歌曲。
  5. 名为particleTexture.png图像添加到项目中使用粒子系统。
  6. MeterTable.h MeterTable.cpp C + +文件也添加到项目中。这些取自苹果样品项目avTouch的,在本教程将在稍后解释。

首先,解压下载的项目,在Xcode中打开它,并建立和运行。您应该看到以下内容:

您还可以点击“播放”按钮播放和暂停模式之间进行切换,但你不会听到任何音乐,直到你添​​加了一些代码后。点击中间隐藏/显示导航栏和工具栏上的黑色区域。

如果你在iPhone模拟器运行并点击左下角的放大镜图标上,你会看到下面的警告:

这是因为在iPhone模拟器不支持访问音乐库。但是,如果你的设备上运行,自来水,图标将显示媒体选择器,让你可以选择一首歌曲。

一旦你熟悉的用户界面,让我们开始吧。

让音乐播放

AVAudioPlayer是一个简单的方法在iOS设备上播放音乐。AVAudioPlayer可以在AVFoundation.framework发现,所以你需要添加到您的项目这个框架。

注意:如果你有兴趣学习更多关于AVAudioPlayer类,它能做什么,来看看我们为iPhone开发的音频101:播放音频通过编程教程。

在Project Navigator中选择iPodVisualizer然后根据目标选择iPodVisualizer。选择构建阶段标签,展开“ 链接二进制与图书馆部分,然后单击“ +“ (加号)按钮。

搜索AVFoundation.framework在弹出的列表中,选中它,然后单击“ 添加“。该框架现在应该会出现在您的项目中。

它的时间来写一些代码。打开ViewController.m并进行以下更改:

/ /添加到文件顶部#进口部分
#导入<AVFoundation/AVFoundation.h>的
/ /添加下面的,上面写着“在这里添加属性” 
@  (强,非原子) AVAudioPlayer *的AudioPlayer 下的注释 ;

这进口AVFoundation.h的头文件,所以你可以访问AVAudioPlayer,然后添加一个属性,将举行AVAudioPlayer实例将使用你的应用程序来播放音频。

而现在,它的时间播放音乐文件。

启动项目包括音乐文件名 ​​为DemoSong.m4a资源文件夹,您可以使用。随意,如果你想使用不同的音频文件。只要记住,只有以下的音频编解码器支持iOS设备上进行播放:

  • AAC(高级音频编码的MPEG-4)
  • ALAC(苹果无损)
  • HE-AAC(MPEG-4高效率AAC)
  • iLBC的(互联网低比特率编解码器,另一种格式的语音)
  • IMA4(IMA / ADPCM)
  • 线性PCM(未压缩的,线性脉冲编码调制)
  • MP3(MPEG-1音频层3)
  • μ律和法律

仍然在ViewController.m中,添加下面的方法:

- (void)configureAudioPlayer {NSURL *audioFileURL = [[NSBundle mainBundle] URLForResource:@"DemoSong" withExtension:@"m4a"];NSError *error;self.audioPlayer =  [ [ AVAudioPlayer的alloc ] initWithContentsOfURL : audioFileURL错误:错误] (错误){ NSLog的(@ “%@” ,[错误localizedDescription ] ) ;} [ _audioPlayer setNumberOfLoops : - 1 ] ;}  

此方法创建一个音乐文件,并它作为存储audioFileURL。,然后创建一个新的AVAudioPlayer实例初始化与audioFileURL和设置其numberOfLoops属性为-1永远使音频循环。

注意:如果你决定使用提供了一个比其他音乐文件,千万记得要添加新的文件到Xcode项目和改变音乐文件名 ​​(可能延长)在上述方法中。

年底viewDidLoad中添加下面一行:

[自我configureAudioPlayer ;

viewDidLoad中:configureAudioPlayer:通过调用,设置了尽快视图负载的音频播放器等可以按下播放按钮,应用程序启动和应用程序发挥你的歌声。

现在添加下面一行里面是playpause,只是读取/ /暂停音频后评论:

[ _audioPlayer暂停] ;

接下来,添加下面一行同样的方法后,只需读取/ /这里播放音频的注释:

[ _audioPlayer发挥] ;

攻丝播放/暂停按钮调用的是playpause。你刚才添加的代码讲述的AudioPlayer来播放或暂停其当前状态所定义的_isPlaying。正如其名称所示,这个属性标识的音频播放器是否是当前播放的音频或没有。

现在构建和运行。如果你做的一切都是正确的应用程序看起来一模一样。但现在你可以播放/暂停音乐。

这短暂的瞬间,让您的芬克!:]

选择乐曲

只是播放一首歌曲的音乐播放器,不管这首歌可能是如何的酷,是不是非常有用。因此,您将添加能够播放的音频设备的音乐库。

如果你不打算在设备上运行,或者知道如何设置起来了,你可以跳到下一章节。

您下载的启动项目设置,以便当用户选择通过所选的歌曲是一首歌曲从媒体选择器,网址playURL:内幕ViewController.m的。目前,playURL:只是切换播放/暂停按钮上的图标。

内部ViewController.m,添加下面的代码到playURL:刚过评论读取/ /添加的AudioPlayer配置在这里

[ self.audioPlayer =  [ AVAudioPlayer的alloc ] initWithContentsOfURL : URL错误:零] [ _audioPlayer setNumberOfLoops : - 1 ] ;

上面的代码是多少你中写道configureAudioPlayer的什么一样。然而,而不是硬编码的文件名 ​​,创建一个新的AVAudioPlayer实例传递到方法中的URL。

建立,并在设备上运行,你就可以选择和播放一首歌曲从音乐库中。

注意:如果你有iTunes的比赛,你可能会看到在媒体选择器项目实际上并没有在您的设备上。如果您选择不存储在本地的一首歌曲,应用程序驳回媒体选择器和音频无法播放的。所以,如果你想听到的(很快就会看到)的东西,一定要选择一个文件,实际上有:]

虽然在设备上运行该项目,按home键。您会发现,您的音乐暂停。这是一个音乐播放器应用程序不是一个很好的经验,如果一个音乐播放器,是你后。

你可以配置你的应用程序,以便即使当应用程序进入的背景音乐将继续发挥。请记住,这是另一种不支持的功能在iPhone模拟器,这样的设备上运行的应用程序,如果你想看看它是如何工作的。

要播放的背景音乐,你需要做两件事情:设置音频会话类别,然后宣布支持背景执行的应用程序。

首先,设置音频会话类别。

音频会话配置音频行为是您的应用程序和iOS之间的中介。配置您的音频会议,建立了基本的音频为您的应用程序的行为。您可以设置您的音频会话类别根据你的应用,你怎么想它的设备和系统进行交互。

添加以下新方法ViewController.m的

 -  (无效) configureAudioSession { NSError  *错误;[ [ AVAudioSession sharedInstance ] setCategory : AVAudioSessionCategoryPlayback错误:错误] ; (错误) { NSLog的(@ “错误设置类别:%@” ,[错误描述] ) ;} }

configureAudioSession,你得到音频会话使用[AVAudioSession sharedInstance的]类别设置AVAudioSessionCategoryPlayback。这标识将被用于播放音频(相对于记录或处理音频),当前的音频会议。

viewDidLoad中添加下面一行,就在调用[自我configureAudioPlayer];

[自我configureAudioSession ;

这,调用configureAudioSession配置音频会话。

注:要了解更多关于音频会话,阅读苹果的音频会话编程指南。还是先看看我们的背景模式在iOS教程,还涵盖了主题,虽然不是在尽可能多的细节。

现在,你必须声明你的应用程序支持后台执行。

的Info.plist打开iPodVisualizer支持文件夹),选择最后一行,单击加号按钮,添加一个新的项目。重点从下拉列表中,选择所需的背景模式的项目类型将自动更改阵列。(如果它不自动成为,仔细检查的关键。)

展开的项目,设定值Item0 APP播放音频。(如果你有一个广泛的Xcode窗口,你可能没有注意到,该值是一个下拉列表,但你可以访问列表中,只需点击下拉图标年底领域。)

当你完成后,建立并在设备上运行,挑选一首歌曲并播放,按home键,这时候你要继续发挥音乐无间断,即使你的应用程序是在后台。

音乐可视化

将根据你的音乐可视化上在UIKit的粒子系统。如果你不知道很多关于粒子系统,你可能想读的UIKit粒子系统在iOS 5或如何使一个字母/文字游戏的UIKit类:3/3部分,以熟悉必要的背景信息;这个教程进入详细解释粒子系统的基础知识。

首先,添加QuartzCore.framework到您的项目(以同样的方式您添加AVFoundation.framework)。

现在,选择“ 文件/新建/文件...,然后选择iOS /可可的触摸/ Objective-C类模板。命名类VisualizerView,使一个UIView的子类,单击“ 下一步“,然后单击“ 创建

在Xcode项目导航选择“ VisualizerView.m“,并更改其扩展。M 毫米。(您可以通过点击文件两次缓慢在Project Navigator 命名。也就是说,不要不按一下它的速度不够快被认为通过双击。) 。毫米扩展告诉Xcode中,这个文件需要被编 ​​译为Ç+ +,这是必要的,因为稍后将访问C + +类MeterTable

打开VisualizerView.mm以下替换其内容:

#导入的“VisualizerView.h”
#导入<QuartzCore/QuartzCore.h>的
@:实现 VisualizerView { CAEmitterLayer * emitterLayer;}
/ / 1 
+  (类) layerClass { 返回 [ CAEmitterLayer类] ;}
-  (ID ) initWithFrame :(的CGRect )帧{ 个体经营=  [超级initWithFrame :帧] ;(个体经营){ [自我setBackgroundColor的:的UIColor blackColor ] ] ;  =  emitterLayer ( CAEmitterLayer * ) self.layer;/ / 2 CGFloat宽度= MAX ( frame.size.width,frame.size.height ) ;CGFloat高度= MIN ( frame.size.width,frame.size.height ) ;emitterLayer.emitterPosition CGPointMake (宽/高/ 2 ) ;emitterLayer.emitterSize = CGSizeMake (宽- 80,60 ) ;emitterLayer.emitterShape = kCAEmitterLayerRectangle;emitterLayer.renderMode = kCAEmitterLayerAdditive;/ / 3 CAEmitterCell。*电池=  [ CAEmitterCell emitterCell ] ;cell.name =  @ “细胞” ;=  cell.contents (ID )[ [ UIImage的imageNamed :@ “particleTexture.png”的CGImage ] ;/ / 4 cell.color =  [ [的UIColor colorWithRed的: 1.0F绿色: 0.53f蓝色: 0.0F阿尔法: 0.8F ] CGColor ] ;cell.redRange = 0.46f;cell.greenRange = 0.49f;cell.blueRange = 0.67f;cell.alphaRange = 0.55F;/ / 5 cell.redSpeed ​​的= 0.11f;cell.greenSpeed ​​= 0.07F;cell.blueSpeed ​​=  - 0.25f;cell.alphaSpeed ​​= 0.15f;/ / 6 cell.scale的= 0.5F;cell.scaleRange = 0.5F;/ / 7 cell.lifetime = 1.0F;cell.lifetimeRange = .25 F;cell.birthRate =  80 ;/ / 8 cell.velocity = 100.0F;cell.velocityRange = 300.0f;cell.emissionRange = M_PI *  2 ;= @ [ / / 9 emitterLayer.emitterCells的细胞] ;} 返回自我;}
@结束

上面的代码主要配置的UIKit粒子的系统中,如下所示:

  1. 覆写layerClass的返回CAEmitterLayer,它允许此视图可作为粒子发射器。
  2. 作为屏幕中心的大部分延伸的矩形,该矩形形状的发射极。颗粒初步建立,在此区域内。
  3. 创建一个呈现CAEmitterCell颗粒使用中的启动项目,包括particleTexture.png
  4. 设置粒子的颜色,以及与每个红色,绿色和蓝色的颜色成分可能会发生变化的范围内。
  5. 设置的颜色分量的速度改变粒子的寿命。
  6. 设置的规模和规模会有所不同,所生成的颗粒的量。
  7. 设置每个粒子存在0.75和1.25秒之间的时间量,并且将其设置为每秒80颗粒。
  8. 配置的发射极,以创建具有可变速度的颗粒,他们在任何方向发射。
  9. 将发射极电池的发射极层。

同样,读前面提到的教程,如果你想知道更多有趣的事情,你可以做UIKit的粒子系统和上面的配置值是如何影响生成的颗粒。

下一页的开放ViewController.m并进行以下更改:

/ /添加与其他进口
导入“VisualizerView.h”
/ /添加的其他属性
 (强,非原子) VisualizerView *可视化;

现在添加下面viewDidLoad中,,之前只是读取的行[自我configureAudioPlayer];

self.visualizer =  [ [页头VisualizerView ] initWithFrame : self.view.frame ] ;[ _visualizer setAutoresizingMask : UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth ] ;[ _backgroundView addSubview : _visualizer ] ;

这将创建一个VisualizerView实例,将填补其父视图和添加到_backgroundView。(_backgroundView定义启动项目的一部分,并且仅仅是后面的音乐控制分层图。)

建立和运行,你会看到立即行动中的粒子系统:

虽然这看起来非常的酷,你的确希望粒子“拍”你的音乐同步。这是通过改变颗粒​​的大小时的分贝级别的音乐的变化。

首先,打开VisualizerView.h的,并进行以下更改:

/ /添加等进口
#导入<AVFoundation/AVFoundation.h>的
/ / @接口和内@端线
 (强,非原子) AVAudioPlayer *的AudioPlayer;

新的属性会给您的可视化访问到应用程序的音频播放器,并因此音频电平,但之前,你可以使用这些信息,你需要设置一件事。

切换到ViewController.m搜索setNumberOfLoops。如果你跳过了部分设备上运行的,它会出现一次(configureAudioPlayer),否则,它会出现两次(configureAudioPlayerplayURL: )。

添加下面的代码后,任何发生的行[_audioPlayer setNumberOfLoops:-1];

[ _audioPlayer setMeteringEnabled :YES ] ;[ _visualizer setAudioPlayer : _audioPlayer ] ;

有了上面的代码,你指示AVAudioPlayer实例,使音频级计量数据。然后,您可以通过 _audioPlayer_visualizer,以便它可以访问这些数据。

现在切换到VisualizerView.mm的修改如下:

/ /添加与其他进口
导入“MeterTable.h”
/ /改变私有变量执行一段看起来像此,
@执行 VisualizerView { CAEmitterLayer * emitterLayer;MeterTable meterTable;
}

上面的代码给出你访问一个MeterTable实例名为meterTable的。启动项目包括C + +的类MeterTable,你会用它来 ​​帮助处理音频AVAudioPlayer水平。

这一切都谈计量是什么?它应该是容易理解的,一旦你看到下面的图片:

你最有可能看到类似的东西在前面的音响系统,弹跳跟着音乐。它只是表明你在任何给定的时间内的音频。MeterTable的相对强度是一个辅助类,可以用来划分分贝值在范围内,用于生产像上面的图像。

您将使用MeterTable的值转换成一个范围从0到1,你会在你的音乐可视化,使用新的值来调整大小的颗粒。

添加以下方法VisualizerView.mm

-  (无效)更新{ / / 1 浮动比例=  0.5 ;( _audioPlayer.playing ){ / / 2 [ _audioPlayer updateMeters ] ;  / / 3 浮法功率= 0.0F; (我= 0 ; < [ _audioPlayer,numberOfChannels ] ;我+ + ){ 电源+ = [ _audioPlayer averagePowerForChannel :我] ;} 电源/ = [ _audioPlayer numberOfChannels ] ;     / / 4的浮动水平= meterTable.ValueAt (电源) ;规模=等级*  5 ;}/ / 5 [ emitterLayer的setValue : @ (规模) forKeyPath :@ “emitterCells.cell.scale” ] ;}

上述方法每次被调用时,它更新的可视化的粒子的大小。在这里,它是如何工作的:

  1. 您可以设置规模的默认值为0.5,然后检查看是否播放_audioPlayer的
  2. 如果是玩,你叫updateMeters_audioPlayer,刷新AVAudioPlayer基于对当前的音频数据。
  3. 这是肉的方法。每个音频通道(例如,立体声文件),该通道的平均功率被添加到电源。的平均功率的分贝值。的权力后的所有信道已被被相加,除以电源的信道数目。这意味着电源现在持有的平均功率,所有的音频,或分贝。
  4. 在这里,你通过到meterTable ValueAt方法计算出的平均功耗值。它返回一个值从0到1,你乘以5,然后设置,作为规模。乘以5,突出音乐的效果上规模。

    注:为什么使用meterTable的转换电源的价值?究其原因是,它简化了代码,你必须写。否则,您的代码将覆盖广泛的由averagePowerForChannel返回值。返回值为0表示满刻度,即最大功率;,-160表示一个返回值最小功率(即接近沉默)。但信号的音频播放器,实际上可能超过满量程范围内,所以值仍然可以超越这些限制。使用meterTable给你一个不错的值从0到1。没有什么大惊小怪的,没有弄脏。

  5. 最后,发射器的粒子的规模被设置为新的刻度值。(如果_audioPlayer是不是在玩,这将是默认的比例为0.5;否则,这将是一些基于对当前的音频电平值。

现在您的应用程序不调用更新,所以新的代码没有任何影响。修复,通过修改的initWithFrame:VisualizerView.mm中加入以下几行刚过emitterLayer.emitterCells = @ [单元](但仍右大括号内):

CADisplayLink * dpLink =  [ CADisplayLink displayLinkWithTarget :自我选择:选择(更新)] ;[ dpLink addToRunLoop :[ NSRunLoop currentRunLoop ] forMode : NSRunLoopCommonModes ] ;

可以在此处设置一个CADisplayLink。à CADisplayLink的是一个计时器,让您的应用程序来同步绘图显示器的刷新率。也就是说,它的行为就像一个的NSTimer用1/60秒的时间间隔内,不同的是它有保证的每次设备准备重画屏幕,这通常是在以每秒60次的速率被称为。

您在上面添加创建的第一行设置为调用CADisplayLink目标自我更新的一个实例。这意味着它会调用您刚才定义的更新方法,在每个屏幕刷新。

第二行调用addToRunLoop:forMode,开始显示链接定时器。

注:添加CADisplayLink运行循环是一个低级别的线程相关的概念。本教程中,你只需要了解每个屏幕更新将被称为CADisplayLink。但是,如果你想了解更多,您可以检查出的类的参考CADisplayLink或NSRunLoop,或读通过运行循环章在苹果的线程编程指南。

现在构建,运行和播放一些音乐。你会发现,粒子会改变它们的大小,但他们不“打”与音乐。这是因为我们的变化可以在不影响屏幕上已经存在的粒子。只有新的颗粒被改变。

这需要加以固定。

initWithFrame打开VisualizerView.mm和修改如下:

    / /删除此行/ / cell.contents =(ID)[UIImage的imageNamed:@“particleTexture.png”的CGImage];/ /,取而代之的是以下几行 CAEmitterCell * childCell =  [ CAEmitterCell emitterCell ] ;childCell.name =  @ “childCell” ;childCell.lifetime = 1.0F / 60.0F;childCell.birthRate = 60.0F;childCell.velocity = 0.0F;=  childCell.contents (ID )[ [ UIImage的imageNamed :@ “particleTexture.png”的CGImage ] ;cell.emitterCells = @ [ childCell ] ;

喜欢CAEmitterLayer,也有CAEmitterCell一个名为emitterCells。这意味着一个CAEmitterCell可以包含另一个CAEmitterCell的。这将导致在粒子发射粒子。这是正确的,伙计们,这是海龟颗粒一路下跌!:]

另请注意您孩子的一生 1/60秒。这意味着,粒子发射的childCell将有一生的时间,这是相同的长度作为一个屏幕刷新。您设置的出生率为60,这意味着将有60每秒发射的粒子。由于每六十分之一秒的模具,总是会有以前的粒子死亡时,创建一个粒子。你以为你的日子是短暂的:]

建立和运行,你会看到粒子系统的工作原理相同像以前那样-但它仍然不打的音乐。你可以尝试设置出生率为30,以帮助您了解如何设置工作(只是不要忘了把它设回60)。

那么,你是怎么得到的粒子系统,打的音乐吗?

目前更新的最后一行看起来像这样:

[ emitterLayer的setValue :规模forKeyPath :@ “emitterCells.cell.scale” ] ;

替换该行具有以下:

[ emitterLayer的setValue : @ (规模) forKeyPath :@ “emitterCells.cell.emitterCells.childCell.scale” ] ;

现在建立和运行,你会看到,所有的粒子击败现在你的音乐。


所以上述变化做什么?

创建和销毁颗粒以同样的速度,屏幕刷新。这意味着,每次重绘屏幕时,一组新的粒子被创建和被销毁前一组。由于总是创建新的粒子,粒子的大小计算出在那一刻的音频水平出现脉冲与音乐。

恭喜你,你刚刚作出了一个很酷的音乐可视化应用程序!

从这里去哪里?

下面是完整的示例项目中所有的代码从上面的教程

本教程给你一个基本的想法如何添加到您的应用程序的音乐可视化系统。但是,你可以把它进一步指出:

  • 您可以添加更多的音乐控制,使项目一个全功能的音乐播放器。
  • 您可以创建一个稍微复杂的可视化工具,修改了所有音频通道混合成一个单一的价值,而不是每个音频通道独立的粒子系统。
  • 尝试创建一个不同的粒子系统(这个工具,UIEffectDesigner,可能会有所帮助)。
  • 或者,也许尝试改变形状的发射极层和视图内左右移动。

当你在检查出来苹果的样品项目aurioTouch2的的。这是一个先进的音乐可视化和一个伟大的方式来学习更多的主题。

玩得开心!

如何是音乐再ios展台相关推荐

  1. 网易云音乐再成功融资!2018年成数字音乐资本大年

    10月12日,网易云音乐宣布达成新一轮融资,投资方包括百度.泛大西洋投资集团(General Atlantic).博裕资本等,其中百度为战略投资方.新一轮融资后,网易公司仍单独享有对网易云音乐的控制权 ...

  2. 腾讯音乐招 iOS 开发, base 深圳,要求:本科、三年、OC,懂音视频开发优先。...

    计算机基础扎实,精通 Objective-C,熟悉 iOS 平台并有良好的软件开发经验: 熟悉 https 及流媒体上传下载协议,精通 TCP/IP 协议: 良好的编码风格,以及足够的调试技术和问题解 ...

  3. 微信播放在服务器视频无法播放音乐,解决ios微信浏览器中audio和video音乐视频无法自动播放等问题...

    产生问题的原因 参考网址:点击 对于自动播放的局限性,没有变通方案.正如前面所提及的,音频流只能从用户触摸事件加载.当针对移动版 Safari 进行开发时,重要的一点是要在必要时调整您的工作流,以适应 ...

  4. 6.15 使用AudioPlayer播放音乐 [原创iOS开发-Xcode教程]

    原文:http://coolketang.com/staticCoding/5a9910fc0b61607bf6cdf747.html 1. 在欢迎窗口右侧的历史项目列表中,双击打开之前创建的单视图项 ...

  5. 论运维职业发展中的自我修养

    作者介绍 温峥峰,百田信息运维技术专家,DevOps Team Leader,超过8年互联网运维经验,曾就职于网易游戏,经受过各类海量规模互联网业务模式的历练,专注于运维自动化.DevOps实践.运维 ...

  6. ios网易云音乐源码、动画引擎源码等

    iOS精选源码 自己维护的框架, 超级多功能 图片选择SDK:支持多选,相册选择,预览,网络图预览 一款可以简单实现长按拖拽重排的 UICellCollectionView Cell框... 动画引擎 ...

  7. 网易云音乐ios旧版本安装包_网易云音乐产品分析报告

    本文将从产品概述.市场现状分析.用户分析.产品分析.功能体验和需求优化.总结五个维度,对网易云音乐(ios v5.8.2)进行分析 产品概述 体验环境 体验版本:V5.8.2 体验设备:iphone ...

  8. iOS音效和音乐播放

    在iOS中音频播放从形式上可以分为音效播放和音乐播放.前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度.循环等控制.后者指的是一些较长的音频,通常是主音频,对于这些音频的播放 ...

  9. iOS实现获取系统iTunes音乐的方法示例

    这篇文章主要给大家介绍了关于iOS如何实现获取系统iTunes音乐的相关资料,文中通过示例代码给大家详细介绍了实现的方法,并给大家介绍了MPMediaPickerController的相关知识,对大家 ...

最新文章

  1. SAP HUM 如何将HU里的物料号换成另外一个物料号?
  2. golang1.13环境变量保存路径 go env -w
  3. ajax requestbody传值,ajax POST方法调用后@RequestBody属性为空
  4. C++类的使用(一)
  5. DCMTK:OFStandard类的测试程序
  6. 安装这些App的注意了!隐私窃取 捆绑推广 已被下架 现在卸载还来得及!
  7. 常用的正则表达式,妈妈再也不用担心我不会写正则表达式了
  8. html5 textarea 限制字数,如何限制textarea的字符数为225?
  9. Android车载应用开发与分析(11)- 车载Android应用开发入门指南
  10. 将火狐浏览器视频播放倍速设置为3倍速及其以上
  11. 计算机制图员主要学什么,制图员
  12. 如何显示在网页中显示阿拉伯语言
  13. DNS 域名称服务
  14. 投影仪和电视哪个好,装修选了当贝X3激光投影仪高亮智能2022年618推荐
  15. 基于北方苍鹰优化算法的函数寻优算法
  16. Android studio LSettingItem setRightText不显示,右边文字不显示 com.leon.lib.settingview.LSettingItem
  17. Android 简单几步实现手机号码归属地查询,可监听文本框的变化自动查询
  18. 菜鸟的数学建模之路(四):BP神经网络
  19. java的html解析器——Jsoup详解
  20. Confluence 小技巧(Tip) 宏

热门文章

  1. C++中stack的用法(超详细,入门必看)
  2. 线性和非线性方程数值解法_数值分析计算方法
  3. 2021年P气瓶充装考试题及P气瓶充装最新解析
  4. A simple but tough-to-beat baseline for sentence embedding
  5. 百度网盟怎样投放来辅助百度竞价推广
  6. cmd 组合命令和管道命令的使用
  7. git reset中hard与soft区别
  8. elipse版本简介
  9. 数据结构C语言版(李云清)实验7 二叉树
  10. 支付宝里程怎么用 支付宝里程兑换在哪里