当涉及到通用的微控制器,没有人希望他们执行重型软件操作。二进制微控制器是简单的设备,控制设备和讨论串行接口。微控制器构建音频/视频或多媒体应用程序是从未尝试。它是具有挑战性的,在大多数情况下不可行处理任何类型的多媒体通过微控制器。微控制器不仅是设计。
尽管不适当应用,比如音频和/或视频,值得尝试,尝试音频与微控制器和图形项目。我们已经看到如何Arduino可以生成数字音频的形式音符和旋律曲调。Arduino可以播放音乐吗?Arduino是无法播放音频文件。播放MP3和波格式音频文件由Arduino只使用外部突破电路是可能的。
Arduino接口与任何演讲很好,直接或通过一个放大器电路。它能很好地驱动喇叭,播放自己的音乐。然后,多么复杂的曲调Arduino可以玩。我们不能加载Arduino的音频文件。它的内存和文件系统不支持。我们不能使用二进制编码音频Arduino固件作为闪存是有限的。
那么,只有一种方法玩复杂的音乐曲调Arduino:流媒体。在这个项目中,我们将玩一些复杂的音乐和一个涉及多个追踪Arduino通过流媒体音频文件的内容。我们将流音乐曲调多轨歌曲PC或Mac上使用一个Python脚本,让Arduino扬声器上。
这个项目
在这个项目中,我们将构建一个Python应用程序流的内容Arduino音频文件从一台计算机。Arduino董事会程序接收音频流连续和演讲者实时播放。这种方式,我们将为主题的歌曲播放音乐的流行电影《不可能的任务,Arduino《加勒比海盗》,《泰坦尼克号》。这个项目后,任何歌曲或音乐Arduino可以播放音乐。
请注意,串行通信的波特率最大Arduino是115200。大多数音频文件有一个更高的比特率,如192 k。这就是为什么音乐流Arduino可能感觉不到一样经验丰富的电脑,手机,和其他多媒体设备。
有两个版本的应用程序。在这个项目中,我们将构建一个版本适用于单向的音频文件。
组件的要求
- Arduino UNO /大型x1
- 演讲者x1
- 连接电线/跳线
- 一台电脑
米多Python库
我们使用Python的米多库中提取内容的音频文件。图书馆将提取笔记,注意持续时间从MIDI音频文件格式和流Arduino的值。Arduino将获取双值代表笔记,注意持续时间通过一个连续串行的数据流和发挥各自的实时调整扬声器。
安装米多库
安装在你的PC或Mac米多库,运行终端在Mac或Windows命令提示符并执行下面的命令。
py - m pip安装米多
命令将安装米多库。它还将安装numpy作为一个依赖如果不是已经安装在系统上。
检查音频文件的Python脚本
首先让我们先从写桌面应用程序。应用程序是用Python编写的,并使用米多和PySerial库。米多库解码音频文件,PySerial图书馆从音频文件流数据通过串行通信Arduino。你需要一个中期文件你想玩的音乐或歌曲。中期你可以下载一个文件,你最喜欢的歌,主题,或调整在线或你最喜欢的歌/优化从MP3格式转换为中期格式使用一个在线工具。编写主应用程序之前,我们需要检查音频文件通过Python脚本。
我们将玩“他是海盗”主题曲Arduino在这个项目。这个主题曲的MP3文件下面的连接。
(链接到poctheme.mp3)
的中期文件主题曲从https://freemidi.org/下载下面的连接。
将两个文件放在项目文件夹中,创建一个文件的名字“mido-single-track-inspection。py”在同一文件夹中。我们将编写一个Python脚本,检查该文件中的音频文件。因此,主应用程序将被编程。
将下面的代码添加到文件“mido-single-track-inspection.py。”
进口米多
中期= mido.MidiFile (poctheme。中期,剪辑= True)
mid.tracks
print (len (mid.tracks))
保存并运行脚本。它将返回的追踪“poctheme.mid”的音频文件。有三个跟踪我们的音频文件。如果你正在与一个不同的音频文件,替换上面的代码的文件名。
现在让我们检查内容在每个轨道的大小。运行下面的代码在Python脚本得到这三大领域的内容的大小。
进口米多
中期= mido.MidiFile (poctheme。中期,剪辑= True)
mid.tracks
打印(len (mid.tracks [0]))
打印(len (mid.tracks [1]))
打印(len (mid.tracks [2]))
我们可以看到在跟踪0 9行,跟踪1中1285行和1557行跟踪2。让我们检查每个记录的内容。运行下面的代码在Python脚本查看的内容跟踪0。
味精= []
在mid.tracks m [0]:
msg.append (str (m))
味精的m:
打印(m)
我们可以看到在上面的屏幕转储,跟踪0只有音频文件相关的元数据。
运行下面的代码在Python脚本检查track1的内容。
味精= []
在mid.tracks m [1]:
msg.append (str (m))
味精的m:
打印(m)
可以看到从上面的屏幕转储,跟踪1包含音频数据。10号线轨道后,音频数据存在注意状态,通道,注意,速度,注意时间。
运行下面的代码在Python脚本检查track2的内容。
味精= []
在mid.tracks m [2]:
msg.append (str (m))
味精的m:
打印(m)
正如你所看到的从屏幕转储跟踪2还包含音频数据但对于不同的频道。有两个渠道,这是一个立体声音频。的音频数据通道的音频文件存储在不同的轨道上。我们需要从这些歌曲中提取音频数据流Arduino。
注意,一个音频文件可以有多个,每个多个通道的音频数据。轨道或渠道可以对应于每个乐器演奏的音乐。
让我们工作正轨1的音频文件。我们需要提取的音频数据流。所以,首先,让我们消除元信息存储在第十行跟踪1。请注意,我们已经将每个消息的轨道1在Python列表“味精”。添加以下代码来摆脱跟踪的元信息。
米的范围(10):
德尔味精[0]
现在,我们需要把每一个元素的消息/线跟踪的一个数组。添加以下代码来转储跟踪的每个属性的消息到一个数组中。
notesmatrix = []
味精的m:
行= m。分割(" ")
notesmatrix.append(行)
每个属性的轨道1消息在一个二维数组,现在我们可以提取音轨的所有笔记使用下面的代码在另一个数组。
笔记= []
在notesmatrix行:
notes.append(行[2].split (" = ") [1])
打印(记录)
跟踪的所有笔记的注意持续时间可以使用下面的代码被倾倒到另一个数组。
notedurations = []
在notesmatrix行:
notedurations.append(行[4].split (" = ") [1])
打印(notedurations)
我们需要从音轨中提取纸币和注意持续时间为音频文件播放乐曲Arduino。音频数据将和在实时连续流,每个音符都必须注意持续时间在串行数据。所以我们将提取对笔记和各自注意持续时间在一个不同的数组,所以Arduino立即发挥每个音符在验收单和实时注意持续时间值对。下面的代码存储每个音符之后,各自注意持续时间在一个数组。
musicnotes = []
在notesmatrix行:
musicnotes.append(行[2].split (" = ") [1])
musicnotes.append(行[4].split (" = ") [1])
打印(musicnotes)
最后,我们有音频数据跟踪1倾倒到一个数组中。我们只需要流数组内容连续Arduino吹奏一支曲子。
audio-single-track-inspection Python脚本”。py poctheme“检查音频文件”。中期“终于有以下代码。
桌面应用程序
检查音频文件后,我们现在可以写主应用程序代码从轨道1提取音频数据文件和流的Arduino连续。在此之前,Arduino连接到你的电脑,检查连接的端口号。在我们的例子中,Arduino COM6连接。创建一个新的Python脚本文件并命名为“python-audio-streaming.py”。将下面的代码添加到脚本文件。
上面的脚本是我们主要桌面应用程序流Arduino的音轨。它使用了米多库中提取的音频数据的音频文件和PySerial图书馆Arduino的串行数据流。如果你没有Pyserial库安装,运行下面的命令安装库的终端/命令提示符。
py - m pip安装pyserial
电路的连接
我们需要准备Arduino接收音频流,在扬声器播放。Arduino连接电脑和接口直接Arduino的演讲者。演讲者使用在这个项目是4欧姆50瓦特3英寸喇叭,不需要任何放大器电路生成可听见的声音。演讲者有两个终端。一个终端连接到Arduino的地面销和其他任何GPIO终端。在这里,另一个终端连接销D8 Arduino UNO。
Arduino草图
后电路连接,上传以下草图Arduino。
素描读取两个字节串行数据的注意,注意时间并生成演讲者立即注意。这种方式,虽然它接收音频流,流在实时Arduino的演讲者。
它是如何工作的
桌面上的Python脚本“python-audio-streaming”需要在一个音频文件和提取的音频数据从一个轨道。音频数据传输串行通信Arduino注意&注意持续时间对值。Arduino接收信息记录和笔记通过一个串行的数据流计算机时间。它使用流数据实时演奏音符扬声器。
如何测试项目
后写桌面应用程序——“python-audio-streaming”,使得Arduino电路连接,Arduino电路板和上传一个草图,Arduino连接到计算机。在你的电脑上,运行Python脚本“python-audio-streaming”,并立即Arduino将开始播放这首歌的曲调/音乐扬声器。传输音频数据可以从Python控制台。
结果
结论
我们可以玩任何歌曲或音乐曲调Arduino通过流媒体音频数据。上传音频文件Arduino的文件系统是不可能的。它也不可能写出音频数据固件由于单片机内存有限。在这种情况下,可以在复杂和长时间的音乐曲调Arduino通过流媒体音频数据。然后在音频流由Arduino实时。演奏曲调会降低比特率比原来的音频文件的最大传输速率UNO仅限于115200个基点。在这个项目中,我们建立一个Python脚本解释音频文件和流的音频内容Arduino的追踪。Arduino可以玩一次只有一个音调。因此调整由Arduino可能感觉不到一模一样的有经验的在玩原来的音频文件。不过,如果音频文件只有一个跟踪或一个著名的跟踪,调整由Arduino将密切匹配最初的MP3音频。
你可能也喜欢:
了下:Arduino,1Manbetx
与本文有关的问题?
询问和讨论Electro-Tech-Online.com和EDAboard.com论坛。
告诉我们你的想法! !
你必须登录发布评论。