# Python神经网络提取音乐数据和开放C++音频图形框架

<details>

<summary>关键词</summary>

Python | 声音 | 振荡器 | 绘图 | 波形 | 调制器 | 立体声 | 幅度 | 频率 | 加法合成 | 粒度合成 | 减法合成 | 滤波 | 取样 | 麦克风 | 混响 | 包络 | MIDI协议 | 傅里叶 | 噪声 | 合成器 | 算法 | 硬件 | Arduino | C++ | 多媒体 | Keras神经网络 | 播放器

</details>

{% embed url="https://viadean.notion.site/Python-C-cd16514bc7024917a78b959825b118e3" %}

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}

### 🎯要点

1. 声音合成：
   1. 🎯波形和振荡器代码实现，绘图和声音播放：🖊三角形、锯齿波和方波振荡器声音合成 | 🖊环形声音调制器，输出立体声 | 🖊声音幅度调制 | 🖊声音频率调制 | 🖊振荡器相位调制 | 🖊加法合成：带限锯齿波、方波、三角波和随机波形振荡器 | 🖊带限查表三角波、随机波振荡器 | 🖊粒度合成 | 🖊减法合成：方波振荡器和谐振低通滤波器 | 🖊延迟音频取样 | 🖊延迟麦克风捕获的音频 | 🖊混响效果：延迟线和滤波器 | 🖊(攻击-衰减-维持-释放)包络应用于调频合成器的幅度和索引 | 🖊控制包络 | 🖊扫描和控制 MIDI 协议设备 | 🖊声音路由和平移输出，平移白噪声 | 🖊采样率、位深度、缓冲区大小、延迟和音频范围 | 🖊快速傅里叶变换和频谱滤波过滤白噪声。🎯合成器算法测试。
2. 快速傅里叶变换和频谱分析：
   1. 🎯代码重新合成声音、绘图和声音播放：🖊嘈杂音与和谐音交叉合成 | 🖊振荡器和人声间的频谱变形 | 🖊加法合成光谱再合成 | 🖊光谱滤波和频谱混响。
3. 物理计算模拟信号和数字信息：
   1. 🎯代码控制物理硬件：🖊控制Ardunio板，传感器正弦波幅度 | 🖊传感器控制硬件振荡器的幅度和频率 | 🖊振荡显示检测信号，淡入淡出，​​脉宽调制 | 🖊硬件创建声音粒度合成器。
4. 开放声音控制协议和开放C++音频图形框架(开放框架)：
   1. 🎯连接媒体设备：🖊接收和发送手机消息 | 🖊接收和发送开放框架应用的消息，示例：鼓声机
5. 机器学习：
   1. 🎯Keras神经网络提取音乐数据：🖊创建回归神经网络，调频调制器，鼠标和键盘侦听器，数据分割处理 | 🖊创建分类神经网络，分类人类口语声音，从麦克风提取声音梅尔频率倒谱系数，确定麦克风输入声音的平均幅度。
6. 🎯计算机辅助音乐学习、🎯音乐创作接口。

### 🍇Python音乐播放器

该项目旨在使用 Python 中的 Tkinter 和 Pygame 创建音乐播放器应用程序。我们将使用 Tkinter 为应用程序创建 GUI，并使用 Pygame 来播放音乐。

```python
 import tkinter as tk
 from tkinter import ttk
 from tkinter import filedialog
 import pygame
 import os
 from tkinter import messagebox
```

在此步骤中，我们创建主类“MusicPlayer”并初始化 Tkinter 根窗口。 我们设置窗口的标题、尺寸和背景图像。 我们还使用标签将背景图像设置到窗口，并初始化 Pygame 及其混合器模块。

```python
 class MusicPlayer:
     def __init__(self, root):
         self.root = root
         self.root.title("DataFlair - Music Player")
         self.root.geometry("750x400")
         self.root.resizable(False, False)
         self.bg_image =  tk.PhotoImage(file = os.path.join(os.getcwd(), "MusicPlayer/images", "bg_con.png"))
         self.bg_label = ttk.Label(self.root, image=self.bg_image)
         self.bg_label.place(relx=0, rely=-0, relwidth=1, relheight=1)
         s = ttk.Style()
         s.theme_use('clam')
         s.configure('.', background='black', foreground='black')
         s.configure('TFrame', background='white', foreground='white')
         s.configure('TButton', font=('Arial', 12), background='black', foreground='white',
                                             activebackground='brown', activeforeground='white')
         s.configure('TLabel', font=('Arial', 12), background='black', foreground='white')
         s.configure('TScale', background='white')
         pygame.init()
         pygame.mixer.init()
```

在此步骤中，我们创建播放列表框架，它将保存用户播放列表中的歌曲列表。 使用 grid() 方法将该框架放置在窗口的左侧。 播放列表由 Tkinter 列表框表示，它显示歌曲列表。 我们还将“<\<ListboxSelect>>”事件绑定到“play\_selected”函数，该函数播放所选歌曲。

```python
         self.playlist_frame = tk.Frame(self.root)
         self.playlist_frame.grid(row=0, column=0, padx=10, pady=10)
         self.playlist = tk.Listbox(self.playlist_frame, width=40, height=20)
         self.playlist.pack(fill=tk.BOTH, expand=True)
         self.playlist.bind("<<ListboxSelect>>", self.play_selected)
```

在此步骤中，我们创建放置在窗口右侧的控制框。 该框架包含播放/暂停按钮、向后跳按钮、向前跳按钮和音量控制。 播放/暂停按钮使用 Tkinter StringVar 在“播放”和“暂停”文本之间切换。 向后和向前跳过按钮分别使用“⏪”和“⏩”符号。

```python
         self.control_frame = ttk.Frame(self.root)
         self.control_frame.grid(row=0, column=1, padx=10, pady=10)
         self.control_frame.configure(border=1, relief="groove", borderwidth=2)
         self.bg_image3 =  tk.PhotoImage(file = os.path.join(os.getcwd(), "MusicPlayer/images", "control_bg.png"))
         self.bg_label3 = ttk.Label(self.control_frame, image=self.bg_image3)
         self.bg_label3.place(relx=0, rely=-0, relwidth=1, relheight=1)
         self.play_var = tk.StringVar()
         self.play_var.set("Play")
         self.play_pause_button = ttk.Button(self.control_frame, textvariable=self.play_var, command=self.play_pause)
         self.play_pause_button.grid(row=1, column=0, padx=10, pady=10)
         self.skip_backward_button = ttk.Button(self.control_frame, text="⏪", command=self.skip_backward)
         self.skip_backward_button.grid(row=2, column=0, padx=10, pady=10)
 ​
         self.skip_forward_button = ttk.Button(self.control_frame, text="⏩", command=self.skip_forward)
         self.skip_forward_button.grid(row=3, column=0, padx=10, pady=10)
```

在此步骤中，我们创建状态标签，它显示当前歌曲的状态和音量控制标签，它允许用户调整当前歌曲的音量。 音量控制由 Tkinter Scale 小部件表示，它采用 DoubleVar 变量并允许用户在 0 和 1 之间调整音量。
