如果DLF Nova广播流播放音乐,则切换到Spotify。

dlf-nova-play-my-own-music的Python项目详细描述


AlxndrJhn

DLF Nova播放我自己的音乐

DLF novaplaylist只有几个小时长,如果你听得足够长的话,会导致很多重复。这有点烦人,因为新闻很有趣。 所以我编写了一个脚本来检测音乐/新闻,并在收音机的音乐部分切换到spotify。在

这个项目正在进行中,我想让它更容易使用。在

要求

开始吧

  1. 要使用Spotify API,需要client id和{},可以创建here
    1. 在您的环境中保存SPOTIPY_CLIENT_ID(示例1a2ef9787cc1638261545d6dadb2315
    2. 在您的环境中保存SPOTIPY_CLIENT_SECRET(示例2c12e5161ace0476c8f2abc70a924ac76
  2. 找到您的spotify用户名并将其插入spotify_username中的online_prototype.py
  3. 使用pip install DLF-Nova-Play-My-Own-Music安装
  4. 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设备和在线广播流之间切换。在

数据集

数据集包括:

为了分割训练(80%)和测试(20%)数据集,文件在分割成块之前被随机分开。 mp3文件以44100Hz的频率分成10s块(无重叠)。 每个块都被转换为特征向量,使得数据集文件相对较小。在

输入向量/特征

基于这个this medium article和{a12},我选择了三个特性:MFCC(与语音/音乐分离有关,来自librosa)、GFCC(通常用于说话人识别,来自spafe)和{}(与音乐中的节拍检测有关,来自{a13})。结果是一个256维的向量。在

^{pr2}$

其中audio始终是采样率为44100Hz的10秒音频块。在

深度学习模式

我使用了来自this medium articleKeras模型

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

托多

  1. 为更少的切换错误训练更好的模型
  2. 在切换事件中减弱声音

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动