课程学习来自x风x 个人笔记整理 课程讲的不好,老师似乎代码都没搞清楚,讲些皮毛,主要是学一些新的表达和思路

一、基础知识补充
1.try的工作原理是:当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。

假如在读一个文件的时候,希望在无论异常发生与否的情况下都关闭文件,该怎么做呢?这可以使用finally块来完成。注意,在一个try块下,可以同时使用except从句和finally块。如果要同时使用它们的话,需要把一个嵌入另外一个。

2.glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list);该方法需要一个参数用来制定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),
其返回文件名只包括当前目录里的文件名,不包括子文件夹里的文件。
https://blog.csdn.net/qq_40196164/article/details/83067846

3.sys 和os 设置系统参数 https://blog.csdn.net/zengxiantao1994/article/details/58188527’’’

4.Python lower() 方法转换字符串中所有大写字符为小写。 语法 lower()方法语法: str.lower() 参数 无

5.集合(set) python的数据结构的另一种表现形式。 作用:自动清除集合类型中的元素重复数据(set),以及元素排序。 集合类型的元素排序是无序不重复。

6.python zip
https://www.cnblogs.com/wdz1226/p/10181354.html

7.glob.glob
glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list)
该方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。
https://blog.csdn.net/qq_17753903/article/details/82180227

8.map函数
https://www.runoob.com/python/python-func-map.html

9.Numpy知识点补充:np.vstack()&np.hstack()
https://www.jianshu.com/p/2469e0e2a1cf

10.通俗理解OvO与OvR
https://blog.csdn.net/alw_123/article/details/98869193

11.isinstance
https://www.runoob.com/python/python-func-isinstance.html

12.SVM是Support Vector Machines(支持向量机)的缩写,可以用来做分类和回归。SVC是SVM的一种Type,是用来的做分类的,SVR是SVM的另一种Type,是用来的做回归的。
https://blog.csdn.net/u012331016/article/details/45223135

13.Python 字典(Dictionary) get()方法
https://www.runoob.com/python/att-dictionary-get.html

14.在做模型训练的时候,尤其是在训练集上做交叉验证,通常想要将模型保存下来,然后放到独立的测试集上测试,下面介绍的是Python中训练模型的保存和再使用。
scikit-learn已经有了模型持久化的操作,导入joblib即可

https://blog.csdn.net/helloxiaozhe/article/details/80658438

二、代码part

'''
代码热身
没有的话需要安装
pip install pydub
pip install python_speech_features
'''from pydub.audio_segment import AudioSegment  #切割
from scipy.io import wavfile  #mp3是压缩过后的音乐 失掉很多特征
from python_speech_features.base import mfcc
import pandas as pd
import numpy as npsong=AudioSegment.from_file("./cccc/abc.MP3",format="mp3")
song.export("./cccc/abc.wav",format="wav")
rate,data=wavefile.read("./cccc/abc.wav")
#print(data)
#print(rate)#mfcc包含了傅里叶变换  和 梅尔倒谱系数
mf_feat=mfcc(data,rate,numcep=13,nfft=2048)
#13是维度 nfft是傅里叶转化时候的速率
#print(mf_feat)#打印出来是一个13维的向量mm=np.mean(mf_feat,axis=0) #降维处理1*13
mf=np.transpose(mm)
mc.cov(mf)#我不需要行和行,要的是列之间的 关系 转置之后看result=mmfor k in range(len(mm)):result=np.append(result,np.diag(mc,k))
print(result)

features

#feature  老师用的python3 因为起名可以用中文...
import pandas as pd
import numpy as np
import glob
from pydub.audio_segment import AudioSegment
from scipy.io import wavfile
from python_speech_features.base import mfcc
import os
import sys
import time#def 获取歌单(): 我看着难受...
def getMusicMenu():data=pd.read_csv(./ccc)data=data[["name","tag"]] #标签使csv文件中已经打好标签了清新摇滚。。return datadef getMusicFeatures(file):items=file.split(",")file.format=items[-1].lower()file_name=file[:-len(file.format)+1)]if file_format!="wav":#把mp3格式的文件转化为wav,保存至原文件夹song=AudioSegment.from_file(file,format="mp3")file=file_name+".wav"  #我怎么记的这个不合适song.export(file,format="wav")#提取wav格式歌曲特征 try:rate,data=wavefile.read(file)mfcc_feas=mfcc(data,rate,numcep=13,nfft=2048)#卷积的算法降维mm=np.transpose(mffc_feas)mc=np.cov(mm)result=mcfor i in range(mm.shape[0]):result=np.append(result,np.diag(mc,i))return resultexcept Exception as msg:   #为了报错不影响往下进行print(msg)def reatureExtraction():df= getMusicMenu()name_label_list=np.array(df).tolist()name_label_dict=dict(map(lambda t:(t[0],t[1]),name_label_list))labels=set(ame_label_dict.values())#不要忘了.values()label_index_dict=dict(zip(labels,np.arrange(len(labels))))all_music_files=glob.glob(歌曲路径)all_music_files.sort()loop_count=0flag=Trueall _mfcc=np.array([])for file_name in all_music_files:print("开始处理"+file_name.replace("\xa0",""))#xa0  https://blog.csdn.net/clovejava/article/details/89511172#因为是文件夹下 music\下面的 music_name=file_name.split("\\")[-1].split(".")[-2].split("-")[-1]music_name=music_name.strip()if music_name in name_label_dict:label_index=label_index_dict[name_label_dict[music_name]]ff=getMusicFeatures(file_name)ff=np.append(ff,label_index)if flag:all_mfcc=ffflag=Flaseelse:print("无法处理"+file_name.replace("\xa0","")+",找不到对应的lable")print(looping----%d" % loop_count)print(all_mfcc.shape:",end="")print(all_mfcc.shape)loop_count+=1label_index_list=[]for k in label_index_dict:label_index_list.append([k,label_index_dict[k])pd.DataFrame(label_index_list).to_csv(数值化标签路径,header=None,\index=False,encoding="utf-8")pd.DataFrame(all_mfcc).to_csv(歌曲特征文件存放路径,header=None,\index=False,encoding="utf-8")return all_mfccif __name__="main":歌曲路径="./data/music_info.csv"歌曲源路径"./data/music/*.mp3"数值化标签路径="./data/music_index_label.csv"歌曲特征文件存放路径="./data/music_features.csv"start=time.time()reatureExtraction()end=time.time()print("总耗时%.2f秒%(end-start))```bash
#acc 是老师自己写的  预测值和真实值的差异
def get(res,tes):n=len(res)truth=(res==tes)pre=0for flag in truth:if flag:pre+=1return (pre*100)/n
from sklearn import svm
from sklearn.utils import shuffle  #打乱,再训练,洗牌
from sklearn.model_selection import GridSearchCV,train_test_split
#网格交叉验证是调参的,交叉验证是评估模型
from sklearn.externals import joblib
import pandas as pd
import numpy as np
import acc  #自己写的
import sys
import time#选取最优的核函数 rbf高斯核函数  linear 是独立的  poly有互相交叉相乘  半正定
def internal_cross_validation(X,Y):parameters={“kernel":("linear","rbf","poly"),"c":[0.1,1]  #松弛因子,泛化能力"probability":[True,False],“decision_function_shape":["ovo","ovr"]}clf=GridSearchCV(svm.SVC(random_state=0),param_grid=parameters,cv=5)print(begining...)clf.fit(X,Y)print("best parameter= ",end="")print(clf.best_params_)print("best accuracy= ",end="")print(clf.best_score_)def cross_validation(music_csv_file_path=None,data_percentage=0.7):if not music_csv_file_path:music_csv_file_path=   歌曲特征文件存放路径print("begining read data"+music_csv_file_path)data=pd.read_csv(music_csv_file_path,sep=",",header=None,ending="utf-8")sample_fact=0.7  #感觉他这个写错了if isinstance(data_percetage,float) and 0<data_percentage<1:sample_fact=data_percentagedata=data.sample(frac=sample_fact).TX=data[:-1].T  #忘了他不包含右边界了Y=np.array(data[-1:])[0]#print(X)#print(Y)   internal_cross_validation(X,Y)def poly_model(X,Y):#进行魔性训练,并且计算训练集上预测值与label的准确性clf=svm.SVC(kernel="poly",C=0.1,probability=True,decision_function_shape="ovo",random_state=0)   clf.fit(X,Y)res=clf.predict(X)restrain=acc.get(res,Y)return clf,restraindef trainModels(train_percentage=0.7,fold=1,music_csv_file_path=None,model_out_f=None)if not music_csv_file_path:music_csv_file_path=歌曲特征文件存放路径data=pd.read_csv(music_csv_file_path,sep=",",header=None, encoding="utf-8")max_train_score=Nonemax_test_score=Nonemax_source=Nonebest_clf=Noneflag=Truefor index in range(1,int(fold)+1):print(index)shuffle_data=shuffle(data)X=shuffle_data.T[:1].TY=np.array(shuffle_data.T[-1])[0]X_train,X_test,Y_train,Y_test=train_test_split(X,Y,train_size=0.3, random_state=0)(clf,train_source)=poly_model(X_train,Y_train)y_predict=clf.predict(x_test)test_source=acc.get(y_predict,y_test)#测试集的准确率source=0.35*train_source+0.65*test_source #模型综合准确率if flag:max_source=sourcemax_train_source=train_sourcemax_test_source=test_sourcebest_clf=clf          flag=False else:if max_source<source:max_source=sourcemax_train_source=train_sourcemax_test_source=test_sourcebest_clf=clfprint("第%d次训练,训练集上的正确率为:%.2f,测试集上的正确率为:%.2f,加权平均正确率为:%.2f"%(train_source,test_source,source)print("最优训练模型,训练集上的正确率为:%.2f,测试集上的正确率为:%.2f,加权平均正确率为:%.2f"%(max_train_source,max_test_source,max_source) print("最优模型是:")print(best_clf)if not model_out_f:model_out_f=模型保存路径joblib.dump(best_clf,model_out_f)       if __name__="__main__":print("="*30+" begining searching the most suitable model..." "+"+"*30#打印30个等号 start=time.time()cross_validation(music_csv_file_path=None,data_percentage=0.7)end=time.time()print("cost time%.2f" %(end-start))#sys.exit(0)print("="*30+" begining searching the most suitable model..." +"+"*30)start=time.time()trainModels(train_percentage=0.7,fold=1000,music_csv_file_path=None,model_out_f=None)end=time.time()print("cost time%.2f" %(end-start))
#svm main
import feature
import pandas as pd
import numpy as np
from sklearn.externals import joblib
import sys
import time数值化路径="./data/xx.csv"
def load_model(model_f=None):if not model_f:model_f=模型保存路径clf=joblib.load(model_f):return clfdef 歌曲标签数值化(): #fetch_index_label#从文件中读取index和label之间的映射关系,并返回dictdata=pd.read_csv(数值化路径,header=None,encoding="utf-8")name_label_list=np.array(data).tolist()index_label_dict=dict(map(lambda t:(t[1],t[0],name_label_list))return index_label_dict
index_label_dict=歌曲标签数值化()def predict_labels(clf,X):label_index=clf.predict([x])#win7没有方括号跑不了label=index_label_dict[label_index[0]]return labelif __name__=="__main__":数值化标签路径="./data/xx.csv"模型保存路径=“./data/music_model.pkl"clf=load_model()parh=music_feature=feature.获取歌曲特征label=predict_labels(clf,music_feature)print("预测标签为:%s"%label)

音乐系统文件分类 双声道相关推荐

  1. Python Train_使用隐马尔可夫模型进行音乐流派分类的Python实现

    音乐类型分类一直是音乐信息检索领域研究的热点问题.在本教程中,我们将尝试使用隐马尔可夫模型对音乐类型进行分类,隐马尔可夫模型非常擅长对时间序列数据进行建模.由于音乐音频文件是时间序列信号,我们希望HM ...

  2. 单声道数据转双声道_单声道转双声道方法

    单声道转双声道方法 前段时间有个朋友问我如何可以将一个音频文件的单声道转换为双声道 [音频文件右键查看 属性 → 摘要 → 音频 → 频道( 1. 单声道 2. 立体声) ] ,于是我推荐他用 Gol ...

  3. matlab双声道转单声道,单声道和双声道的区别是什么

    区别:1.单声道是指一个声音的通道:双声道是指有两个声音的通道.2.单声道是把来自不同方位的音频信号混合后统一由录音器材把它记录下来,再由一个扬声器进行重放:双声道是在空间放置两个互成一定角度的扬声器 ...

  4. Audition Au制作左右双声道以及导出

    录制/导入音频 按照 怎么用AU制作双声道音乐 - 百度经验 教程录制或导入成两轨音频. 把音轨高度调高一点,就能看到蓝色的声相线,可以上下拖动,一个音轨往上拖,一个往下拖,效果就是左右双声道.也可以 ...

  5. 基于 Python 的音乐流派分类

    音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否.我们喜欢说"you are what you stream" - Spotify Spotify 拥有 ...

  6. 录音技术:从单声道到双声道

    2019独角兽企业重金招聘Python工程师标准>>> 1877年,美国著名发明家托马斯•爱迪生发明了留声机的最初形式--滚筒式留声机,由此,人类进入了单声道的录音时代.声道,顾名思 ...

  7. pcm 8k单声道和双声道采样_音频接口PCM

    1 简介 PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法.图 1为 4 bit 采样深度的PCM 数据量化示意图.PCM 数字音频 ...

  8. java 双声道音频_Android 播放音频如何实现双声道效果

    1 使用场景 Android 无法直接采集双声道,用户如果想实现播放的音频具有双声道效果,可以参考本文. 2 实现流程 双声道效果实现的主流程为: 下文将分别讲述各个步骤. 2.1 输入双声道数据 主 ...

  9. 基于Adaboost的音乐情绪分类算法

    基于Adaboost的音乐情绪分类算法-2015实习设计总结 ========================================= 基于Adaboost的音乐情绪分类算法-2015实习设 ...

最新文章

  1. python numpy使用
  2. linux学习笔记 2013-09-02
  3. wget的url获取方式
  4. python用numpy和pil处理图像成灰度图_「火炉炼AI」机器学习047-图像的直方图均衡化操作...
  5. springboot Serving Web Content with Spring MVC
  6. GARFIELD@04-14-2005
  7. U9在SQL Server上的性能优化经验(转述) — 之 行版本快照
  8. hdu 5748(LIS) Bellovin
  9. 社会计算经典谈——书籍销量预测
  10. mysql order by 排序技巧
  11. 第二人生的源码分析(十九)人物组合显示
  12. 华为防火墙反病毒(个人思绪总结)
  13. Linux内核4.1在file_operations的read_iter和write_iter
  14. 计算机二级教程书pdf MS,全国计算机等级考试二级教程MS Office高级应用教学大纲4.pdf...
  15. 参考文献怎么找?3分钟找到1000篇论文参考文献!
  16. 解决安装程序无法初始化。请下载Adobe
  17. 如何清除浏览器缓存?
  18. 微信公众号config:invalid signature签名失效
  19. error #18 expected a “)”和error #140 too many arguments in function call
  20. 开源神器:微信真人头像卡通化!

热门文章

  1. zset 怎么get_Redis之ZSet命令
  2. sql语句查询指定年月的数据
  3. 计算机网络(十一)——导论与路由器工作原理
  4. 使用Vim 对文本多行指定列的字符删除,替换
  5. c语言中分号作用,c语言中的语句之间必须用分号作为分隔符吗?_后端开发
  6. 黑马程序员---c语言 通讯录的实现
  7. Openstack 多节点的企业私有云平台搭建
  8. hyperv服务器有几台虚拟机,Hyper-V差异盘和母盘创建多个虚拟机的使用
  9. npm安装appium
  10. 自考计算机网络工程本科考哪些科,自考网络工程本科考试科目有哪些