1、pyaudio安装大背景

最近在做智能音箱,需要编写声音拾取代码,我先是百度两篇比较常见的用python进行录音的操作的文章:

发现需要用到pyaudio,然后在其官网找到如何安装:http://people.csail.mit.edu/hubert/pyaudio/

但是,在py虚拟环境中通过pip安装会报错,而采用sudo apt-get install python-pyaudio python3-pyaudio安装没有报错,但是在虚拟环境中不行。

注:全局安装不适用于python虚拟环境中,python虚拟环境和全局环境互不影响。

2、解决python虚拟环境中安装pyaudio走过的坑

坑一:utbutu16.10 安装pyaudio模块过程出现错误 fatal error: portaudio.h: 没有那个文件或目录 error: command 'x86_64-linux-gn

尝试http://blog.csdn.net/hellodrawing/article/details/60868939,发现没用

坑二:安装pyaudio找不到portaudio.h的问题

尝试http://blog.csdn.net/qq_23729557/article/details/78956602,发现无用

 ➜  ~  sudo apt-get install portaudio19-dev python-all-dev python3-all-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
python-all-dev is already the newest version (2.7.-2ubuntu1).
The following additional packages will be installed:
jackd1 jackd1-firewire libasound2-dev libjack-dev libjack0 libportaudiocpp0 libpython3-all-dev libzita-alsa-pcmi0 libzita-resampler1 python3-all uuid-dev
Suggested packages:
jack-tools meterbridge libasound2-doc portaudio19-doc
The following packages will be REMOVED:
jackd2 jackd2-firewire libjack-jackd2-
The following NEW packages will be installed:
jackd1 jackd1-firewire libasound2-dev libjack-dev libjack0 libportaudiocpp0 libpython3-all-dev libzita-alsa-pcmi0 libzita-resampler1 portaudio19-dev python3-all python3-all-dev uuid-dev
upgraded, newly installed, to remove and not upgraded.
Need to get B/ kB of archives.
After this operation, , kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Preconfiguring packages ...
dpkg: warning: files list file for package 'emacsen-common' missing; assuming package has no files currently installed
(Reading database ... files and directories currently installed.)
Removing jackd2-firewire (1.9.+20150825git1ed50c92~dfsg-5ubuntu1) ...
dpkg: jackd2: dependency problems, but removing anyway as you requested:
jackd depends on jackd2 | jackd1; however:
Package jackd2 is to be removed.
Package jackd1 is not installed. Removing jackd2 (1.9.+20150825git1ed50c92~dfsg-5ubuntu1) ...
dpkg: warning: files list file for package 'emacsen-common' missing; assuming package has no files currently installed
(Reading database ... files and directories currently installed.)
Preparing to unpack .../jackd1_1%3a0.125.0-2_amd64.deb ...
Unpacking jackd1 (:0.125.-) ...
dpkg: error processing archive /var/cache/apt/archives/jackd1_1%3a0.125.0-2_amd64.deb (--unpack):
trying to overwrite '/usr/lib/x86_64-linux-gnu/libjackserver.so.0', which is also in package libjack-jackd2-:amd64 1.9.+20150825git1ed50c92~dfsg-5ubuntu1
Errors were encountered while processing:
/var/cache/apt/archives/jackd1_1%3a0.125.0-2_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code ()
➜ ~

操作log

坑三:Installing pyaudio with pip in a virtualenv

尝试https://stackoverflow.com/questions/35708238/installing-pyaudio-with-pip-in-a-virtualenv,在操作时,安装一个东西会报错!!!

3、最终解决方案

  • 首先在virtualenv中安装pyaudio安装失败,搜索下说要先安装portaudio19-dev:

  https://stackoverflow.com/questions/35708238/installing-pyaudio-with-pip-in-a-virtualenv

  • 安装portaudio19-dev失败,搜索说缺少依赖(依赖版本不对),因此要安装sudo apt-get install jackd2

  https://ubuntuforums.org/showthread.php?t=1680154

  • 之后在虚拟环境中安装(du_tts_stt) ➜ ~ pip install pyaudio,出现因SOCK proxy导致有问题,关闭所有翻墙的服务,重启电脑再次安装OK

  (真是费劲呀,哈哈哈)

之后调用官方的一些demo :http://people.csail.mit.edu/hubert/pyaudio/运行有效果,但是有警告(可以忽略)

4、官方简单DEMO

官方一个简单的录音3S的DEMO:

 """PyAudio example: Record a few seconds of audio and save to a WAVE file."""

 import pyaudio
import wave CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 8000
RECORD_SECONDS = 3
WAVE_OUTPUT_FILENAME = "output.wav" p = pyaudio.PyAudio() stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK) print("* recording") frames = [] for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data) print("* done recording") stream.stop_stream()
stream.close()
p.terminate() wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

官方一个播放上述录制音频的DEMO:

 """PyAudio Example: Play a WAVE file."""

 import pyaudio
import wave
import sys CHUNK = 1024 if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1) wf = wave.open(sys.argv[1], 'rb') p = pyaudio.PyAudio() stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True) data = wf.readframes(CHUNK) while data != '':
stream.write(data)
data = wf.readframes(CHUNK) stream.stop_stream()
stream.close() p.terminate()

参考链接

:: 如果您觉得不错,请推荐给更多人,帮助他们更快地解决实际问题中的坑~


@beautifulzzzz
智能硬件、物联网,热爱技术,关注产品
博客:http://blog.beautifulzzzz.com
园友交流群:414948975

[python] 2、python使用pyaudio进行录音,及其在python虚拟环境virtualenv中安装遇到的问题的更多相关文章

  1. python虚拟环境virtualenv的安装与使用

    如果我们要同时开发多个应用程序,每个应用可能需要各自拥有一套“独立”的Python运行环境,我们可以使用virtualenv解决这个问题,它可以为一个应用创建一套“隔离”的Python运行环境. 一. ...

  2. python虚拟环境virtualenv下安装MySQL-python(1.2.3)

    该文章很有用建议收藏 我们在Windows下开发python应用时,可能需要安装各种第三方模块,但如果又不想污染公共的python环境,怎么办呢?最好是在各自的 python工程中创建一个virtua ...

  3. python虚拟环境virtualenv下安装MySQL-python

    1.先在windows安装:https://github.com/konglingxi/mysqldb_for_python27 2.按照提示将python主环境中的mysqldb相关文件及文件夹移到 ...

  4. Python虚拟环境virtualenv的安装与使用详解(转)

    virtualenv参考:https://www.jb51.net/article/114933.htm virtualenvwrapper参考:https://www.jianshu.com/p/7 ...

  5. Mac配置虚拟环境Virtualenv,安装Python科学计算包详解

    参考: https://www.jianshu.com/p/51140800e8b4 安装 virtualenvwrapper Virtaulenvwrapper是virtualenv的扩展包,可以更 ...

  6. windows下python虚拟环境virtualenv安装和使用

    前面介绍了python在ubuntu16.04环境下,python的虚拟环境virtualenv的安装,下面介绍在windows环境下的安装和使用. 环境信息 操作系统:windows10 pytho ...

  7. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    一.上传文件 上传一个图片 使用input type="file",来上传一个文件.注意:form表单必须添加属性enctype="multipart/form-data ...

  8. 在virtualenv中使用不同的Python版本

    来源:百度SEO公司   我有一个目前使用python 2.5.4运行的Debian系统. 我正确安装了virtualenv,一切正常. 我是否可以将virtualenv与其他版本的Python一起使 ...

  9. Python原来这么好学-1.1节: 在windows中安装Python

    这是一本教同学们彻底学通Python的高质量学习教程,认真地学习每一章节的内容,每天只需学好一节,帮助你成为一名卓越的Python程序员: 本教程面向的是零编程基础的同学,非科班人士,以及有一定编程水 ...

随机推荐

  1. better-scroll不能滚动之 滚动监听-左右联动

    滚动监听 better-scroll 无法滚动的分析,直接翻到最后,看问题汇总,希望能帮助你解决. 借用一下人家这个好看的项目图片,做一个解释.左边的内容会跟右边的内容一起关联,点击左边的菜单,右边会 ...

  2. springboot(十七):使用Spring Boot上传文件

    上传文件是互联网中常常应用的场景之一,最典型的情况就是上传头像等,今天就带着带着大家做一个Spring Boot上传文件的小案例. 1.pom包配置 我们使用Spring Boot最新版本1.5.9. ...

  3. 提取微信小程序“头脑王者”业务逻辑

    产品经理今天让我整理微信小程序"头脑王者"的产品逻辑,花了一天时间在XMind写了写,整理后的内容如图,分享给大家希望大家可以多多点评,互相学习,不知道应该写什么,重要的内容都在图 ...

  4. ESLint 使用入门 - 来自推酷

    在团队协作中,为避免低级 Bug.产出风格统一的代码,会预先制定编码规范.使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量. 在以前的项目中,我们选择 JSHint 和 ...

  5. ASP.NET Core Razor中处理Ajax请求

    如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...

  6. SpringBoot集成security

    本文就SpringBoot集成Security的使用步骤做出解释说明.

  7. RAC+ASM 添加控制文件

    环境介绍:11g RAC 使用 ASM 磁盘组,控制文件只有一个,需要进行添加 参照 MOS 文档 How to Multiplex Control File In RAC Database (文档 ...

  8. android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码

    Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...

  9. c# tolist() 浅析

    在介绍tolist()的时候我先个大家介绍一下linq的延迟加载: var products = new List<Product> { , Category = "Electr ...

  10. Kubernetes volumes简介

    容器中的磁盘文件生命周期比较短暂,在一些比较复杂的容器应用中会产生一些问题.一.容器crash后,kubelet会重启该容器,但这些文件会丢失掉.二.pod中的多个容器经常需要共享文件.因此,Kube ...