我的编程空间,编程开发者的网络收藏夹
学习永远不晚

USF MSDS501 计算数据科学中

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

USF MSDS501 计算数据科学中

来源: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 class="lazy" data-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 包。 当您编写越来越复杂的程序时,这将是您将一次又一次地使用的东西。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

USF MSDS501 计算数据科学中

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

下载Word文档

猜你喜欢

USF MSDS501 计算数据科学中

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

科学计算库Numpy——数值计算

矩阵 求和 乘积 最大值和最小值 最大值和最小值的位置 平均数 标准差 方差 限制 四舍五入
2023-01-31

python科学计算常用的数学科学计算库是什么

这篇文章给大家分享的是有关python科学计算常用的数学科学计算库是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题
2023-06-14

云计算与数据科学有何不同

云服务提供可扩展性、灵活性和成本效率,满足数据科学任务的动态需求。数据科学家利用云的计算能力进行分析、机器学习和可操作的见解。

Python3.0科学计算学习之函数

函数函数允许程序的控制在不同的代码片段之间切换,函数的重要意义在于可以在程序中清晰地分离不同的任务,将复杂的问题分解为几个相对简单的子问题,并逐个解决。即“分而治之”。 Python的自建模块一般体现为函数。Python函数有如下特点:(1
2023-01-31

Go - 按科学计数法计算的倍数

Golang不知道大家是否熟悉?今天我将给大家介绍《Go - 按科学计数法计算的倍数》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!问题内容我
Go - 按科学计数法计算的倍数
2024-04-05

数据科学中的三大统计悖论

观察到令人惊讶的现象,例如在汇总数据中完全还原的子组趋势,的确不罕见。在本文中,我们研究了数据科学中遇到的三种最常见的统计悖论。

云计算如何促进数据科学工作流程?

云计算通过互联网或云提供计算服务,如服务器、存储、数据库、软件、分析等。云计算使用户能够按需访问和使用这些服务,而无需投资或维护物理基础设施。云计算还提供可扩展性、可靠性、安全性和成本效益等优势。

Python科学计算学习之高级数组(二)

代码性能和向量化  背景:Python是一种解释型的编程语言,基本的python代码不需要任何中间编译过程来得到机器代码,而是直接执行。而对于C、C++等编译性语言就需要在执行代码前将其编译为机器指令。 但是,解释型代码的速度比编译型代码要
2023-01-31

Python NumPy宝典:数据分析与科学计算的利器

NumPy是Python中用于科学计算和数据分析的强大库,本文将深入探讨NumPy的基本概念、数组操作、数学运算、数据聚合、线性代数和随机数生成,并提供丰富的代码示例,帮助您轻松掌握NumPy并将其应用到实际项目中。
Python NumPy宝典:数据分析与科学计算的利器
2024-02-11

学习如何使用numpy库进行数据分析和科学计算

随着信息时代的到来,数据分析和科学计算成为了越来越多领域的重要组成部分。在这个过程中,使用计算机进行数据处理和分析已经成为必不可少的工具。而在Python中,numpy库就是一个非常重要的工具,它可以让我们更加高效地进行数据处理和分析,更加
学习如何使用numpy库进行数据分析和科学计算
2024-01-19

PHP学习笔记:科学计算与数值模拟

引言:在当今科技大潮的推动下,科学计算和数值模拟在学术研究和工程实践中扮演着重要的角色。而作为一门功能强大的编程语言,PHP不仅可以用于网站开发和数据处理,也可以用于科学计算和数值模拟。本文将简要介绍PHP的科学计算和数值模拟基础,并提供具
2023-10-21

Python数据分析库Scipy库,科学计算与数据分析的利器!

Scipy是Python科学计算和数据分析的强大工具,它提供了丰富的数学优化、统计分析、信号处理和插值功能,为科学家、工程师和数据分析师提供了广泛的工具和函数。
ScipyPython2024-11-30

【数据科学系统学习】机器学习算法 #

本篇内容为《机器学习实战》第 6 章 支持向量机部分程序清单。所用代码为 python3。支持向量机优点:泛化错误率低,计算开销不大,结果易解释。 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二分类问题。适用数据类型:
2023-01-31

数据科学之基石:数据科学家应该掌握的10个统计学概念

数据科学是一个跨学科领域,其基石之一是统计学。如果没有足够的统计知识,就很难理解或解释数据。

NumPy科学计算大全:探索数据的奥秘与魅力

NumPy是一款强大的Python库,用于科学计算和数据分析。本文将全面介绍NumPy的各种特性和功能,并通过示例演示如何使用NumPy来处理数据。
NumPy科学计算大全:探索数据的奥秘与魅力
2024-02-11

边缘计算和数据科学:为物联网设备赋能

物联网设备的激增开创了一个新的连接时代,将智能嵌入到日常物品中,从智能恒温器和可穿戴设备到工业传感器和自动驾驶汽车。这些设备产生大量数据,为洞察创造机会,从而推动更明智的决策并增强用户体验。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录