使用Python创建GUI从歌曲中提取歌词
歌词是歌曲中唱出的用以传递歌曲意义和情感的文字。Python提供了多个库用于从歌曲中提取歌词。在本教程中,我们将使用Python的tkinter库创建一个图形用户界面(GUI),用于从歌曲中提取歌词。
在线可用的音乐有哪些不同格式?
音乐文件可用的格式取决于平台和文件类型,有多种不同的格式。其中最常见的几种格式是:
MP3(MPEG音频层3):这是音乐文件最常见的格式,它压缩音频数据并删除人耳无法听到的部分。MP3文件与大多数设备和平台兼容。
AAC(Advanced Audio Coding):这是一种比MP3更有效的格式,具有更好的音质和较小的文件大小。AAC文件通常由苹果公司的iTunes和其他苹果设备使用。
WAV(Waveform Audio File Format):这是一种无损格式,将音频数据以其原始的、未压缩的形式存储,因此文件大小较大。WAV文件通常由音乐行业的专业人士用于录制和混音。
FLAC(Free Lossless Audio Codec):这是一种高质量的无损格式,可以压缩音频数据而不会损失质量,因此文件大小比WAV文件更小。FLAC文件通常由音响迷和音乐爱好者使用,希望获得最佳音质。
OGG(Ogg Vorbis):这是一种开源、有损格式,类似于MP3和AAC,但具有更好的音质和较小的文件大小。OGG文件通常用于在线流式音乐。
WMA(Windows Media Audio):这是微软开发的专有格式,它类似于MP3和AAC,但与其他设备和平台的兼容性较差。
这些是在线可用的最常见的音乐格式,选择格式可能取决于平台、设备类型和所需音质等因素。
在音频文件方面,编码和解码分别是什么?
在音频文件方面,编码和解码是两个重要的概念,它们指的是将音频数据从一种格式转换为另一种格式的过程。
编码是将音频数据压缩到特定格式以减小文件大小,并使其更易于传输、存储和播放的过程。在编码过程中,音频数据被分析、处理并转换成可以作为文件存储的数字格式。最常见的音频编码格式包括MP3、AAC、FLAC和OGG等。
另一方面,解码是将编码的音频文件解压缩并转换回可播放的原始、未经压缩的形式的过程。在解码过程中,压缩的音频数据被解压缩并转换回可以通过扬声器或耳机播放的波形。
总之,编码和解码是数字音频文件创建和播放中涉及的两个关键过程。编码将音频数据压缩为存储格式,而解码则将压缩的音频文件转换回原始形式以供播放。
先决条件
在深入创建 GUI 的细节之前,您应该具备 Python 编程、面向对象编程(OOP)概念以及如何使用 Tkinter 模块的基本理解。
推荐设置清单
- pip install tkinter,Lyricsgenius 库
- 期望用户能够访问任何独立的 IDE,例如 VS-Code、PyCharm、Atom 或 Sublime text。
- 甚至在线 Python 编译器也可以使用,例如 Kaggle.com、Google Cloud platform 或其他任何编译器都可以。
- Python 的更新版本。本文写作时使用的是 3.10.9 版本。
- 知道如何使用 Jupyter Notebook。
- 知道和应用虚拟环境会有益,但不是必需的,也可以在某些情况下使用 API。
完成任务的步骤
让我们开始使用 tkinter 创建一个 GUI,以提取歌曲的歌词。创建一个 Python 文件并将其命名为 main.py。
第一步:导入必要的模块
from tkinter import *
from lyricsgenius import Genius
接下来,我们需要在 Python 脚本中导入必要的库。在这种情况下,我们需要使用 lyricsgenius 库来提取歌词,并使用 tkinter 库创建 GUI 接口。这是导入语句
第二步:创建 GUI 窗口
首先,我们使用 tkinter 库的 Tk() 函数创建一个新窗口。我们还使用 title() 和 geometry() 函数设置窗口的标题和尺寸。
window = tk.Tk()
window.title("Lyrics Extractor")
window.geometry("400x300")
第三步:为歌曲创建一个标签
接下来,我们使用 tkinter 的 Label() 和 Entry() 函数分别为歌曲名称创建一个标签和文本框。我们还创建了一个标签和文本框以获取艺术家名称。
song_label = tk.Label(window, text="Song Name:")
song_entry = tk.Entry(window)
artist_label = tk.Label(window, text="Artist:")
artist_entry = tk.Entry(window)
我们使用 pack() 函数将这些元素打包在窗口中。
song_label.pack()
song_entry.pack()
artist_label.pack()
artist_entry.pack()
第四步:创建按钮
我们还使用 Button() 函数创建一个提取歌词的按钮,并将其打包在窗口中。
extract_button = tk.Button(window, text="Extract Lyrics", command=extract_lyrics)
extract_button.pack()
最后,我们使用 Text() 函数创建一个用于显示歌词的文本框,并将其打包在窗口中。
lyrics_text = tk.Text(window)
lyrics_text.pack()
第五步:提取歌词
我们定义一个名为 extract_lyrics() 的函数,当用户单击“提取歌词”按钮时将被调用。此函数使用 get() 函数从文本框中检索歌曲名称和艺术家名称,使用 lyricsgenius 库创建 Genius 对象,并使用 search_song() 函数搜索歌曲。如果找到歌曲,则使用 insert() 函数在文本框中显示歌词。
def extract_lyrics():
# 从文本框中获取歌曲名称和艺术家名称
song = song_entry.get()
artist = artist_entry.get()
# 创建 Genius 对象并搜索歌曲
genius = Genius("YOUR_ACCESS_TOKEN_HERE")
song = genius.search_song(song, artist)
# 在文本框中显示歌词
if song is not None:
lyrics_text.delete(1.0, tk.END)
lyrics_text.insert(tk.END, song.lyrics)
else:
lyrics_text.delete(1.0, tk.END)
lyrics_text.insert(tk.END, "Lyrics not found.")
请注意,您需要获取 Genius 访问令牌才能使用此代码。您可以在 Genius 网站上创建一个帐户,并按照 lyricsgenius 库文档中的说明进行操作。
最终程序代码
import tkinter as tk
from lyricsgenius import Genius
def extract_lyrics():
# 从文本框获取歌曲名称和艺术家名称
song = song_entry.get()
artist = artist_entry.get()
# 创建 Genius 对象并搜索歌曲
genius = Genius("YOUR_ACCESS_TOKEN_HERE")
song = genius.search_song(song, artist)
# 在文本框中显示歌词
if song is not None:
lyrics_text.delete(1.0, tk.END)
lyrics_text.insert(tk.END, song.lyrics)
else:
lyrics_text.delete(1.0, tk.END)
lyrics_text.insert(tk.END, "没有找到歌词。")
# 创建新窗口
window = tk.Tk()
window.title("歌词提取器")
window.geometry("400x300")
# 添加歌曲名称标签
song_label = tk.Label(window, text="歌曲名称:")
song_label.pack()
# 添加歌曲名称文本框
song_entry = tk.Entry(window)
song_entry.pack()
# 添加艺术家名称标签
artist_label = tk.Label(window, text="艺术家姓名:")
artist_label.pack()
# 添加艺术家名称文本框
artist_entry = tk.Entry(window)
artist_entry.pack()
# 添加提取歌词的按钮
extract_button = tk.Button(window, text="提取歌词", command=extract_lyrics)
extract_button.pack()
# 添加用于显示歌词的文本框
lyrics_text = tk.Text(window)
lyrics_text.pack()
输出结果
如果找到了歌曲,则将歌词显示在文本框中。否则,将显示一条消息,指示未找到歌词。
请注意,您需要获取 Genius 访问令牌才能使用此代码。您可以在 Genius 网站上创建帐户,并按照 lyricsgenius 库文档中的说明进行操作。
结论
因此,我们发现上述代码提供了一个简单易用的 Python GUI,用于通过 lyricsgenius 库提取歌曲的歌词。用户可以在文本框中输入歌曲名称和艺术家名称,点击按钮提取歌词,并在文本框中查看歌词。