• Python3.7在win10下安装PyAudio库以及实现音频的录制与播放


    Python3.7 无法安装pyaudio

    度娘的结果基本都是这个,pip install pyaudio.....然而十有八九你的电脑不买账,会报错。

    报错信息:

        running install
        running build
        running build_py
        creating build
        creating buildlib.win-amd64-3.7
        copying srcpyaudio.py -> buildlib.win-amd64-3.7
        running build_ext
        building '_portaudio' extension
        error: [WinError 3] 系统找不到指定的路径。:     
        'D:\VS2015\VC\PlatformSDK\lib'

    或者:

     [WinError 3] 系统找不到指定的路径。: 'C:\Program Files (x86)\Microsoft\v8.1\lib'

    还有....

     

    从网上找到解决Python安装PyAudio库问题基本都是基于Linux系统下的,所以我觉得也有必要写一下这个安装库的方法,分享给到大家。

    我们的解决方法非常简单,就是pip不是不行么,那咱们自己下好了库(PyAudio),安装上不就好了,这就是我们的解决安装等疑难杂症问题的基本思路,对,就是变通;

    到这个地址下载对应的whl

    Python Extension Packages for Windows

    CP37就是python3.7--amd64应该都知道就是系统的位数,选好了再下。

     

    下载好了之后打开“命令提示符”,cd到下载的路径然后,cd命令还不会使的话你该反省一下,去百度一下吧,有很多的。

    注:下面的FileName,就是文件名称,全名。(当然要加上文件格式.whl)

    pip install "FileName"

     

    安装成功测试:

     

    安装成功后我们来写一个实际案例,庆祝一下。

    录制一个4s的wav格式音频文件,

    因为RECORD_SECONDS = 5.

    import pyaudio
    import wave
    
    #定义音频数据参数
    CHUNK = 1024    #
    FORMAT = pyaudio.paInt16
    CHANNELS = 2   #渠道
    RATE = 44100   #
    RECORD_SECONDS = 5
    WAVE_OUTPUT_FILENAME = "Recording.wav"
    
    p = pyaudio.PyAudio()
    
    # 打开数据流
    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)
    
    print("& Start 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()
    
    # 关闭 PyAudio  
    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()

    ok

     

    同理我就直接上代码,音频的播放:

    #引入库
    import wave
    import pyaudio
    
    #定义数据流块
    chunk = 1024
    
    #只读方式打开wav文件
    f = wave.open(r"FilePath","rb")
    
    p = pyaudio.PyAudio()
    
    #打开数据流
    stream = p.open(format = p.get_format_from_width(f.getsampwidth()),
    channels = f.getnchannels(),
    rate = f.getframerate(),
    output = True)
    
    #读取数据
    data = f.readframes(chunk)
    
    #播放FileName.wav
    while data != None:
        stream.write(data)
        data = f.readframes(chunk)
    
    #停止数据流
    stream.stop_stream()
    stream.close()
    
    #关闭 PyAudio
    p.terminate()

     

    文章实例的借鉴学习于:

  • 相关阅读:
    谈谈surging引擎的tcp、http、ws协议和如何容器化部署
    Surging如何使用Swagger 组件测试业务模块
    Ocelot简易教程(七)之配置文件数据库存储插件源码解析
    [转载]Ocelot简易教程(六)之重写配置文件存储方式并优化响应数据
    [转载]Ocelot简易教程(五)之集成IdentityServer认证以及授权
    [转载]Ocelot简易教程(四)之请求聚合以及服务发现
    [转载]Ocelot简易教程(三)之主要特性及路由详解
    [转载]Ocelot简易教程(二)之快速开始2
    [转载]Ocelot简易教程(二)之快速开始1
    Next Permutation
  • 原文地址:https://www.cnblogs.com/wyl-pi/p/10799260.html
Copyright © 2020-2023  润新知