iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >USF MSDS501 计算数据科学中
  • 908
分享到

USF MSDS501 计算数据科学中

科学数据USF 2023-01-31 08:01:14 908人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Playing sounds 译者:飞龙 协议:CC BY-NC-SA 4.0 本实验的目标是让您感到惊讶,您可以使用 python 处理一些音频文件。

来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目

原文:Playing sounds

译者:飞龙

协议:CC BY-NC-SA 4.0

本实验的目标是让您感到惊讶,您可以使用 python 处理一些音频文件。您将无法获得所有详细信息,但您可以剪切并粘贴此实验来启动 Python 会话。作为次要目标,您将习惯于安装 Python 包和命令行工具

首先,下载以下两个音频文件,以便我们拥有一些要处理的原材料。

  • 来自 Kiss by Prince的初始序列,Kiss.aiff
  • ahhh 声音,ahhh.mp3

我建议你将它们存储在如下目录中:

/Users/YOURID/msan501/labs/sound

其中YOURID是您的计算机登录名。 例如,我的登录名是parrt。在 linux 上它会像:

/home/YOURID/msan501/labs/sound

安装命令行工具

事实证明,我们将在 Python 中使用的声音库,不知道如何处理 mp3 文件。 我们需要将ahhh.mp3文件转换为ahhh.wav,这些库知道如何处理它。 为此,我们将使用名为 mpg123 的工具。

要在 Mac 上安装大多数免费软件,我们使用一个名为 homebrew(家酿啤酒)的程序(从命令行访问只是brew)。它可能已预先安装在您的计算机上,但如果没有,请阅读说明并进行安装。这是一个切割和粘贴以/usr/bin/ruby...开头的单行的问题

一旦安装完毕,我们就可以用它来安装mpg123。 从终端运行以下brew命令,该命令应该给出指示的输出:

$ brew install mpg123
...
==> Downloading https://homebrew.bintray.com/bottles/mpg123-1.25.0.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring mpg123-1.25.0.el_capitan.bottle.tar.gz
==> Using the sandbox
  /usr/local/Cellar/mpg123/1.25.0: 26 files, 765.2KB

在 Linux 上,mpg123 的安装是:

sudo apt-get install mpg123

或者:

$ sudo yum install mpg123

mp3转换为wav文件

现在,我们安装了 mpg123,我们可以使用它将.mp3转换为.wav文件。 使用cd(更改目录)命令进入保存ahhh.mp3文件的目录,并使用ls列出文件:

$ cd /Users/YOURID/msan501/labs/sound
$ ls
Kiss.aiff  ahhh.mp3

使用以下命令转换文件:

$ mpg123 -w ahhh.wav ahhh.mp3 
High PerfORMance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.25.0; written and copyright by Michael Hipp and others
    free software (LGPL) without any warranty but with best wishes


Terminal control enabled, press 'h' for listing of keys and functions.

Playing MPEG stream 1 of 1: ahhh.mp3 ...

MPEG 1.0 L III cbr192 44100 j-s

Comment:  00000000 00000210 000009F5 000000000004FF7B 00000000 0002AB44 00000000 00000000 00000000 00000000 00000000 00000000

[0:07] Decoding of ahhh.mp3 finished.

在那个输出中有很多乱码,我们并不关心,但要确保它表示“完成”,并且看起来没有任何错误。 看一下当前目录中的文件,看看是否出现了ahhh.wav

$ ls
Kiss.aiff  ahhh.mp3   ahhh.wav 

如果您无法弄清楚如何转换为ahhh.wav,请不要担心。 你可以从我的笔记下载它。

此时,我们已经学会了使用cd跳转到文件系统中的不同位置,并使用ls列出目录中的文件。 我们使用brew作为非 Python 包的install命令。

安装 Python 包

为了从 Python 读取和播放声音文件,我们需要利用一些现有的 Python 代码。 代码通常以包含的形式提供;这些术语或多或少在实践中同义使用。

  • 对于读取声音文件,我们需要 [pysoundfile](Http://pysoundfile.readthedoc...。
  • 对于播放声音文件,我们需要 [sounddevice](http://python-sounddevice.rea...。

如果我们在安装包之前尝试使用包,那么 Python 执行器会向我们显示如下错误。

---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-61-b5992dda2a80> in <module>()
----> 1 import soundfile as sf

ImportError: No module named soundfile

关键是在import语句中,我们得到错误No module named soundfile。这不应该搞砸你的一天 - 这只是意味着我们必须安装该软件包。

要安装 Python 包,我们使用pip(或稍后,conda)程序。通常这个程序可以快速轻松地完成我们想要的操作,但是很多事情都可能出错。最常见的是你的pip程序与python程序不匹配。首先使用which验证它们是否来自同一个bin目录:

$ which pip
/Users/parrt/anaconda3/bin/pip
$ which python
/Users/parrt/anaconda3/bin/python
$ which python3
/Users/parrt/anaconda3/bin/python3

现在,让我们安装pysoundfile包:

$ pip install pysoundfile
Collecting pysoundfile
  Downloading PySoundFile-0.9.0.post1-py2.py3.cp26.cp27.cp32.cp33.cp34.cp35.cp36.pp27.pp32.pp33-none-macosx_10_5_x86_64.macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.whl (573kB)
    100% | | 573kB 1.4MB/s 
Requirement already satisfied: cffi>=0.6 in /Users/parrt/anaconda2/lib/python2.7/site-packages (from pysoundfile)
Requirement already satisfied: pycparser in /Users/parrt/anaconda2/lib/python2.7/site-packages (from cffi>=0.6->pysoundfile)
Installing collected packages: pysoundfile
Successfully installed pysoundfile-0.9.0.post1

LINUX用户:你需要执行conda install libGCc来使这个声音组件生效。

同样安装其他包:

$ pip install sounddevice
Collecting sounddevice
...

为了确保我们已正确安装软件包,我们可以尝试使用交互式 Python shell pythonipython导入它们:

$ python
Python 3.6.5 | packaged by conda-forge | (default, Mar 30 2018, 00:00:55) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import soundfile as sf
>>> import sounddevice as sd

这一次,我们的import语句没有出错。

用 Python 播放声音

此时,您已经转换了一个文件,以便我们的 Python 库可以使用它,并且您已经安装了这些 Python 库。 在这样做时,你使用了一些你应该非常熟悉的命令行工具:brewpipwhichcdlspython等等...

现在是时候把所有这些放在一个简单的 Python 程序中,你可以剪切和粘贴来播放声音。 让我们从代码开始播放Kiss.aiff文件。 在音频文件的同一目录中创建一个名为play.py的文件。 您可以使用nano或其他文本编辑器。 这是代码:

import soundfile as sf    # Use this package
import sounddevice as sd  # and this one

kiss, samplerate = sf.read('Kiss.aiff')  # load Kiss.aiff into kiss variable
sd.play(kiss, samplerate)                # start playing the music
sd.wait()                                # wait until music finishes before exiting

使用以下命令从命令行运行此程序:

$ python play.py

现在编辑程序并将'Kiss.aiff'字符串更改为'ahhh.wav'

...
kiss, samplerate = sf.read('ahhh.wav')
...

再次执行程序,您应该听到播放其他声音文件。

最常见的错误是声音文件没有与代码位于同一目录中。

生成我们自己的声音

在声音章节中,我们看到了如何产生正弦波,当我们将它扔给扬声器时,正弦波会产生纯音。 创建一个puretone.py文件并在其中放入以下代码。

import numpy
import sounddevice as sd

fs = 44100 # sampling frequency
T = 1.5    # seconds
t = numpy.linspace(0, T, int(T*fs), endpoint=False) # time variable
y = numpy.sin(2*numpy.pi*440*t)                     # pure sine wave at 440 Hz
sd.play(y, fs)
sd.wait()

从命令行运行它。通过归纳其他程序的执行,您应该知道如何运行这个新程序,它是:

$ python puretone.py

440更改为更高的值,如1000

...
y = numpy.sin(2*numpy.pi*1000*t)                    # pure sine wave at 1000 Hz
...

再次运行时,您应该听到更高的音调。

正如我们在演讲中所做的那样,让我们一起添加两个音调来产生更酷的声音。 带有两个正弦波结构的正弦波代码如下所示:

...
y = numpy.sin(2*numpy.pi*440*t)                     # pure sine wave at 440 Hz
y2 = numpy.sin(2*numpy.pi*1000*t)                   # pure sine wave at 1000 Hz
...

信号在'yy2`变量中。 现在,改变播放声音的语句,以便在播放之前将信号添加到一起:

...
sd.play(y+y2, fs)
...

保存程序并运行它。 您应该听到两个声音一起播放为一个声音。

现在,让我们看看这个信号在视觉上是什么样的。 创建一个名为twotonesplot.py的文件并输入以下代码:

import numpy
import sounddevice as sd
import matplotlib.pyplot as plt

fs = 44100 # sampling frequency
T = 1.5    # seconds
t = numpy.linspace(0, T, int(T*fs), endpoint=False) # time variable
y = numpy.sin(2*numpy.pi*440*t)                     # pure sine wave at 440 Hz
y2 = numpy.sin(2*numpy.pi*1000*t)                   # pure sine wave at 1000 Hz
plt.scatter(t[0:1000],(y+y2)[0:1000],s=1)
plt.show()

看看您是否可以看到此代码与之前代码之间的关系。 我们有另一个import语句,它引入了一些绘图代码,我们用它来生成一个散点图,用最后两行替换play/wait序列。 除此之外,代码是相同的。 运行该代码,你应该看到一个漂亮的摇摆正弦波,这是两个不同频率的纯正弦波:

<img src="https://gitee.com/wizardforce...; width="100%">

声音处理

减小音量

为了让你相信声波只是数字,让我们从音频文件加载的数字更小。当我们演奏它时会产生什么声音?是的,它应该变得更安静。这是一个名为softer.pyplay.py程序的版本,它有一个额外的行来减少振幅:

import soundfile as sf    # Use this package
import sounddevice as sd  # and this one

kiss, samplerate = sf.read('Kiss.aiff')  # load Kiss.aiff into kiss variable
kiss = kiss * .1                         # Reduce amplitude to make quieter
sd.play(kiss, samplerate)                # start playing the music
sd.wait()                                # wait until music finishes before exiting

该行将数字信号中的每个值除以 10:

kiss = kiss * .1                         # Reduce amplitude to make quieter

事实证明,当我们将信号强度除以 10 时,我们的耳朵听到的声音减小一半。(术语分贝(decibel)应该是个双关语,Decimate意味着除以 10。)

减慢音频(并改变音高)

让我们说我们想加深 Prince 的声音。 我们所要做的就是减慢音乐速度。 要做到这一点,我们所要做的就是玩一玩采样率。 将play.py文件复制到slow.py并将play行更改为:

sd.play(kiss, samplerate*.8)             # play the music at 80% speed

现在运行slow.py并且 Prince 的声音在最后听起来很怪异。 整个东西听起来很慢。 直观地说,降低播放时的采样率会降低速度,因为播放器每秒消耗更少的样本。 这会使声音延长,就像用手指放慢唱片转盘一样。

可以减慢音乐速度并且更改音高,这在尝试将音乐从音频转换为乐谱时非常有用。构建我所使用的转录软件的人,很好的描述了不改变音高并减慢音乐所涉及的技巧。

答案

您可以在 msan501 类库中找到本实验的所有代码。 这是声音文件。

总结

声音处理是一个非常有趣的迷人话题,你刚刚在这里做了一些尝试。我希望这个实验可以激励您深入了解编程的细节,以便您可以学习为自己构建这些类型的程序。 在第一个项目中,您将了解图像处理,您猜对了,一切都是数字。

您还了解了如何使用命令行安装其他命令行程序和 Python 包。 当您编写越来越复杂的程序时,这将是您将一次又一次地使用的东西。

--结束END--

本文标题: USF MSDS501 计算数据科学中

本文链接: https://www.lsjlt.com/news/192996.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • USF MSDS501 计算数据科学中
    来源:ApacheCN『USF MSDS501 计算数据科学中文讲义』翻译项目原文:Playing sounds 译者:飞龙 协议:CC BY-NC-SA 4.0 本实验的目标是让您感到惊讶,您可以使用 Python 处理一些音频文件。...
    99+
    2023-01-31
    科学 数据 USF
  • python科学计算常用的数学科学计算库是什么
    这篇文章给大家分享的是有关python科学计算常用的数学科学计算库是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题...
    99+
    2023-06-14
  • 科学计算库Numpy——数值计算
    矩阵 求和 乘积 最大值和最小值 最大值和最小值的位置 平均数 标准差 方差 限制 四舍五入 ...
    99+
    2023-01-31
    数值 科学 Numpy
  • Python3.0科学计算学习之函数
    函数 函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决。即“分而治之”。  Python的自建模块一般体现为函数。Python函数有如下特点...
    99+
    2023-01-31
    函数 科学
  • Go - 按科学计数法计算的倍数
    Golang不知道大家是否熟悉?今天我将给大家介绍《Go - 按科学计数法计算的倍数》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出...
    99+
    2024-04-05
  • 科学计算库Numpy——运算
    np.multiply(array1,array2) 该函数用于数组中对应位置上的数相乘。 一维向量 二维数组 np.dot(array1,array2) 两个数组都是一维向量 数组中对应位置上的数相乘后再求和...
    99+
    2023-01-31
    科学 Numpy
  • 科学计算库Numpy——numpy.nd
    创建ndarray 元素类型 对于ndarray结构来说,里面所有的元素必须是同一类型的,如果不是的话,会自动的向下进行转换。 元素类型所占字节数 数组维数     元素个数 数组的维度 数组中填充固定值 ...
    99+
    2023-01-31
    科学 Numpy numpy
  • Python3.0科学计算学习之类
    类:        Python中的类是一个抽象的概念,甚至比函数还要抽象。可以把它简单的看作是数据以及由存取、操作这些数据的方法所组成的一个集合。类是Python的核心概念,是面向对象编程的基础。       类有如下的优点: 类对象是...
    99+
    2023-01-31
    科学
  • python科学计算学习二:matplo
        博客地址:http://blog.csdn.net/ikerpeng/article/details/20523679     首先补充以下:7种颜色 r g b y m c k (红,绿,蓝,黄,品红,青,黑)     在科研...
    99+
    2023-01-31
    科学 python matplo
  • Python科学计算学习之高级数组(二)
    代码性能和向量化   背景:Python是一种解释型的编程语言,基本的python代码不需要任何中间编译过程来得到机器代码,而是直接执行。而对于C、C++等编译性语言就需要在执行代码前将其编译为机器指令。 但是,解释型代码的速度比编译...
    99+
    2023-01-31
    数组 高级 科学
  • Python 科学计算和绘图
    转自:http://python.jobbole.com/87471/原文出处: 達聞西   给深度学习入门者的Python快速教程基础篇numpy和Matplotlib篇本篇部分代码的下载地址:https://github.com/fr...
    99+
    2023-01-31
    科学 Python
  • 科学计算库Numpy——概述
    Numpy主要用于数组的各种计算。 导入Numpy import numpy as np 数组类型 Numpy的数组类型为numpy.ndarray。 array=np.array([1,2,3,4,5]) print(type...
    99+
    2023-01-31
    科学 Numpy
  • PHP学习笔记:科学计算与数值模拟
    引言:在当今科技大潮的推动下,科学计算和数值模拟在学术研究和工程实践中扮演着重要的角色。而作为一门功能强大的编程语言,PHP不仅可以用于网站开发和数据处理,也可以用于科学计算和数值模拟。本文将简要介绍PHP的科学计算和数值模拟基础,并提供具...
    99+
    2023-10-21
    PHP 科学计算 数值模拟
  • Python NumPy宝典:数据分析与科学计算的利器
    一、NumPy简介: NumPy是Python中用于科学计算和数据分析的强大库,提供了一系列高效且易用的工具,能够轻松处理多维数组并执行各种数学运算。NumPy的基础数据结构是多维数组ndarray,可以存储不同类型的数据,例如数字、字符...
    99+
    2024-02-11
    NumPy Python 数据分析 科学计算 数组操作 数学运算 数据聚合 线性代数 随机数生成
  • Python3.0科学计算学习之绘图(一
    基本绘图: (1)  plot是标准的绘图库,调用函数plot(x,y)就可以创建一个带有绘图的图形窗口(其中y是x的函数)。输入的参数为具有相同长度的数组(或列表);或者plot(y)是plot(range(len(y)),y)的简...
    99+
    2023-01-31
    科学
  • 学习如何使用numpy库进行数据分析和科学计算
    随着信息时代的到来,数据分析和科学计算成为了越来越多领域的重要组成部分。在这个过程中,使用计算机进行数据处理和分析已经成为必不可少的工具。而在Python中,numpy库就是一个非常重要的工具,它可以让我们更加高效地进行数据处理...
    99+
    2024-01-19
    数据分析 Numpy 科学计算
  • 【数据科学系统学习】机器学习算法 #
    本篇内容为《机器学习实战》第 6 章 支持向量机部分程序清单。所用代码为 python3。 支持向量机优点:泛化错误率低,计算开销不大,结果易解释。 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。适用数据...
    99+
    2023-01-31
    算法 机器 科学
  • Python 科学计算基础 (整理)
    Python是一种面向对象的、动态的程序设计语言,具有非常简洁而清晰的语法,既可以用于快速开发程序脚本,也可以用于开发大规模的软件,特别适合于完成各...
    99+
    2023-01-31
    基础 科学 Python
  • Python3.0科学计算学习之绘图(三
    matplotlib对象:  使用matplotlib的pyplot模块,可以供用户直接使用最重要的绘图命令。多数情况下,我们希望创建一个图形并且立即展示出来,但是有时如果生成要通过更改其属性来修改的图形,就需要用面向对象的方式来处理图形...
    99+
    2023-01-31
    科学
  • Python3.0科学计算学习之绘图(四
    绘制三维图: mplot3d工具包提供了点、线、等值线、曲面和所有其他基本组件以及三维旋转缩放的三维绘图。 1.散点的三维数据图 from mpl_toolkits.mplot3d import axes3d               ...
    99+
    2023-01-31
    科学
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作