基于 Python 的音乐流派分类
音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否。我们喜欢说“you are what you stream” - Spotify
Spotify 拥有 260 亿美元的净资产,是如今很受欢迎的音乐流媒体平台。它目前在其数据库中拥有数百万首歌曲,并声称拥有适合所有人的乐谱。Spotify 的 Discover Weekly 服务已成为千禧一代的热门话题。毋庸置疑,Spotify 已投入大量研究来改进用户查找和收听音乐的方式。机器学习是他们研究的核心,从 NLP 到协同过滤再到深度学习。根据歌曲的数字签名对一些因素进行分析,包括节奏、曲调、力度、可跳舞性等,以回答那个不可能的古老的第一次约会问题:你喜欢什么样的音乐?
公司现在使用音乐分类,要么能够向他们的客户推荐(例如 Spotify、Soundcloud),要么只是作为一种产品(例如 Shazam)。确定音乐流派是朝着这个方向迈出的第一步。机器学习技术已被证明在从大型数据池中提取趋势和模式方面非常成功。同样的原则也适用于音乐分析。
在本文中,我们将研究如何使用 Python 分析音频/音乐信号。然后,我们将利用学到的技能将音乐片段分类为不同的流派。
使用 Python 进行音频处理
声音以具有频率、频宽、分贝等参数的音频信号形式表示。典型的音频信号可以表示为振幅和时间的函数。
这些声音有多种格式,使计算机可以读取和分析它们。比如:
-
mp3格式
-
WMA(Windows 媒体音频)格式
-
wav(波形音频文件)格式
音频库
Python 有一些很棒的音频处理库,例如 Librosa 和 PyAudio。还有用于一些基本音频功能的内置模块。
我们将主要使用两个库进行音频采集和播放:
1. Librosa
它是一个 Python 第三方库,用于分析一般的音频信号,但更适合音乐。它包括构建 MIR(音乐信息检索)系统的具体细节。它有很好的文档记录,还有很多示例和教程。
安装
pip install librosa``or``conda install -c conda-forge librosa
如果想要更多音频解码能力,您可以安装 FFmpeg,它附带许多音频解码器。
2.IPython.display.Audio
IPython.display.Audio 可让您直接在 jupyter notebook 中播放音频。
加载音频文件
import librosa``audio_path = '../`` ``T08-violin.wav'``x , sr = librosa.load(audio_path)print(type(x), type(sr))``<class 'numpy.ndarray'> <class 'int'>print(x.shape, sr)``(396688,) 22050
这将返回一个音频时间序列作为一个 numpy 数组,默认采样率为 22KHZ 单声道。我们可以通过以下语句进行修改:
librosa.load(audio_path, sr=44100)
将采样率设置为 44.1KHz
librosa.load(audio_path, sr=None)
禁用重采样功能
采样率是每秒传输的音频样本数,以 Hz 或 kHz 为单位。
播放音频
使用 IPython.display.Audio 播放音频
import IPython.display as ipd``ipd.Audio(audio_path)
这会在 jupyter notebook 中返回一个音频小部件,如下所示:
音频小部件的屏幕截图
这个小部件在这里不起作用,但它会在你的笔记本上起作用。有兴趣的话,可以通过下述链接查看:https://soundcloud.com/parul-pandey-323138580/t08-violin?utm_source=cdn.embedly.com&utm_campaign=wtshare&utm_medium=widget&utm_content=https%253A%252F%252Fsoundcloud.com%252Fparul-pandey-323138580%252Ft08-violin
您甚至可以为音频示例使用 mp3 或 WMA 格式。
可视化音频
波形
我们可以使用 librosa.display.waveplot 绘制音频:
%matplotlib inlineimport matplotlib.pyplot as plt
import librosa.displayplt.figure(figsize=(14, 5))
librosa.display.waveplot(x, sr=sr)
Spectrogram
Spectrogram是声音或其他信号随时间变化的频率频谱的直观表示。频谱图有时称为声谱图、声纹或语音图。当数据以 3D 图表表示时,它们可能被称为瀑布图。在二维数组中,第一个轴是频率,第二个轴是时间。
我们可以使用 librosa.display.specshow 显示频谱图。
X = librosa.stft(x)Xdb = librosa.amplitude_to_db(abs(X))
plt.figure(figsize=(14, 5))librosa.display.specshow(Xdb, sr=sr, x_axis='time', y_axis='hz')
plt.colorbar()
垂直轴显示频率(从 0 到 10kHz),水平轴显示剪辑的时间。由于所有动作都发生在频谱底部,我们可以将频率轴转换为对数轴。
librosa.display.specshow(Xdb, sr=sr, x_axis=‘time’, y_axis=‘log’)``plt.colorbar()
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKwovykARab9tojVQXNccCrPGn4pNI9CMPXNflyxUib2eSheaibqHVxXBA/640?wx_fmt=png)**写入音频文件**
librosa.output.write_wav 可以将 NumPy 数组保存到 WAV 文件。
librosa.output.write_wav(‘example.wav’, x, sr)
创建音频信号
现在让我们创建一个 220Hz 的音频信号。音频信号可以是一个 numpy 数组,因此我们将创建一个数组并将其传递给音频函数。
import numpy as npsr = 22050 # sample rate
T = 5.0 # secondst = np.linspace(0, T, int(T*sr), endpoint=False) # time variable
x = 0.5np.sin(2np.pi220t)# pure sine wave at 220 HzPlaying the audio
ipd.Audio(x, rate=sr) # load a NumPy arraySaving the audio``librosa.output.write_wav(‘tone_220.wav’, x, sr)
所以,此处我们便创建好了第一个声音信号。
特征提取
每个音频信号都包含许多特征。但是,我们必须提取与我们要解决的问题相关的特征。提取特征以将其用于分析的过程称为特征提取。让我们详细研究一些功能。
Zero-Crossing Rate
Zero-Crossing Rate 是符号随信号变化的速率,即信号从正变为负或反向的速率。此功能已大量用于语音识别和音乐信息检索。对于金属和摇滚中的高打击乐声音,它通常具有更高的值。
Load the signalx, sr = librosa.load('../T08-violin.wav')
#Plot the signal:plt.figure(figsize=(14, 5))
librosa.display.waveplot(x, sr=sr)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKYbQMwqdcr4N3pZibShn8rna9RCZPzXk7xM7FRwWGKHHQ6ia0oWwXjurA/640?wx_fmt=png)
Zooming inn0 = 9000
n1 = 9100plt.figure(figsize=(14, 5))
plt.plot(x[n0:n1])``plt.grid()
上述显示有 6 个零交叉点。让我们用 librosa 验证一下。
zero_crossings = librosa.zero_crossings(x[n0:n1], pad=False)print(sum(zero_crossings))
6
Spectral Centroid
它代表了声音的“质心”所在位置,并计算声音中存在的频率的加权平均值。考虑两首歌曲,一首来自蓝调类型,另一首属于金属。现在,与整个长度相同的布鲁斯风格歌曲相比,金属歌曲在结尾处有更高的频率。因此,布鲁斯歌曲的频谱质心将位于其频谱中间附近的某个位置,而金属歌曲的频谱质心将接近其末端。
librosa.feature.spectral_centroid 函数可以计算每个帧的Spectral Centroid:
spectral_centroids = librosa.feature.spectral_centroid(x, sr=sr)[0]spectral_centroids.shape
(775,)# Computing the time variable for visualization
frames = range(len(spectral_centroids))t = librosa.frames_to_time(frames)# Normalising the spectral centroid for visualisation
def normalize(x, axis=0):
return sklearn.preprocessing.minmax_scale(x, axis=axis)#Plotting the Spectral Centroid along the waveformlibrosa.display.waveplot(x, sr=sr, alpha=0.4)
plt.plot(t, normalize(spectral_centroids), color=‘r’)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKzvIDvgLlhYQsic0bdxfia5GQTB8d49KY8nLT1sUWvanPJu0VV74AogJg/640?wx_fmt=png)**Spectral Rolloff**
它是信号形状的度量。它表示总频谱能量的百分比(例如 85%)低于该频率。
librosa.feature.spectral_rolloff 可以计算每一帧的Spectral Rolloff:
spectral_rolloff = librosa.feature.spectral_rolloff(x+0.01, sr=sr)[0]librosa.display.waveplot(x, sr=sr, alpha=0.4)
plt.plot(t, normalize(spectral_rolloff), color=‘r’)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKUnNVribibltNic6giamSVL0SC3tnwqYtcNIp4Dakml6BqibuqjVkDxrRiaFA/640?wx_fmt=png)
Mel-Frequency Cepstral Coefficients
MFCC 是一小组特征(通常约为 10-20),简明地描述了频谱包络的整体形状。它可以模拟人声的特征。
x, fs = librosa.load(‘…/simple_loop.wav’)``librosa.display.waveplot(x, sr=sr)
librosa.feature.mfcc 可以计算音频信号的 MFCC:
mfccs = librosa.feature.mfcc(x, sr=fs)print mfccs.shape
(20, 97)#Displaying the MFCCs:
librosa.display.specshow(mfccs, sr=sr, x_axis=‘time’)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKspxKnqM2rOzMR2ViaLGtYR6o5gWOBvkuiav5aEW7Bso2VBicDcejMXUTg/640?wx_fmt=png)这里 mfcc 在 97 帧上计算了 20 个 MFCC 。
我们还可以执行特征缩放,使得每个系数维度具有零均值和单位方差:
import sklearnmfccs = sklearn.preprocessing.scale(mfccs, axis=1)
print(mfccs.mean(axis=1))print(mfccs.var(axis=1))
librosa.display.specshow(mfccs, sr=sr, x_axis=‘time’)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKCZyRN2Z59icIqONicUpqLbQic7Ec1fvRmtwhfLQACLibxDITgMvsnZribMA/640?wx_fmt=png)**Chroma features**
Chroma features 是音乐音频的一种有趣而强大的表示,其中整个频谱被投射到 12 个 bins 上,代表音乐八度音阶的 12 个不同的半音(或色度)。
librosa.feature.chroma_stft 可以帮我们计算:
Loadign the filex, sr = librosa.load('../simple_piano.wav')
hop_length = 512chromagram = librosa.feature.chroma_stft(x, sr=sr, hop_length=hop_length)
plt.figure(figsize=(15, 5))``librosa.display.specshow(chromagram, x_axis=‘time’, y_axis=‘chroma’, hop_length=hop_length, cmap=‘coolwarm’)
![](https://mmbiz.qpic.cn/mmbiz_png/oWYZNQOgMwwaao3RInDticJbZ8GLWKlPKAdicl0pW0tEVQ3wBvLHMZibR2A4ZBIhQJibd8VS8hEY4pG05GkubwibXvA/640?wx_fmt=png)**案例研究:将歌曲分为不同的流派。**
在对声学信号、其特征及其特征提取过程进行了概述之后,是时候利用我们新开发的技能来处理机器学习问题了。
我们将尝试建立一个分类器模型来将歌曲分类为不同的流派。让我们假设一个场景,由于某种原因,我们在硬盘上发现了一堆随机命名的 MP3 文件,这些文件被认为包含音乐。我们的任务是根据音乐流派将它们分类到不同的文件夹中,例如爵士、古典、乡村、流行、摇滚和金属类。
数据集
我们将使用著名的 GITZAN 数据集进行案例研究。该数据集被 G. Tzanetakis 和 P. Cook 在 IEEE Transactions on Audio and Speech Processing 2002 中发表的著名流派分类论文“音频信号的音乐流派分类”中使用。
该数据集包含 1000 个音轨,每个音轨长 30 秒。它包含十种流派:蓝调、古典、乡村、迪斯科、嘻哈、爵士、雷鬼、摇滚、金属和流行。每个流派包含 100 个声音片段。
数据预处理
在训练分类模型之前,我们必须将原始数据从音频样本转换为更有意义的表示形式。音频片段需要从 .au 格式转换为 .wav 格式,使其兼容 python 的 wave 模块读取音频文件。我使用开源 SoX 库进行转换。
sox input.au output.wav
分类
特征提取
然后我们需要从音频文件中提取有意义的特征。我们将选择五个特征来对我们的音频剪辑进行分类,即Mel-Frequency Cepstral Coefficients, Spectral Centroid, Zero Crossing Rate, Chroma Frequencies, Spectral Roll-off.。然后将所有特征附加到 .csv 文件中,以便可以使用分类算法。
分类
一旦提取了特征,我们就可以使用现有的分类算法将歌曲分类为不同的流派。您可以直接使用频谱图图像进行分类,也可以提取特征并在其上使用分类模型。
尾记
音乐流派分类是音乐信息检索的众多分支之一。从这里,您可以对音乐数据执行其他任务,例如节拍跟踪、音乐生成、推荐系统、音轨分离和乐器识别等。音乐分析是一个多元化的领域,也是一个有趣的领域。音乐会话以某种方式代表用户的时刻。找到这些时刻并描述它们是数据科学领域的一项有趣挑战。
题外话
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)
若有侵权,请联系删除
相关文章:
基于 Python 的音乐流派分类
音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否。我们喜欢说“you are what you stream” - Spotify Spotify 拥有 260 亿美元的净资产,是如今很受欢迎的音乐流媒体平台。它目前在其数据库中拥有数百…...
代码随想录训练营第49天|121.买卖股票的最佳时机,122.买卖股票的最佳时机II
代码随想录训练营第49天|121.买卖股票的最佳时机,122.买卖股票的最佳时机II 121.买卖股票的最佳时机文章思路代码 122.买卖股票的最佳时机II文章思路代码 总结 121.买卖股票的最佳时机 文章 代码随想录|0121.买卖股票的最佳时机 思路 维护一个历史最低价&#x…...
1-3 AUTOSAR软件架构
目录 一、简介 二、基础软件层 BSW 2.1 微控制器抽象层 2.2 ECU抽象层 2.3 复杂的驱动程序 2.4 服务层 三、运行时环境 RTE 四、应用软件层 SWC 一、简介 分层架构是实现软硬件分离的关键,它使汽车嵌入式系统控制软件开发者摆脱了以往 ECU 软件开发与验证时…...
Dajngo02_第一个Django案例
Dajngo02_第一个Django案例 经过之前学习,我们已经可以创建Django环境 现在开始尝试快速使用Django开发一个案例 案例:利用Django实现一个查看当前时间的web页面。 在django中要提供数据展示给用户,一般情况下我们需要完成3个步骤: 在urls.…...
R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Box's M检验可视化...
全文链接:https://tecdat.cn/?p33609 Reaven和Miller(1979)研究了145名非肥胖成年人的葡萄糖耐量和胰岛素血液化学指标之间的关系。他们使用斯坦福线性加速器中心的PRIM9系统将数据可视化为3D,并发现了一个奇特的图案,…...
有效回文字符串(Valid palindrome)
题目描述 思路分析 代码实践 java: public class Solutation1 {//定义一个方法,判断是否是有效数字或者字母private static boolean isValid(char c) {//如果不是字母或者数字,那就返回一个flase//这里调用了Character类里面的方法return Character.i…...
9月9日,每日信息差
今天是2023年9月9日,以下是为您准备的12条信息差 第一、前晨汽车动力电池项目落地厦门,第二十届中国国际投资贸易洽谈会于2023年9月8日在福建省厦门市开幕。会上,前晨汽车科技有限公司与福建省厦门市集美区进行了前晨汽车动力电池项目签约&a…...
Java——》synchronized编译
推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...
vue3使用el-form实现登录、注册功能,且进行表单验证(Element Plus中的el-form)
简介:Element Plus 中的 el-form 是一个表单组件,用于快速构建表单并进行数据校验。它提供了丰富的表单元素和验证规则,使表单开发变得更加简单和高效。可以搭配el-dialog实现当前页面的登录、注册页 ,这两天在vue3中用到了表单登…...
12个微服务架构模式最佳实践
微服务架构是一种软件开发技术,它将大型应用程序分解为更小的、可管理的、独立的服务。每个服务负责特定的功能,并通过明确定义的 API 与其他服务进行通信。微服务架构有助于实现软件系统更好的可扩展性、可维护性和灵活性。 接下来,我们将介…...
快速搭建:对象存储平台MinIO
简介:MinIO 是一个高性能的对象存储服务器,兼容Amazon S3云存储服务。适用于大数据存储和用于构建私有云的场景。作为一个对象存储服务,它基于Apache License 开源协议,兼容Amazon S3云存储接口。适合存储非结构化数据,…...
Nomad 系列-Nomad+Traefik+Tailscale 集成实现零信任安全
系列文章 Nomad 系列文章Traefik 系列文章Tailscale 系列文章 概述 终于到了令人启动的环节了:NomadTraefikTailscale 集成实现零信任安全。 在这里: Nomad 负责容器调度;(容器编排工具)Traefik 负责入口流量&…...
(二十一)大数据实战——Flume数据采集之复制和多路复用案例实战
前言 本节内容我们完成Flume数据采集的一个多路复用案例,使用三台服务器,一台服务器负责采集本地日志数据,通过使用Replicating ChannelSelector选择器,将采集到的数据分发到另外俩台服务器,一台服务器将数据存储到hd…...
VM安装RedHat7虚机ens33网络不显示IP问题解决
1、今天在VMware中安装RedHat7.4虚拟机,网络连接使用的是 NAT 连接方式,刚开始安装成功之后输入ifconfig 还能看到ens33自动分配的IP地址,但是当虚机关机重启后,再查看IP发现原来的ens33网络已经没有了,只变成了这两个…...
Leetcode 第 362 场周赛题解
Leetcode 第 362 场周赛题解 Leetcode 第 362 场周赛题解题目1:2848. 与车相交的点思路代码复杂度分析 题目2:2849. 判断能否在给定时间到达单元格思路代码复杂度分析 题目3:2850. 将石头分散到网格图的最少移动次数思路代码复杂度分析 题目4…...
蓝桥杯官网练习题(0的个数)
问题描述 给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ? 输入格式 输入一行包含一个正整数 n。 输出格式 输出一个整数,表示答案。 样例输入 20220000样例输出 4评测用例规模与约定 对于所有评测用例,1 &l…...
计算线段上距离线段外某一点最近的点
一、问题 已知 p 0 = ( x 0 , y 0 ) p_0=(x_0, y_0) p...
港联证券股票分析:经济拐点显现 积极提升仓位
港联证券指出,商场底部上升的方向不变,当时稳增加和活跃资本商场的活跃方针仍在持续落地,一起也看到了一些经济数据边沿企稳的迹象,跟着方针作用的进一步闪现,商场情绪有望持续好转,上市公司基本面也有望得…...
不同的图像质量评价指标(IQA)
一、NR-IQA 这是一种方法不是指标 “Non-Reference Image Quality Assessment”(NR-IQA)是一种图像质量评价(Image Quality Assessment, IQA)方法,通常用于评估图像的质量,而无需使用参考图像(…...
linux命令-tar 命令
tar 命令 tar 命令一般用来打包文件 ,文件夹 , 方便传输使用. tar命令是在Linux和UNIX系统上用于创建、查看和提取tar归档文件的工具。它通常与gzip一起使用,以便在创建归档文件时进行压缩或解压缩。 -c: 创建归档文件 -x: 提取文件 -z: 告诉 tar 命令使用 gzip …...
selenium元素定位---ElementClickInterceptedException(元素点击交互异常)解决方法
1、异常原因 在编写ui自动化时,执行报错元素无法点击:ElementClickInterceptedException 具体报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <span class"el-c…...
05_css选择器的使用
一、css选择器的类型 1、标签选择器 用法:直接写 写标签名:标签名{} 示例: <!-- <!DOCTYPE html --> <html><head><meta charset"utf-8"><title>标签选择器</title><style type"te…...
跨平台游戏引擎 Axmol-2.0.0 正式发布
下载 https://github.com/axmolengine/axmol/releases/tag/v2.0.0 更新日志 添加实验性的 WebAssembly 构建支持(WebGL 2.0),由 nowasm 贡献 已知问题 WebGL context lost 尚未处理 部署在 github pages 的 demo 可快速预览,注意:由于 Git…...
面试总结归纳
面试总结 注:循序渐进,由点到面,从技术点的理解到项目中的使用, 要让面试官知道,我所知道的要比面试官更多 一、Mybatis 为ORM半持久层框架,它封装了JDBC,开发时只需要关注sql语句就可以了…...
【刷题篇】贪心算法(一)
文章目录 分割平衡字符串买卖股票的最佳时机Ⅱ跳跃游戏钱币找零 分割平衡字符串 class Solution { public:int balancedStringSplit(string s) {int lens.size();int cnt0;int balance0;for(int i0;i<len;i){if(s[i]R){balance--;}else{balance;}if(balance0){cnt;}}return …...
从维基百科通过关键字爬取指定文本内容
通过输入搜索的关键字,和搜索页数范围,爬出指定文本内内容并存入到txt文档。代码逐行讲解。 使用re、res、BeautifulSoup包读取,代码已测,可以运行。txt文档内容不乱码。 import re import requests from bs4 import BeautifulS…...
pytorch代码实现之SAConv卷积
SAConv卷积 SAConv卷积模块是一种精度更高、速度更快的“即插即用”卷积,目前很多方法被提出用于降低模型冗余、加速模型推理速度,然而这些方法往往关注于消除不重要的滤波器或构建高效计算单元,反而忽略了特征内部的模式冗余。 原文地址&am…...
一文解析-通过实例讲解 Linux 内存泄漏检测方法
一、mtrace分析内存泄露 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数 void mtrace ()&#x…...
Spring Boot常用的参数验证技巧和使用方法
简介 Spring Boot是一个使用Java编写的开源框架,用于快速构建基于Spring的应用程序。在实际开发中,经常需要对输入参数进行验证,以确保数据的完整性和准确性。Spring Boot提供了多种方式来进行参数验证,并且可以很方便地集成到应…...
手机+卫星的科技狂想
最近硬件圈最火热的话题之一,应该就是突然上线、遥遥领先的华为Mate 60 Pro了。 其中,CPU和类5G网速是怎么实现的,是大家特别关注的问题。相比之下,卫星通话这个功能,讨论度就略低一些(没有说不火的意思&am…...
深圳外贸网站建设/靖江seo要多少钱
原文链接 作者: Jakob Jenkov 译者:赵亮 SOAP是Simple Object Access Protocol(简单对象传输协议)的缩写。SOAP消息是基于XML格式进行传输的,流行的web service就是使用SOAP进行客户端和服务器之间的通信的。在这篇…...
河北邢台做移动网站/seo排名赚app官网
前言二叉树遍历是非常经典的算法题,也是二叉树的一道基础算法题。但是在平常的笔试面试中,其出现的频率其实并不是特别的高,我推测是这种题目相对来说比较基础,算是一个基础知识点。比如剑指offer中出现的后序遍历题目,…...
临沂网站建设那家好/win7怎么优化最流畅
文章目录1.CSS2.Id&ClassCSS的创建具体属性ref1.CSS CSS(Cascading Style Sheets)层叠样式表, 一种用于为结构化文档(HTML文档/XML应用)添加样式(字体, 间距, 颜色等)的计算机语言样式定义如何显示HTML元素, 通常存储在样式表, 样式添加到HTML4.0中是为了解决内容与表现分…...
服装外贸网站建设/沈阳seo推广
第五单元用户与组的管理一、填空题1.根据服务器的工作模式,组分为本地组和域组。2.账户的类型分为本地用户账户、域用户账户、内置用户账户。3.工作组模式下,账户存储在服务器的sam文件中;域模式下,账户存储在活动目录数据库中。4…...
聊城网站建设公司/石首seo排名
")怎样用Python实现FTP自动上传请看PYTHON FTP模块的用法。怎么样通过Python实现自动添加脚本头信息的示例代码#!/usr/bin/python#title :test4.py#description :I am test script#author :python技术#date :20160902#version :0.1#…...
谷歌seo招聘/seo 页面链接优化
书评——《Microsft .NET Framework 3.5 – Windows Forms Application Development》 本文地址:http://www.cnblogs.com/AndersLiu/archive/2009/04/11/book-review-windows-forms.html 作者:Anders Liu 摘要:本文大力吹捧了一下微软的新书《…...