云天 发表于 2021-12-18 22:43:31

Mind+Python声控炫彩灯

本帖最后由 云天 于 2021-12-18 22:58 编辑


【项目设计】
见过网络上的声控炫灯,多数需要使用模拟拾音模块。本项目使用Python来播放和分析音频,再通过Pinpong库,让Arduino控制LED根据音乐亮灯。
【设计分析】
1、使用WAV格式的音乐文件,从网络上下载的MP3音乐文件,可通过在线转换成WAV格式:https://convertio.co/zh/audio-converter/
2、使用“wave”库对音频数据进行分析
3、使用“pyaudio”库播放音频
【程序设计】使用Mind+Python模式


程序代码:



import warnings
warnings.simplefilter("ignore", DeprecationWarning)#防止报警告
import pyaudio
import wave

import numpy as np
import pygame,random
from pygame.locals import *
from pinpong.board import Board,Pin,NeoPixel
NEOPIXEL_PIN = Pin.D2
PIXELS_NUM = 60 #灯数
Board("uno").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
npy = NeoPixel(Pin(NEOPIXEL_PIN), PIXELS_NUM)
CHUNK = 2048#我把它理解为缓冲流


wf = wave.open("ydy.wav", 'rb')#以只读的方式打开"1qom8-vi8uq.wav"文件

#创建播放器
p = pyaudio.PyAudio()
#打开数据流output=True表示音频输出
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),#设置声道数
                rate=wf.getframerate(),#设置流的频率
                output=True)


data = wf.readframes(CHUNK)#音频数据初始化

while data != '':#直到音频放完

    stream.write(data)#播放缓冲流的音频
    data = wf.readframes(CHUNK)#更新data
    numpydata = np.fromstring(data, dtype=np.int16)#把data由字符串以十六进制的方式转变为数组
    transforamed=np.real(np.fft.fft(numpydata))#傅里叶变换获取实数部分

   
    count=64#设置间隔区
    max_data=0
    for n in range(0,transforamed.size,count):#从频域中的2048个数据中每隔count个数据中选取一条
      hight=abs(int(transforamed/10000))#对这么多数据取整和绝对值
      if hight>max_data:
            max_data=hight
    print(max_data)
    if max_data>255:
      max_data=255
    max_data1=0
    max_data2=0
    max_data3=0
    i=random.randint(1, 12)
    if i<4:
      max_data1=max_data
    elif i<8:
      max_data2=max_data
    else:
      max_data3=max_data   
    npy.range_color(0,60,(max_data1,max_data2,max_data3))
   
stream.stop_stream()
stream.close()
#关闭流
p.terminate()

【修改库文件】
因NeoPixel 的range_color第三个参数默认的是十六制颜色,形式如“#0xFF0000”,我想使用元组表示颜色,如“(255,0,0)”。找到pymata4.py(C:\Program Files (x86)\Mind+\Arduino\python\site-packages\pinpong\base)

【组装硬件】
硬件使用的是“Mind+Python流光溢彩灯https://mc.dfrobot.com.cn/thread-311681-1-1.html”

【效果图】



【演示视频】

https://www.bilibili.com/video/BV1UY411W77P?share_source=copy_web

界面视频只用演示用,歌曲由Python播放。

创客达闻西 发表于 2021-12-23 11:11:25

这个光太炫彩了顶不住一直看啊

木子呢 发表于 2022-1-7 10:48:14

Mind+Python快被宋老师玩出 花 来了,太棒了{:5_131:}
页: [1]
查看完整版本: Mind+Python声控炫彩灯