如果DLF Nova广播流播放音乐,则切换到Spotify。
dlf-nova-play-my-own-music的Python项目详细描述
DLF Nova播放我自己的音乐
DLF novaplaylist只有几个小时长,如果你听得足够长的话,会导致很多重复。这有点烦人,因为新闻很有趣。 所以我编写了一个脚本来检测音乐/新闻,并在收音机的音乐部分切换到spotify。在
这个项目正在进行中,我想让它更容易使用。在
要求
- VLChttps://www.videolan.org/vlc/
- spotify帐户https://www.spotify.com
- spotify客户端ID:https://developer.spotify.com/dashboard/applications
- python 3.7
开始吧
- 要使用Spotify API,需要
client id
和{},可以创建here - 在您的环境中保存
SPOTIPY_CLIENT_ID
(示例1a2ef9787cc1638261545d6dadb2315
) - 在您的环境中保存
SPOTIPY_CLIENT_SECRET
(示例2c12e5161ace0476c8f2abc70a924ac76
)
- 在您的环境中保存
- 找到您的spotify用户名并将其插入
spotify_username
中的online_prototype.py
- 使用
pip install DLF-Nova-Play-My-Own-Music
安装 dlfnova -su my.spotifyusername
开始
在一些设置消息之后,它应该生成这样的日志
19:20:34: Class: music, prob.: 96%, filtered signal: 0%, AI performance: 3.3Hz
19:20:36: Class: music, prob.: 66%, filtered signal: 0%, AI performance: 3.5Hz
19:20:39: Class: news, prob.: 84%, filtered signal: 70%, AI performance: 3.3Hz
19:20:42: Class: news, prob.: 99%, filtered signal: 91%, AI performance: 3.3Hz switch to radio
[00000282eb2c49d0] prefetch stream error: unimplemented query (264) in control
19:20:44: Class: news, prob.: 100%, filtered signal: 97%, AI performance: 2.8Hz
19:20:47: Class: news, prob.: 100%, filtered signal: 99%, AI performance: 3.4Hz
19:20:49: Class: news, prob.: 100%, filtered signal: 100%, AI performance: 3.3Hz
技术细节
我训练了一个简单的深度学习模型,将一个音频单曲分类为“音乐”或“新闻”,使用这种分类,我可以在spotify设备和在线广播流之间切换。在
数据集
数据集包括:
- 来自https://www.deutschlandfunknova.de/podcasts的500MB DLF nova播客
- the DLF nova spotify playlist使用spotdl
- 流块
为了分割训练(80%)和测试(20%)数据集,文件在分割成块之前被随机分开。 mp3文件以44100Hz的频率分成10s块(无重叠)。 每个块都被转换为特征向量,使得数据集文件相对较小。在
输入向量/特征
基于这个this medium article和{a12},我选择了三个特性:MFCC
(与语音/音乐分离有关,来自librosa)、GFCC
(通常用于说话人识别,来自spafe)和{
其中audio
始终是采样率为44100Hz的10秒音频块。在
深度学习模式
我使用了来自this medium article的Keras模型
model=Sequential()model.add(Dense(256,input_shape=(input_size,)))model.add(Activation("relu"))model.add(Dropout(0.5))model.add(Dense(256))model.add(Activation("relu"))model.add(Dropout(0.5))model.add(Dense(num_labels))model.add(Activation("softmax"))model.compile(loss="categorical_crossentropy",metrics=["accuracy"],optimizer="adam")
其中input_size
是256。在
它训练了100个周期,默认学习率,批大小256,以最小的验证损失节省了权重。在
性能
在训练过程中达到了99.8%的准确率,验证集的准确率为98%。在
切换
脚本online_prototype.py
通过spotifyapi注册,并请求OAUTH权限查看设备并修改播放器状态。它以40kB的块下载DLF流,每2到3秒输出一个分类。这个信号经过平滑处理后会触发切换事件。无线电通过VLC传输。在
已知问题
- 由于模式简单,有些歌曲有时被归类为新闻。尤其是说唱。新闻有时也有节奏感。在
[00000282eb2c49d0] prefetch stream error: ...
日志,它们来自VLC
托多
- 为更少的切换错误训练更好的模型
- 在切换事件中减弱声音
- 项目
标签: