版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
我们毕业啦其实是答辩的标题地方Processing创意编程音视频处理1教学重点(1) 如何向项目添加媒体素材(2) 库的安装与调用(3) 基本的Processing播放视频方法教学难点(1) 库的安装与调用(2) 基本的Processing播放视频方法任务:视频播放2任务具体要求调用库实现视频播放什么是库?5在学习编程的过程中,我们经常听到“库”(library)这个词。就像在制作一双鞋时需要各种材料和零件一样,编程也需要各种成熟的“部件”,而这些“部件”就是别人为我们写好的一堆程序或源代码,我们可以在自己的程序中引用它,从而达到“编写一次,多次使用”的效果。库的使用方法6下载库文件从官方网站或其他可信来源下载需要的库文件。安装/复制库文件将下载的库文件解压缩到计算机上。代码中导入库
在Processing代码中,使用import命令导入库。库的下载与安装7单击菜单栏的“速写本”→“引用库文件”→“ManagerLibraries”,打开ContributionManager窗口。在Libraries选项卡下方的搜索栏输入Video,选择与Processing版本对应的VideoLibraryforProcessing4单击右下角的Install,等待几分钟下载和安装完成。使用ContributionManager管理库库的下载与安装8单击菜单栏的“文件”→“偏好设定”,“速写本位置”显示了Processing储存文件的地址,将这段地址全部选中并复制打开资源管理器,将地址粘贴到路径框中,按下回车即可打开速写本目录该目录下的Libraries文件夹便是储存库文件的地方。只需要将准备好的库文件复制到该文件夹,便可完成库的手动安装。备用方案:手动下载与安装库速写本目录下保存的文件相当于为程序运行提供的环境,当需要转移程序到另一台电脑时,也需要将速写本中用到的库一并转移。速写本的位置可以在偏好设置中改变,为了程序稳定,路径不能包含中文。小知识加载媒体文件9步骤1单击菜单栏的“文件”→“新建”,新建一个程序;步骤2单击“文件”→“保存”,将文件命名为“media_01”,并保存到全英文路径下。步骤3单击“速写本”→“添加文件”,打开添加文件窗口,选中要添加的媒体素材并单击右下角的“打开”,素材就被复制到程序所在的目录下了。步骤4单击“速写本”→“打开程序目录”,可以看到程序目录中,除了主程序media_01.pde外多了一个data文件夹,添加的素材就在这个文件夹中。
直接将素材复制到程序所在目录的data文件夹中,同样可以添加素材。试试看用到的素材必须放在程序目录下!任务:播放视频10单击菜单栏的“速写本”→“引用库文件”→对应Processing版本的“VideoLibrary”,自动添加一行代码“importProcessing.video.*;”。直接在编辑区输入这行代码另一方法库的导入在Processing中,使用库是一种将额外功能集成到项目中的方式。Processing支持通过关键字import来引入库。比如在本案例中,代码的第一行便是:importprocessing.video.*;使用import关键字,后跟库的名称,将库引入代码中。Processing附带了许多内置库,如video、sound、serial等,提供了多数常用功能。此外,还可以使用外部库来扩展Processing的功能。一旦引入库,就可以使用库中提供的类、函数和常量。例如,本案例在引入video库后,可以使用Movie类和相关函数来处理视频。库的引用任务:播放视频12importprocessing.video.*;//导入视频处理相关的库Moviemov;//声明一个名为mov的视频对象//设置程序初始环境voidsetup(){size(1280,720);mov=newMovie(this,"testmovie.mp4");//初始化视频对象,加载视频文件
mov.play();//开始播放视频}//特殊的视频事件处理函数,在每一帧更新时调用voidmovieEvent(Moviemov){mov.read();//读取视频的下一帧}//绘制函数,在每一帧绘制时调用voiddraw(){//将当前视频帧绘制到屏幕上,起始位置为(0,0),大小与窗口相同
image(mov,0,0,width,height);}要注释!read()和play()是processing.video库中的函数,需要导入该库后才能使用注意!任务:播放视频13引入多个库时,可能会出现函数或类的命名冲突。使用库的前缀来区分不同库中的相同命名的函数或类。比如在下面这段代码中同时引入了两个库:video库和sound库,并且它们都有一个名为play()的函数。当程序中存在这个play()函数的时候,由于存在命名冲突,Processing不知道应该使用哪个库中的play()函数。这时候需要用库的前缀来区分不同库中的相同命名的函数或类。命名冲突importprocessing.video.*;importprocessing.sound.*;
voidsetup(){//一些代码}
voiddraw(){//一些代码video.play();//调用video库中的play()函数sound.play();//调用sound库中的play()函数}总结:库(library)15随堂测验-库趁热打铁概念定义:库是一组预先编写好的代码集合,用于解决特定的问题或执行特定的任务。作用:提供可重用的代码,避免重复编写相同功能的代码,提高开发效率。安装内置管理器:使用ContributionManager管理库手动下载安装:从官方网站或其他来源下载所需的库文件,将解压后的库文件夹复制到编程环境的指定位置导入导入库:使用import命令导入所需的库。例:importExampleLibrary.*;调用库中的函数:通常使用
库名.函数名()的方式来调用。例:
ExampleLibrary.functionName()挑战:修改代码-播放控制16可用代码语法说明mov.speed()mov.speed(rate)设置播放速度mov.jump()mov.jump(time)跳转到指定时间(单位:秒)mov.pause()mov.pause()暂停播放mov.play()mov.play()开始播放mov.loop();mov.loop();开始循环播放//单击鼠标切换播放/暂停booleanisPlaying=true;//监视播放状态voidmousePressed(){if(isPlaying){mov.pause();//暂停视频
}else{mov.play();//播放视频
}isPlaying=!isPlaying;//切换播放状态}可用代码-3//按下空格重播voidkeyPressed(){if(key=='
'){mov.jump(0);//重新播放视频(跳转到开始位置)
isPlaying=true;//更新播放状态
}}可用代码-4视频循环播放两倍播放速度单击鼠标切换播放/暂停按下空格重播提交作业【创意编程实践】5.1-视频播放任务注:单引号之间有空格任务:播放音频-准备工作17安装库使用内置管理器ContributionManager下载安装sound库或手动下载安装到指定路径新建项目新建名为“music_01”的项目准备素材在速写本中添加媒体文件“testmusic.mp3
“或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件“sound”或直接输入代码:importprocessing.sound.*;任务:播放音频18importprocessing.sound.*;//导入处理音频的库SoundFilesound;//声明一个SoundFile类型的变量,用于存储音频文件voidsetup(){size(600,600);//创建一个600x600像素的窗口
background(255);//设置背景颜色为白色
sound=newSoundFile(this,"testmusic.mp3");//加载音频文件到sound变量中
sound.play();//播放音频文件}voiddraw(){//持续更新画面确保窗口保持活动状态}删掉draw()函数,音乐还会播放吗?为什么?试一试实现基础播放功能任务testmusic.mp3素材任务:播放音频19voidmousePressed(){//单击鼠标切换播放/暂停
if(sound.isPlaying()){//如果音频正在播放
sound.pause();//暂停音频播放
}else{//如果音频未在播放
sound.play();//播放音频
}}添加播放控制功能任务sound.isPlaying()用于检查音频是否正在播放。如果音频正在播放,它会返回true,否则返回false。说明任务:播放单击音效20importprocessing.sound.*;SoundFilesound;voidsetup(){size(600,600);background(255);sound=newSoundFile(this,"testsound.mp3");}voiddraw(){}voidmousePressed(){sound.play();}sound_effect新建项目鼠标快速点击会导致多个音效同时播放试一试testsound.mp3素材任务:播放单击音效21importprocessing.sound.*;SoundFilesound;voidsetup(){size(600,600);background(255);sound=newSoundFile(this,"testsound.mp3");}voiddraw(){}voidmousePressed(){if(!sound.isPlaying()){//避免多个按键音效同时播放
sound.play();}}testsound.mp3素材避免多个按键音效同时播放挑战sound.isPlaying()用于检查音频是否正在播放。如果音频正在播放,它会返回true,否则返回false。提示1符号!是逻辑运算符,表示逻辑“非”。它用于对布尔值进行取反操作,即将true变为false,将false变为true。例:!true提示2数字音频有多种格式,每种格式都有其特定的优缺点和适用场景。清晰了解每种音频格式的特点和适用场景,以便更好地选择合适的格式来满足项目需求。相关知识:常见音频格式音频格式压缩方式音质文件大小主要用途WAV无损高大音频编辑、存档、无损音乐存储等MP3有损中~高小网络传输、音乐播放器、流媒体服务等OGG有损中~高小音乐流媒体服务、游戏开发等FLAC无损高小高音质音乐存储、音乐制作等AAC有损高小数字音乐、视频流媒体服务等任务:音量监控23任务要求播放音乐,并实时显示音量数值。任务:音量监控24importprocessing.sound.*;//导入处理音频的库SoundFilesound;//声明一个SoundFile类型的变量,用于存储音频文件Amplitudeamp;//声明一个Amplitude类型的变量,用于分析音频振幅voidsetup(){size(640,360);//创建一个640x360像素的窗口
background(255);//设置背景颜色为白色
//加载音频文件"testmusic.mp3"到sound变量中并播放
sound=newSoundFile(this,"testmusic.mp3");sound.play();//创建一个Amplitude对象amp,并将其连接到加载的音频文件上
amp=newAmplitude(this);amp.input(sound);}voiddraw(){//在控制台打印当前音频的振幅值
println(amp.analyze());}任务:音量监控25创建Amplitude对象amp,用于分析音频的振幅,并将其连接到加载的音频文件上。在draw()函数中,调用amp.analyze()方法,实时获取当前音频的振幅值使用println()函数将其打印到控制台上说明创意技巧26将数字从一个范围重新映射到另一个范围。工具:映射函数map()映射是创意编程中的一项重要技巧,将不同类型或来源的数据转化为具有视觉、听觉等效果的输出。这种技巧能够创造出有趣的互动体验,使得编程作品更加生动和具有吸引力。创意技巧鼠标鼠标坐标鼠标移动速度鼠标点击次数音频音频振幅音频频谱音调音量键盘输入键盘按键键盘组合键键盘按键持续时间时间当前时间时间间隔计时器环境温度湿度光线强度运动传感器数据随机要素随机数生成器任务二描述任务二:声音可视化任务具体要求实现随音量变化的动画任务:播放音频-准备工作28新建项目新建名为“AmpAnalyze_02”的项目准备素材在速写本中添加媒体文件或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件或直接输入代码:importprocessing.sound.*;任务二实现步骤1:单击菜单栏的“文件”→“新建”,新建一个程序;步骤2:单击“文件”→“保存”,将文件命名为“AmpAnalyze_02”,并保存到全英文路径下。步骤3:单击“速写本”→“添加文件”,打开添加文件窗口,选中准备好的音频“testmusic.mp3”,单击右下角的“打开”,将素材就复制到程序所在的目录下。步骤4:在代码编写区输入以下代码;importprocessing.sound.*;SoundFilesound;Amplitudeamp;voidsetup(){size(640,360);background(255);sound=newSoundFile(this,"testmusic.mp3");
sound.play();amp=newAmplitude(this);
amp.input(sound);}voiddraw(){
println(amp.analyze());background(255);floatrectHeight
=map(amp.analyze(),0,1,0,height);fill(255,0,0);//颜色为红色
rect(0,height-rectHeight,width,rectHeight);}任务二实现步骤6:单击按钮运行程序,可以看到一个随音乐变化的红色矩形可视化效果。矩形的高度根据音频振幅的大小而变化,使用户可以通过视觉方式观察到音频的振幅变化。【趁热打铁】31附件作业:【创意编程实践】音频播放sound_effect声音可视化:在程序基础上增加额外的数值映射特效,如颜色、形状等。任务三描述任务三:过渡动画任务具体要求使用lerp()函数实现平滑运动效果任务:播放音频-准备工作33新建项目新建名为“AmpAnalyze_03”的项目准备素材在速写本中添加媒体文件或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件或直接输入代码:importprocessing.sound.*;任务三实现importProcessing.sound.*;SoundFilesound;Amplitudeamp;floattargetRectH=0;//定义矩形目标高度floatcurrentRectH=0;//定义矩形当前高度floatChangeSpeed=0.07;//调整此值以控制矩形高度变化速度voidsetup(){size(640,360);background(0);sound=newSoundFile(this,"testmusic.mp3");
sound.play();
amp=newAmplitude(this);
amp.input(sound);}voiddraw(){background(0);
//获取音频振幅并计算矩形高度
floatampLevel=amp.analyze();
targetRectH=map(ampLevel,0,1,0,height);
//平滑过渡矩形高度
currentRectH=lerp(currentRectH,targetRectH,ChangeSpeed);
//添加变色效果
floatRGBcolor=map(ampLevel,0,1,0,255);fill(RGBcolor,0,255-RGBcolor);
//绘制矩形
rect(0,height-currentRectH,width,currentRectH);}lerp()函数通常用于在动画、图形渐变、平滑运动以及其他需要平滑过渡的情况下,生成中间值。它接受三个参数:start:起始值。stop:结束值。amt:插值的程度,通常在0.0到1.0之间。lerp()函数的数学表达式如下:lerp(start,stop,amt)=start+(stop-start)*amt动画过渡在本案例中,定义平滑动画所需的三个参数:floattargetRectH=0;//定义矩形目标高度floatcurrentRectH=0;//定义矩形当前高度floatChangeSpeed=0.07;//调整此值以控制矩形高度变化速度在draw()函数中,添加lerp函数实现平滑。
currentRectH=lerp(currentRectH,targetRectH,ChangeSpeed);动画过渡案例中为了丰富视觉效果,矩形的颜色也添加上变化特效,将音量值映射到颜色值的范围,使矩形的颜色也随着音乐变化。
floatRGBcolor=map(ampLevel,0,1,0,255);fill(RGBcolor,0,255-RGBcolor);这段代码使用了Processing中的map()函数,该函数用于将一个数值从一个范围映射到另一个范围。具体来说,它将变量ampLevel从0到1的范围映射到0到255的范围内,并将结果保存在`RGBcolor`变量中。ampLevel是表示音频振幅级别的变量,通常范围在0到1之间,其中0表示静音,1表示最大音量。回顾:数值映射ampLevel是表示音频振幅级别的变量,通常范围在0到1之间,其中0表示静音,1表示最大音量。map()函数的参数分别为:要映射的值(这里是ampLevel),原始范围的最小值和最大值(0和1),目标范围的最小值和最大值(0和255)。映射后的结果存储在`RGBcolor`变量中,表示一个颜色值,用于控制填充色。映射函数可以构建不同形式或来源的数值之间的联系,除了本案例中将音量映射为颜色,还可以用于形状、运动、视觉等方面,从而创造出有趣的联动与互动艺术体验。回顾:数值映射总结39随堂测验趁热打铁analyze()实时获取当前音频的振幅值isPlaying()检查音频是否正在播放。如果音频正在播放,它会返回true,否则返回false。插值函数lerp()通常用于在动画、图形渐变、平滑运动以及其他需要平滑过渡的情况下,生成中间值。lerp(start,stop,amt)=start+(stop-start)*amt我们毕业啦其实是答辩的标题地方Processing创意编程音视频处理40任务:视频播放41任务具体要求调用库实现视频播放什么是库?42在学习编程的过程中,我们经常听到“库”(library)这个词。就像在制作一双鞋时需要各种材料和零件一样,编程也需要各种成熟的“部件”,而这些“部件”就是别人为我们写好的一堆程序或源代码,我们可以在自己的程序中引用它,从而达到“编写一次,多次使用”的效果。库的使用方法43下载库文件从官方网站或其他可信来源下载需要的库文件。安装/复制库文件将下载的库文件解压缩到计算机上。代码中导入库
在Processing代码中,使用import命令导入库。库的下载与安装44单击菜单栏的“速写本”→“引用库文件”→“ManagerLibraries”,打开ContributionManager窗口。在Libraries选项卡下方的搜索栏输入Video,选择与Processing版本对应的VideoLibraryforProcessing4单击右下角的Install,等待几分钟下载和安装完成。使用ContributionManager管理库库的下载与安装45单击菜单栏的“文件”→“偏好设定”,“速写本位置”显示了Processing储存文件的地址,将这段地址全部选中并复制打开资源管理器,将地址粘贴到路径框中,按下回车即可打开速写本目录该目录下的Libraries文件夹便是储存库文件的地方。只需要将准备好的库文件复制到该文件夹,便可完成库的手动安装。备用方案:手动下载与安装库速写本目录下保存的文件相当于为程序运行提供的环境,当需要转移程序到另一台电脑时,也需要将速写本中用到的库一并转移。速写本的位置可以在偏好设置中改变,为了程序稳定,路径不能包含中文。小知识加载媒体文件46步骤1单击菜单栏的“文件”→“新建”,新建一个程序;步骤2单击“文件”→“保存”,将文件命名为“media_01”,并保存到全英文路径下。步骤3单击“速写本”→“添加文件”,打开添加文件窗口,选中要添加的媒体素材并单击右下角的“打开”,素材就被复制到程序所在的目录下了。步骤4单击“速写本”→“打开程序目录”,可以看到程序目录中,除了主程序media_01.pde外多了一个data文件夹,添加的素材就在这个文件夹中。
直接将素材复制到程序所在目录的data文件夹中,同样可以添加素材。试试看用到的素材必须放在程序目录下!任务:播放视频47单击菜单栏的“速写本”→“引用库文件”→对应Processing版本的“VideoLibrary”,自动添加一行代码“importProcessing.video.*;”。直接在编辑区输入这行代码另一方法库的导入在Processing中,使用库是一种将额外功能集成到项目中的方式。Processing支持通过关键字import来引入库。比如在本案例中,代码的第一行便是:importprocessing.video.*;使用import关键字,后跟库的名称,将库引入代码中。Processing附带了许多内置库,如video、sound、serial等,提供了多数常用功能。此外,还可以使用外部库来扩展Processing的功能。一旦引入库,就可以使用库中提供的类、函数和常量。例如,本案例在引入video库后,可以使用Movie类和相关函数来处理视频。库的引用任务:播放视频49importprocessing.video.*;//导入视频处理相关的库Moviemov;//声明一个名为mov的视频对象//设置程序初始环境voidsetup(){size(1280,720);mov=newMovie(this,"testmovie.mp4");//初始化视频对象,加载视频文件
mov.play();//开始播放视频}//特殊的视频事件处理函数,在每一帧更新时调用voidmovieEvent(Moviemov){mov.read();//读取视频的下一帧}//绘制函数,在每一帧绘制时调用voiddraw(){//将当前视频帧绘制到屏幕上,起始位置为(0,0),大小与窗口相同
image(mov,0,0,width,height);}要注释!read()和play()是processing.video库中的函数,需要导入该库后才能使用注意!任务:播放视频50引入多个库时,可能会出现函数或类的命名冲突。使用库的前缀来区分不同库中的相同命名的函数或类。比如在下面这段代码中同时引入了两个库:video库和sound库,并且它们都有一个名为play()的函数。当程序中存在这个play()函数的时候,由于存在命名冲突,Processing不知道应该使用哪个库中的play()函数。这时候需要用库的前缀来区分不同库中的相同命名的函数或类。命名冲突importprocessing.video.*;importprocessing.sound.*;
voidsetup(){//一些代码}
voiddraw(){//一些代码video.play();//调用video库中的play()函数sound.play();//调用sound库中的play()函数}总结:库(library)52随堂测验-库趁热打铁概念定义:库是一组预先编写好的代码集合,用于解决特定的问题或执行特定的任务。作用:提供可重用的代码,避免重复编写相同功能的代码,提高开发效率。安装内置管理器:使用ContributionManager管理库手动下载安装:从官方网站或其他来源下载所需的库文件,将解压后的库文件夹复制到编程环境的指定位置导入导入库:使用import命令导入所需的库。例:importExampleLibrary.*;调用库中的函数:通常使用
库名.函数名()的方式来调用。例:
ExampleLibrary.functionName()挑战:修改代码-播放控制53可用代码语法说明mov.speed()mov.speed(rate)设置播放速度mov.jump()mov.jump(time)跳转到指定时间(单位:秒)mov.pause()mov.pause()暂停播放mov.play()mov.play()开始播放mov.loop();mov.loop();开始循环播放//单击鼠标切换播放/暂停booleanisPlaying=true;//监视播放状态voidmousePressed(){if(isPlaying){mov.pause();//暂停视频
}else{mov.play();//播放视频
}isPlaying=!isPlaying;//切换播放状态}可用代码-3//按下空格重播voidkeyPressed(){if(key=='
'){mov.jump(0);//重新播放视频(跳转到开始位置)
isPlaying=true;//更新播放状态
}}可用代码-4视频循环播放两倍播放速度单击鼠标切换播放/暂停按下空格重播提交作业【创意编程实践】5.1-视频播放任务注:单引号之间有空格任务:播放音频-准备工作54安装库使用内置管理器ContributionManager下载安装sound库或手动下载安装到指定路径新建项目新建名为“music_01”的项目准备素材在速写本中添加媒体文件“testmusic.mp3
“或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件“sound”或直接输入代码:importprocessing.sound.*;任务:播放音频55importprocessing.sound.*;//导入处理音频的库SoundFilesound;//声明一个SoundFile类型的变量,用于存储音频文件voidsetup(){size(600,600);//创建一个600x600像素的窗口
background(255);//设置背景颜色为白色
sound=newSoundFile(this,"testmusic.mp3");//加载音频文件到sound变量中
sound.play();//播放音频文件}voiddraw(){//持续更新画面确保窗口保持活动状态}删掉draw()函数,音乐还会播放吗?为什么?试一试实现基础播放功能任务testmusic.mp3素材任务:播放音频56voidmousePressed(){//单击鼠标切换播放/暂停
if(sound.isPlaying()){//如果音频正在播放
sound.pause();//暂停音频播放
}else{//如果音频未在播放
sound.play();//播放音频
}}添加播放控制功能任务sound.isPlaying()用于检查音频是否正在播放。如果音频正在播放,它会返回true,否则返回false。说明任务:播放单击音效57importprocessing.sound.*;SoundFilesound;voidsetup(){size(600,600);background(255);sound=newSoundFile(this,"testsound.mp3");}voiddraw(){}voidmousePressed(){sound.play();}sound_effect新建项目鼠标快速点击会导致多个音效同时播放试一试testsound.mp3素材任务:播放单击音效58importprocessing.sound.*;SoundFilesound;voidsetup(){size(600,600);background(255);sound=newSoundFile(this,"testsound.mp3");}voiddraw(){}voidmousePressed(){if(!sound.isPlaying()){//避免多个按键音效同时播放
sound.play();}}testsound.mp3素材避免多个按键音效同时播放挑战sound.isPlaying()用于检查音频是否正在播放。如果音频正在播放,它会返回true,否则返回false。提示1符号!是逻辑运算符,表示逻辑“非”。它用于对布尔值进行取反操作,即将true变为false,将false变为true。例:!true提示2数字音频有多种格式,每种格式都有其特定的优缺点和适用场景。清晰了解每种音频格式的特点和适用场景,以便更好地选择合适的格式来满足项目需求。相关知识:常见音频格式音频格式压缩方式音质文件大小主要用途WAV无损高大音频编辑、存档、无损音乐存储等MP3有损中~高小网络传输、音乐播放器、流媒体服务等OGG有损中~高小音乐流媒体服务、游戏开发等FLAC无损高小高音质音乐存储、音乐制作等AAC有损高小数字音乐、视频流媒体服务等任务:音量监控60任务要求播放音乐,并实时显示音量数值。任务:音量监控61importprocessing.sound.*;//导入处理音频的库SoundFilesound;//声明一个SoundFile类型的变量,用于存储音频文件Amplitudeamp;//声明一个Amplitude类型的变量,用于分析音频振幅voidsetup(){size(640,360);//创建一个640x360像素的窗口
background(255);//设置背景颜色为白色
//加载音频文件"testmusic.mp3"到sound变量中并播放
sound=newSoundFile(this,"testmusic.mp3");sound.play();//创建一个Amplitude对象amp,并将其连接到加载的音频文件上
amp=newAmplitude(this);amp.input(sound);}voiddraw(){//在控制台打印当前音频的振幅值
println(amp.analyze());}任务:音量监控62创建Amplitude对象amp,用于分析音频的振幅,并将其连接到加载的音频文件上。在draw()函数中,调用amp.analyze()方法,实时获取当前音频的振幅值使用println()函数将其打印到控制台上说明创意技巧63将数字从一个范围重新映射到另一个范围。工具:映射函数map()映射是创意编程中的一项重要技巧,将不同类型或来源的数据转化为具有视觉、听觉等效果的输出。这种技巧能够创造出有趣的互动体验,使得编程作品更加生动和具有吸引力。创意技巧鼠标鼠标坐标鼠标移动速度鼠标点击次数音频音频振幅音频频谱音调音量键盘输入键盘按键键盘组合键键盘按键持续时间时间当前时间时间间隔计时器环境温度湿度光线强度运动传感器数据随机要素随机数生成器任务二描述任务二:声音可视化任务具体要求实现随音量变化的动画任务:播放音频-准备工作65新建项目新建名为“AmpAnalyze_02”的项目准备素材在速写本中添加媒体文件或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件或直接输入代码:importprocessing.sound.*;任务二实现步骤1:单击菜单栏的“文件”→“新建”,新建一个程序;步骤2:单击“文件”→“保存”,将文件命名为“AmpAnalyze_02”,并保存到全英文路径下。步骤3:单击“速写本”→“添加文件”,打开添加文件窗口,选中准备好的音频“testmusic.mp3”,单击右下角的“打开”,将素材就复制到程序所在的目录下。步骤4:在代码编写区输入以下代码;importprocessing.sound.*;SoundFilesound;Amplitudeamp;voidsetup(){size(640,360);background(255);sound=newSoundFile(this,"testmusic.mp3");
sound.play();amp=newAmplitude(this);
amp.input(sound);}voiddraw(){
println(amp.analyze());background(255);floatrectHeight
=map(amp.analyze(),0,1,0,height);fill(255,0,0);//颜色为红色
rect(0,height-rectHeight,width,rectHeight);}任务二实现步骤6:单击按钮运行程序,可以看到一个随音乐变化的红色矩形可视化效果。矩形的高度根据音频振幅的大小而变化,使用户可以通过视觉方式观察到音频的振幅变化。【趁热打铁】68附件作业:【创意编程实践】音频播放sound_effect声音可视化:在程序基础上增加额外的数值映射特效,如颜色、形状等。任务三描述任务三:过渡动画任务具体要求使用lerp()函数实现平滑运动效果任务:播放音频-准备工作70新建项目新建名为“AmpAnalyze_03”的项目准备素材在速写本中添加媒体文件或复制媒体文件至程序文件夹下data文件夹内引入库速写本中引入库文件或直接输入代码:importprocessing.sound.*;任务三实现importProcessing.sound.*;SoundFilesound;Amplitudeamp;floattargetRectH=0;//定义矩形目标高度floatcurrentRect
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年工程结构检测钢筋混凝土结构专项试题及答案
- 苏盐井神2023招聘笔试内部预测卷带答案
- 2020危化品易燃易爆泄漏应急处置培训教案 防爆炸防火灾
- 2026年森林消防安全测试题及答案
- 2025吉大机械复试笔试核心考题+答案解析(历年高频考点全覆盖)
- 2024亲子游乐场游客安全须知考核题及答案
- 2025行政岗文秘岗招聘笔试公共基础知识真题
- 江苏丹阳高级中学2025-2026学年度第二学期3月阶段检测高一语文试题(重点班)(含解析)
- 婚姻协议书要给孩子
- 生产免责协议书范文
- 国有企业资产管理流程与制度汇编
- LNG气化站设备保养手册
- 煤矸石铺地面施工方案
- 基础计算机考试实操题及答案
- 2025年五类人员选拔考试试题及答案
- 压力储罐设计计算书
- 2025年疾病预防控制中心招聘考试笔试试题(含答案)
- 医院培训课件:《医疗机构消防安全知识讲座》
- 咯血护理常规课件
- 慢性肾衰竭病人的护理试题及答案
- 设备制造质量安全保证体系及措施
评论
0/150
提交评论