音乐制作器
先了解你将做出什么
应用介绍
做一个可以现场”编曲”的App:屏幕上一排乐器按钮,点一下鼓开始循环打节奏, 再点一下钢琴叠上旋律,几个音轨同时响,就是一段你自己的音乐。
这一篇和前面几篇不太一样——界面长什么样由你自己定。 教程给的是思路和关键技巧,具体做成什么样,看你想要什么风格。
建议先做完《我的钢琴》再来做这一篇,那边讲的按钮和播放器这里要接着用。

音乐制作器教程(难度系数:★★)
找素材并上传
这一篇的素材要你自己准备,需要两类:
- 循环音轨,建议 4 段左右,比如:鼓点、贝斯、钢琴、合成器。 关键要求是”能接得上”——一段放完立刻从头再放,听不出接缝。 这种素材叫 loop(循环乐句),网上搜「free drum loop」「免费循环素材」能找到不少免费的。
- 乐器图标,每种乐器一张,贴在按钮上比写字好看得多。
优先用 mp3,别用 wav。
同样一段 4 秒的鼓点,wav 可能有 1~2MB,转成 mp3 只要几十 KB。 素材一多,wav 会让你的 apk 大得离谱,安装和加载都慢。
音质上,做背景循环用 mp3 完全够。
先想清楚界面怎么排
动手拖组件之前,先决定两件事:
第一,横屏还是竖屏。 选中 Screen1,改 屏幕方向 属性:
竖屏选「垂直」,横屏选「水平」。做音乐类App横屏往往更舒服,按钮能排得开。
第二,按钮怎么摆。 靠的是两种布局组件:
- 水平布局 —— 放进去的组件并排,从左到右。
- 垂直布局 —— 放进去的组件竖排,从上到下。
两种可以互相嵌套,比如”一个垂直布局里放三个水平布局”,就得到了三行按钮。
宽高一律用百分比
这一篇按钮多,最容易翻车的就是尺寸。记住一条:宽度高度都用百分比,别写死像素。
| 写法 | 效果 |
|---|---|
充满 |
撑满它所在的那个容器(按钮的容器是布局,布局的容器一般是屏幕) |
30% |
占容器的三成 |
100 像素 |
固定 100 像素——换个手机就可能错位,尽量别用 |
一行放三个按钮,每个给 30% 左右刚好(留一点边距)。
外层的水平布局记得把 宽度 设成 充满,否则它会缩成刚好包住按钮的一小条。
每个乐器配一个播放器
这是整篇最关键的一点:几个乐器要同时响,就得有几个播放器组件。 一个播放器同一时刻只能放一个音,共用的话后一个会把前一个顶掉,叠不起来。
所以从「多媒体」里拖 4 个音频播放器进来,按乐器分别重命名:
音频播放器_鼓、钢琴播放器、音频播放器_合成器……
每个播放器都要设两个属性:
源文件—— 选对应的那段循环音频。循环播放—— 勾上,这样一段放完会自动从头再来,节奏才不会断。
播放和停止
代码简单到不能再简单,一个按钮开、一个按钮关:
when 按钮_鼓.Click() {
音频播放器_鼓.Start()
}
when 按钮_停鼓.Click() {
音频播放器_鼓.Stop()
}
其他乐器照着来,把组件名换掉就行。
做到这里就可以连 AI伴侣 测了:点鼓、再点钢琴,两个音轨应该同时在响。 如果后一个把前一个盖掉了,回去检查是不是两个按钮用了同一个播放器。
进阶:一个按钮管开关
一个乐器占两个按钮太浪费地方了。用 是否正在播放 这个属性判断一下,一个按钮就够:
when 按钮_合成器.Click() {
if 音频播放器_合成器.IsPlaying {
音频播放器_合成器.Stop()
按钮_合成器.Text = "合成器"
} else {
音频播放器_合成器.Start()
按钮_合成器.Text = "停止"
}
}
顺手把按钮上的字也改掉,用户一眼就知道再点一下会发生什么。 这种”一个控件两种状态”的写法,以后做播放器、开关、收藏按钮都用得上。
用变量记 是否在播 当然也能做,但没必要——播放器自己就知道自己在不在播,
IsPlaying 直接读就是了。
能从组件直接问到的状态,就别自己再存一份。 自己存的那份一旦忘了更新, 就会和真实情况对不上,这类bug特别难找。
开始测试
连上 AI伴侣,重点试这几样:
- 几个乐器能不能同时响(这是这个App的灵魂)。
- 循环接得顺不顺,有没有明显的卡顿或空白。
- 开关按钮点两下能不能正确切换,按钮上的字跟着变没有。
- 换个屏幕尺寸不同的手机看看,布局有没有错位——这一步能验证你的百分比设得对不对。
剩余工作
这个App的上限很高,可以一直往下做:
- 加暂停。
暂停和停止不一样:暂停再播是接着放,停止再播是从头放。试试听出区别。 - 音量调节。加个滑动条组件,拖动时改播放器的
音量,就能给各个音轨配平。 - 录下来。用录音机组件把你现场编的这段录下来,再用一个播放器回放给朋友听。
- 做一个节拍器。加个计时器,按固定间隔闪烁或者响一下,帮你踩准拍子。
- 换更多乐器。素材是这个App最大的变量,多找几段好听的循环,效果立刻不一样。
做出好听的记得录下来分享ヾ(◍°∇°◍)ノ゙
卡在哪一步?直接查操作
不用退出当前教程。速查会在新页面打开,查完回来继续刚才的进度。