标签归档:Python 音乐

Python 一个漂亮的音乐节奏可视化方案

相信很多人都有这样的疑问:如何用Python音乐的节奏可视化出来?我曾有过一篇文章:Python 提取音乐频谱并可视化,也不过是浅尝辄止,没有完成精美的可视化,只是将频谱用折线图进行了可视化

国外有个网友(u/avirzayev)分享了他的可视化方案。上方的视频就是用他的方案可视化Tattoo.mp3得到的结果,大家可以欣赏一下。

这份代码确实有效地跟上了音乐的节奏,如果能加强可视化效果,丰富颜色,是一份非常好的可视化代码。

下面给大家介绍一下怎么使用这份代码:

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上噢,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda

Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),准备开始输入命令安装依赖。

当然,我更推荐大家用vscode编辑器,把本文代码Copy下来,在编辑器下方的终端运行命令安装依赖模块,多舒服的一件事啊:Python 编程的最好搭档—VSCode 详细指南。

在终端输入以下命令安装我们所需要的依赖模块:

pip install matplotlib
pip install librosa
pip install numpy
pip install pygame

看到 Successfully installed xxx 则说明安装成功。

当然,还有作者的源代码,请在 Python实用宝典 公众号后台回复:【音乐可视化】获取

2.代码调整

代码架构分为两个部分,一个是用于计算频谱的 AudioAnalyzer.py,一个用于渲染生成动态视频的 mAIn.py.

这个“动态视频”是基于pygame实现的,部分代码如下:

作者的代码风格随意,不过仔细阅读还是能读懂大概的。

首先,通过pygame加载(load)音乐文件并播放(play).

然后,通过while循环和ticks对画面中的图像进行实时渲染。

渲染的代码比较长,就是一些计算柱体长度的过程,这里就不赘述了,有兴趣的同学可以开源代码。

如果你想要将你的音乐用这份代码进行可视化,仅需要修改mAIn.py的第5行代码:

这个filename可以是当前运行Python的路径下的音乐文件名称,也可以是音乐文件的绝对路径。

如果你想优化生成的动态图像的颜色,可以修改rnd_color函数,该函数控制图形颜色的变化:

如果你想修改生成的动态图像的形状,比如说去掉中间那个圆,仅需要这么改:

pygame.draw.circle(screen, circle_color, (circleX, circleY), int(radius))

将radius直接设为0,或者直接将这行代码注释掉即可:

pygame.draw.circle(screen, circle_color, (circleX, circleY), 0)

效果:

如果你熟悉pygame的相关函数,可以对这份可视化的代码做更多的DIY,比如说将其展平到平面上,用一条条柱体来展示,像网易云音乐一样:

尽管不可能做得像真正的产品那样好看,不过大家可以先试试,这份代码我就留着下次再展示吧。

如果有遇到不懂的,请在公众号后台回复:加群,加入互助群。记得备注相应的验证信息我才会通过哦。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!


Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 多种音乐格式转换(批量)实战教程

Pydub是一个基于ffmpeg的Python音频处理模块,封装了许多ffmpeg底层接口,因此用它来做音乐歌曲文件格式转换会非常方便,如果你阅读过我们之前的文章:Python 超方便超快速剪辑音乐 你就知道它有多么强大了。

今天给大家介绍它的音乐文件格式转换功能,几乎支持所有音乐音频格式,非常强大。

1.安装

安装Pydub前需要先安装ffmpeg:

Mac (打开终端(Terminal), 用 homebrew 安装):

brew install ffmpeg --with-libvorbis --with-sdl2 --with-theora

Linux:

apt-get install ffmpeg libavcodec-extra

Windows:

1. 进入 http://ffmpeg.org/download.html#build-windows,点击 windows 对应的图标,进入下载界面点击 download 下载按钮,
2. 解压下载好的zip文件到指定目录
3. 将解压后的文件目录中 bin 目录(包含 ffmpeg.exe )添加进 path 环境变量中

上述ffmpeg安装成功后就可以打开命令提示符(cmd),安装pydub:

pip install pydub

1.mp3转wav或其他格式

将单个mp3音频文件转化为wav音频格式:

from pydub import AudioSegment
def trans_mp3_to_wav(filepath):
    """
    将mp3文件转化为wav格式

    Args:
        filepath (str): 文件路径
    """
    song = AudioSegment.from_mp3(filepath)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.wav", format="wav")

可以继续封装该函数,将单个mp3文件转化为任意其他音乐音频格式:

from pydub import AudioSegment
def trans_mp3_to_any_audio(filepath, audio_type):
    """
    将mp3文件转化为任意音频文件格式

    Args:
        filepath (str): 文件路径
        audio_type(str): 文件格式
    """

    song = AudioSegment.from_mp3(filepath)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.{audio_type}", format=f"{audio_type}")

如ogg格式:

trans_mp3_to_any_audio("Alone.mp3", "ogg")

只要是ffmpeg支持的音乐音频格式,它都可以转换,支持的格式长达几十个,我简单列一些:

wavavimp4flv
oggflacapemp2
aiffvocau

2.更加通用的转换函数

刚刚是mp3转任意音频格式,我希望把它写成任意音频格式转任意音频格式:

from pydub import AudioSegment
def trans_any_audio_types(filepath, input_audio_type, output_audio_type):
    """
    将任意音频文件格式转化为任意音频文件格式

    Args:
        filepath (str): 文件路径
        input_audio_type(str): 输入音频文件格式
        output_audio_type(str): 输出音频文件格式
    """

    song = AudioSegment.from_file(filepath, input_audio_type)
    filename = filepath.split(".")[0]
    song.export(f"{filename}.{output_audio_type}", format=f"{output_audio_type}")

比如将ogg音乐音频格式转化为flv音乐音频格式:

trans_any_audio_types("Alone.ogg", "ogg", "flv")

或者MP4格式,总之,一般而言你需要的格式它都能满足。

trans_any_audio_types("Alone.ogg", "ogg", "mp4")

3.批量转化音频格式

现在,尝试将一个文件夹下的所有非mp3音频格式的文件转化为mp3音频格式:

def trans_all_file(files_path, target="mp3"):
    """
    批量转化音频音乐格式

    Args:
        files_path (str): 文件夹路径
        target (str, optional): 目标音乐格式. Defaults to "mp3".
    """

    for filepath in os.listdir(files_path):
        # 路径处理
        modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
        datapath = os.path.join(modpath, files_path + filepath)

        # 分割为文件名字和后缀并载入文件
        input_audio = os.path.splitext(datapath)
        song = AudioSegment.from_file(datapath, input_audio[-1].split(".")[-1])

        # 导出
        song.export(f"{input_audio[0]}.{target}", format=target)

只要输入文件夹名称,即可全部转化该文件夹下的音乐文件格式为mp3格式:

trans_all_file("F:\\push\\20200607\\music\\")

我们的文章到此就结束啦,如果你喜欢我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

Python 将网易云歌单迁移到QQ音乐

最近,网易云音乐越来越多的歌曲变灰了,许多我以前喜欢听的音乐都消失在云端,非常可惜。最近我还是想听回以前的歌曲,于是只能使用有那些歌曲版权的QQ音乐,麻烦的是,QQ音乐没有我在网易云音乐的歌单,两个软件之间互相切歌也是在太麻烦了。

上网摸索了一段时间,终于找到一个基于Python的开源项目 Denon/syncPlaylist 这是一个使用爬虫技术搭建的两端同步软件,它可以从网易同步歌单到QQ音乐,也可以从QQ音乐同步歌单到网易云音乐,非常方便。

想要实现这样的同步功能,一般都需要提供账号密码,普通软件让人恨不放心,因为你不知道它会不会把你的账号密码上传到软件作者自己的服务器,从而窃取你的账号。但使用这个项目你就不需要有这个困扰,因为它是开源项目,源代码全透明公开,不存在上传账号密码的操作。下面我们直接基于项目的Python源代码进行迁移操作。

1.下载源代码

你可以在项目的原网站点击 Clone or download—Download zip 下载完整源代码。

如果网络不允许,没关系,关注文章最下方的Python实用宝典公众号,后台回复 网易QQ音乐迁移 即可获得完整源代码。

2.安全检查

为了让大家放心使用作者的源代码,我们要对他的代码进行简单的分析,确保没有任何的请求发送账号密码到任何除网易和QQ之外的服务器中。

检索源代码中所有的url,看看有没有非qq或者网易的域名:

发现了一个陌生域名,不过没关系,这个是作者放着用来下载phantomjs的链接,phantomjs是一个用于爬虫的无头浏览器,没有安全威胁。

这是作者用于QQ登录的逻辑(真的是一行注释都不写啊我X),看了XPATH,和现在的QQ官网依然对应正确,登录逻辑没有太大的问题。

再仔细瞧瞧其他的py文件,如果看到了任何奇怪的东西都要注意。我扫了一遍,非常安全,如果你不信的话可以自己多看看几遍。

3.迁移歌曲

接下来,我们基于这个项目的源代码演示如何将网易云音乐的歌曲迁移到QQ音乐上。注意,你得确保你的电脑已经安装了Python的运行环境,如果没有的话推荐阅读这篇文章(由于该项目用的是Python2,推荐安装anaconda,能够在Python2和Python3之间创建环境自由切换):
https://blog.csdn.net/ITLearnHall/article/details/81708148

3.1 配置账号

在 config.json[account, password] 添加qq账户(account) 和 密码(password)

3.2 找到你想要移植的歌单

比如我想移植我喜欢的音乐:

然后输入到config.json中:

3.3 找到你想传入的QQ歌单

比如我想放到QQ的“我喜欢”歌单:

没错,这要先进入QQ音乐官网登录后,找到我的音乐——点击“我喜欢 ” ,才能拿到歌单地址,和刚刚一样,放入config.json的目标歌单中:

3.4 开始迁移

然后在当前文件夹中打开终端(windows: win+R 输入CMD; macOS: command+空格 输入终端):

首先安装依赖,以下命令会自动安装 requirements.txt 中的依赖:

pip install -r requirements.txt

然后运行命令:

python run.py

等待后即可完成音乐的迁移。

在这个过程中,由于大家的环境都不一样,你们可能会遇到各种各样的问题,如果有问题,欢迎在下方留言区留言,我们都会耐心解答的!

我们的文章到此就结束啦,如果你希望我们今天的Python 教程,请持续关注我们,如果对你有帮助,麻烦在下面点一个赞/在看哦有任何问题都可以在下方留言区留言,我们都会耐心解答的!

音乐相关教程:

Python 批量下载网易云音乐歌单

Python 制作音乐高潮副歌提取器

Python Django快速开发音乐高潮提取网(1)

Python Django快速开发音乐高潮提取网(2)

Python Django快速开发音乐高潮提取网(3)

Python 超方便超快速剪辑音乐

Python 提取音乐频谱并可视化


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典