前言
我们在制作电子乐器时,通常需要将某一种或几种乐器的声音移植到我们的电子芯片中,移植的过程大致可以分为如下三个步骤:
1.音源的获取
2.对应音乐片段的录制
3.音频文件的数据转换
接下来我将详细给大家介绍下我在音源移植上的经验。
一、音源的获取
音源的获取大致有两种方法,一种是自己购买对应的乐器,演奏并录制,第二种是使用别人录制好的音源,截取其中自己需要的片段。自己录制的方案需要昂贵的乐器,专业的设备以及熟练的演奏技巧,对于一般的爱好者来说很难达到。所以推荐使用第二种方案,从网上查找自己需要的音源,截取其中的一部分,进行格式转换后移植到芯片中,但是需要注意音源的版权。
1.1 在线音源
在线音源的获取比较简单,无需安装额外软件,浏览器打开相应网站即可,下面给大家推荐几个网站:
1.1.1 https://www.musicca.com/zh/drums
该网站是一个小型的音乐学习网站,提供了 钢琴、吉他、贝斯、套鼓四种乐器的在线演奏。
1.1.2 https://www.autopiano.cn/
该往站是一个在线钢琴网站,提供钢琴的在线演奏,可通过该网站获取钢琴音源。
1.1.3 http://liflag.cn/html/Drum/index.htm
该往站是一个电子鼓在线演奏网站,可通过该网站获取电子鼓音源。
1.2 离线音源
离线音源的使用相抵来说会复杂一些,需要在电脑上安装软件才能使用,优点是音源种类很多,几乎我们听到的任何乐器都能找到对应的软音源。离线音源一般需要在电脑上安装宿主软件以及响应的音源插件。下面给大家推荐几个常用的宿主软件及音源插件:
1.2.1 宿主软件
常用的宿主软件有 Studio One,Cubase ,Pro Tool,FL Studio等,功能上都类似,大家可以自行搜索安装,推荐使用Studio One
1.2.2 音源插件
宿主软件一般是不带音源的,需要我们安装音源插件,建议直接在某宝搜索音源,花点小钱能快速解决问题。下面是我在某宝购买的空音民族音源,包含古筝笛子二胡葫芦丝中国鼓等等,有需要可以从下面链接下载:
【kong2】.链.接:https://pan.baidu.com/s/1ZE9Ib2Lc3UUtiY_v5-ypwg
提取码:cdxj
当然也有免费的音源插件可以下载,下面给大家推荐几个网站:
https://www.aigei.com/course/timbre/
二、音频片段的录制及截取
我们在第一步获取到的音源还能在电脑上播放,但是我们的目标是把音源片段转换成文件或者代码移植到芯片中。所以我们需要某种方法把电脑上播放的声音剥下来,保存成文件,然后在进行下一步处理。这里推荐使用 Audacity 这个软件进行电脑内录,该软件是一个免费软件,下载地址如下:https://www.audacityteam.org/
安装好该软件后,在音频设置里面,将音频主机设为Windows WASAPI,播放设备设为正在使用的耳机或音响,Recoding设备也设置正在使用的耳机或者音箱,声道数建议选择单声道,这样就可以将电脑播放的声音记录下来了。最下面的音频质量可根据自己的需要进行选择。
录制好声音后,选中自己需要的片段,点击鼠标右键,选择分开片段,就可以将我们需要的片段与其他部分分开了。
然后选中带片段,点击文件,导出,导出选择的音频,保存类型选择WAV(Microsoft)编码选择 Signed16-bit PCM。
导出之后可以播放一遍,检验一下是不是自己需要的片段。
三、音频文件的数据转换
在第二步,我么将所需要的音频片段保存成的Wav格式的文件,但是我们的单片机往往是要以数组的方式保存文件,那就需要使用工具将Wav数据转换成数组,这里采用的是Python脚本的形式,源代码贴在下面供大家参考。
import ewave
with ewave.open('test.wav') as w:
print("samplerate = {0.sampling_rate} Hz, length = {0.nframes} samples, "
"channels = {0.nchannels}, dtype = {0.dtype!r}".format(w))
data = w.read()
print("const short wave_data[" + str(len(data)) + "] = {")
i = 0
for d in data:
print(d,end=",")
i +=1
if i == 32:
i = 0
print("")
print("}")
生成的数组如下图所示:
粘贴到C语言代码中即可使用,注意数组最末尾多了个逗号。