[python]python利用pyaudio录制系统声音没有立体声混音怎么录制系统音频

news2025/4/21 17:02:44

当电脑没有立体声混音导致Python写代码无法使用pyaudio进行录制系统声音怎么办?查阅资料和安装驱动等方法都不行,难道没办法了吗?那为什么电脑其他软件可以做到呢?因此研究了一下pyaudio在没有立体声混音情况下确实无法录制声音,而且其他比较流行的录制声音模块都试过不行,比如scikit声音模块,因此找到一个模块能录制系统声音,尤其speaker声音很重要,否则python编程没法录制系统声音岂不是表明自己编程太烂了?最终发现一个模块十分好用而且可以录制系统声音不需要设置什么立体声混音操作。我的电脑是暗影精灵6plus结果根本没有立体声混音如下:

 

正常情况下人家是这样的

 

但是我尝试了很多方法甚至重装声卡驱动都没用,据说是主板不支持。难道python就没法用系统录音了吗,如果有立体声混音一般用下面代码即可录制

import numpy as np
from PIL import ImageGrab
import cv2
import pyaudio
import threading
import wave
import time
import ffmpeg
import getpass
import subprocess
import os

# 录音类
class Recorder():
    def __init__(self, chunk=1024, channels=2, rate=44100):
        self.CHUNK = chunk
        self.FORMAT = pyaudio.paInt16
        self.CHANNELS = channels
        self.RATE = rate
        self._running = True
        self._frames = []

    # 获取内录设备序号,在windows操作系统上测试通过,hostAPI = 0 表明是MME设备
    def findInternalRecordingDevice(self, p):
        # 要找查的设备名称中的关键字
        target = '立体声混音'
        # 逐一查找声音设备
        for i in range(p.get_device_count()):
            devInfo = p.get_device_info_by_index(i)
            if devInfo['name'].find(target) >= 0 and devInfo['hostApi'] == 0:
                # print('已找到内录设备,序号是 ',i)
                return i
        print('无法找到内录设备!')
        return -1

    # 开始录音,开启一个新线程进行录音操作
    def start(self):
        threading._start_new_thread(self.__record, ())

    # 执行录音的线程函数
    def __record(self):
        self._running = True
        self._frames = []

        p = pyaudio.PyAudio()
        # 查找内录设备
        dev_idx = self.findInternalRecordingDevice(p)
        if dev_idx < 0:
            return
        # 在打开输入流时指定输入设备
        stream = p.open(input_device_index=dev_idx,
                        format=self.FORMAT,
                        channels=self.CHANNELS,
                        rate=self.RATE,
                        input=True,
                        frames_per_buffer=self.CHUNK)
        # 循环读取输入流
        while (self._running):
            data = stream.read(self.CHUNK)
            self._frames.append(data)

        # 停止读取输入流
        stream.stop_stream()
        # 关闭输入流
        stream.close()
        # 结束pyaudio
        p.terminate()
        return

    # 停止录音
    def stop(self):
        self._running = False

    # 保存到文件
    def save(self, fileName):
        # 创建pyAudio对象
        p = pyaudio.PyAudio()
        # 打开用于保存数据的文件
        wf = wave.open(fileName, 'wb')
        # 设置音频参数
        wf.setnchannels(self.CHANNELS)
        wf.setsampwidth(p.get_sample_size(self.FORMAT))
        wf.setframerate(self.RATE)
        # 写入数据
        wf.writeframes(b''.join(self._frames))
        # 关闭文件
        wf.close()
        # 结束pyaudio
        p.terminate()

# ffmpeg将音视频合并
def comband_av(AUDIO, VIDEO):  # 音频视频合并
    os.getcwd()
    user_name = getpass.getuser()
    str_txt = 'C:/Users/' + user_name + '/Desktop/'
    os.chdir(str_txt)
    cmd = f"ffmpeg -i {AUDIO} -i {VIDEO} comband_va.mp4 -y"
    subprocess.call(cmd, shell=True)


if __name__ == "__main__":
    os.getcwd()
    user_name = getpass.getuser()
    str_txt = 'C:/Users/' + user_name + '/Desktop/'
    os.chdir(str_txt)
    # 设置录制参数
    SCREEN_SIZE = (2560, 1600)
    FILENAME = 'recorded_video.avi'
    FPS = 30.0
    # 开始录制画面
    fourcc = cv2.VideoWriter_fourcc(*"XVID")
    out = cv2.VideoWriter(FILENAME, fourcc, FPS, SCREEN_SIZE)
    # 开始录制音频
    rec = Recorder()
    begin = time.time()
    rec.start()

    cnt = 0
    print('recording..')
    while True:
        # 获取屏幕截图
        # img = pyautogui.screenshot()
        img = ImageGrab.grab(bbox=(0, 0, 2560, 1600))
        # 转换为OpenCV格式
        frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        # 写入视频文件
        out.write(frame)
        # cv2.imshow('Frame', frame)
        # cv2.resizeWindow('Frame', 1920, 1080)

        # # 检测按键
        # if cv2.waitKey(1) == ord('q'):
        #     break

        cnt = cnt + 1
        if cnt == 300:
            rec.stop()
            t = time.time() - begin
            print('录制时间为%ds' % t)
            rec.save("recorded_audio.wav")
            break

    # 停止录制
    out.release()
    cv2.destroyAllWindows()
    comband_av("recorded_audio.wav", "recorded_video.avi")  # 音频文件名,视频文件名自定义

 但是立体声混音,在声音设备根本没有,因此找到一个模块可以很好解决录制系统声音问题,视频演示如下:

python利用pyaudio录制系统声音没有立体声混音怎么录制系统音频_哔哩哔哩_bilibili当电脑没有立体声混音导致Python写代码无法使用pyaudio进行录制系统声音怎么办?查阅资料和安装驱动等方法都不行,难道没办法了吗?那为什么电脑其他软件可以做到呢?因此研究了一下pyaudio在没有立体声混音情况下确实无法录制声音,而且其他录制声音模块都试过不行,因此找到一个模块能录制系统声音,尤其speaker声音很重要,否则python编程没法录制系统声音岂不是表明自己编程太烂了?最终发现, 视频播放量 5、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:地表最强模糊图片变清晰软件Topaz Photo AI2.2.2去升级集成全部离线模型完整版 ,最新版本解压即用,超强超稳定,一键抠图,无损放大,附赠模型,基于yolov8+bytetrack实现目标追踪视频演示,用opencv和onnxruntime去部署yolov5-7-8,C#opencvsharp进行图片拼接图像的stitch拼接,基于yolov8+deepsort实现目标追踪视频演示,yolov3 yolov4 yolov7训练助手2.1支持yolov7一键训练全程不用写代码傻瓜式操作,使用C++部署yolov8的onnx和bytetrack实现目标追踪,基于yolov3口罩检测识别系统训练和测试,使用C#的winform部署yolov8的onnx实例分割模型,将yolov5-6.2封装成一个类几行代码完成语义分割任务icon-default.png?t=N7T8https://www.bilibili.com/video/BV1qc411k7En/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee

 源码下载地址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1346407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据模型设计

数据模型设计&#xff0c;可以理解为数据库中的表结构设计。 我们在设计器中创建的数据模型&#xff0c;也称为实体。我们将前端页面中传过来的数据保存到对应的实体中&#xff0c;即为将前端数据保存到了数据库中。 1 、实体与枚举的创建 1 .1 创建供应商 supplier实体 在左…

MySQL基础学习: 由delete和insert操作导致的死锁问题

一、问题复现&#xff1a;表结构 CREATE TABLE user_props (user_id bigint NOT NULL ,prop_key varchar(100) NOT NULL ,prop_value varchar(100) NOT NULL,PRIMARY KEY (user_id,prop_key) )二、死锁测试 &#xff08;1&#xff09;开启两个事务 &#xff08;2&#xff09;…

基于微信小程序的停车预约系统设计与实现

基于微信小程序的停车预约系统设计与实现 项目概述 本项目旨在结合微信小程序、后台Spring Boot和MySQL数据库&#xff0c;打造一套高效便捷的停车预约系统。用户通过微信小程序进行注册、登录、预约停车位等操作&#xff0c;而管理员和超级管理员则可通过后台管理系统对停车…

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操作。 如果出现模块报错 进入控制台输入&#xff…

【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 软件工程 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言&#xff1a; 正文 敏捷开发&#xff08;Agile Development&#xff09; 详细介绍&#xff1a; 优缺点&#xff1a; 优点&#xf…

(2023)PanGu-Draw:通过时间解耦训练和可重用的 Coop-Diffusion 推进资源高效的文本到图像合成

PanGu-Draw: Advancing Resource-Efficient Text-to-Image Synthesis with Time-Decoupled Training and Reusable Coop-Diffusion 公众&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要…

php的laravel权限问题

1.这是我新建的一个路由&#xff0c;然后就是说每新建一个路由都要给他开个权限&#xff01;&#xff01;&#xff01;&#xff01; 2.这个是组内大佬写的&#xff1a; 我们也可以在里面加&#xff0c;也可以在浏览器的页面手动加&#xff08;对我们新手来说还是浏览器的页面…

使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题

开始使用富文本组件editor时&#xff0c;不知如何调用相关API设置富文本内容和获取内容&#xff0c;本文将举例详解 目录 一.了解editor组件的常用属性及相关API 1.属性常用说明 2.富文本相关API说明 1&#xff09;editorContext 2&#xff09; editorContext.setContents…

JVM 常用知识和面试题

1. 什么是JVM内存结构&#xff1f; jvm将虚拟机分为5大区域&#xff0c;程序计数器、虚拟机栈、本地方法栈、java堆、方法区&#xff1b; 程序计数器&#xff1a;线程私有的&#xff0c;是一块很小的内存空间&#xff0c;作为当前线程的行号指示器&#xff0c;用于记录当前虚拟…

Avalonia学习(十五)-OxyPlot

今天开始继续Avalonia练习。展示一些样例&#xff0c;尤其是第三方库的使用。 本节&#xff1a;OxyPlot 1.引入OxyPlot.Avalonia 2.项目引入 在Main方法里增加OxyPlotModule.EnsureLoaded()方法调用。 public static void Main(string[] args) {OxyPlotModule.EnsureLoade…

Java线程池ThreadPoolExecutor源码解析

Java线程池ThreadPoolExecutor源码解析 1.ThreadPoolExecutor的构造实现 以jdk8为准&#xff0c;常说线程池有七大参数&#xff0c;通常而言&#xff0c;有四个参数是比较重要的 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit …

python3处理xls并flask显示

前言&#xff1a; 工作中有需求对xls文件进行生成和显示&#xff0c;这里就将对应的xls文件的处理&#xff0c;读取和flask展示代码罗列出来&#xff0c;方便大家使用&#xff1a; 需要的模块&#xff0c;这里需要注意版本号&#xff0c;如果直接安装使用报错&#xff0c;就指…

Tensorflow2.X的GPU版框架最快最稳搭建方法

一、环境基础 Windows10以上 已装Anaconda 支持GPU 二、搭建步骤 1. 在Anaconda中创建并进入虚拟环境 conda create -n envname python3.8 conda activate envname 注意&#xff1a;envname 替换为你自己想命名的&#xff0c;下文将以“Ljdenv”出现 2.安…

微服务实战系列之Dubbo(下)

前言 眼看着2023即将走远&#xff0c;心里想着似乎还有啥&#xff0c;需要再跟各位盆友叨叨。这不说曹操&#xff0c;曹操就来了。趁着上一篇Dubbo博文的余温尚在&#xff0c;博主兴匆匆地“赶制”了Dubbo的下集&#xff0c;以飨读者。 上一篇博主依然从Dubbo的内核出发&#…

几代WiFi有什么差异,它们有什么区别

最典型的差异指标&#xff1a;单流传输速率 第一代 基于的标准&#xff1a; 802.11 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;2Mbit/s 第二代 基于的标准&#xff1a; 802.11b 使用频率&#xff1a;2.4GHz 单流最大传输速率&#xff1a;11Mbit/s 第三代 …

python文件打包实战技巧

众所周知&#xff0c;python是一种脚本语言&#xff0c;python程序必须在python环境下运行&#xff0c;所以如果想把自己写的程序给别人看的话&#xff0c;就比较麻烦&#xff0c;他需要先配置python环境&#xff0c;对于电脑小白来说这是“要命”的事情。而且如果是客户的话&a…

【SD】inpaint 模型 - 换脸术 ☑

文生图-局部重绘 涂抹脸部 关键词添加lora&#xff1a; <lora:Naruto_zilaiye:1.5>, 生成图&#xff1a;

Python 中的运算符介绍(1)

算数运算符 常见的% 、//、/ 用法 赋值运算符 赋值运算&#xff1a;将等号右边赋值给等号左边 常见场景&#xff1a; 比较运算符 代码解析&#xff1a; 逻辑运算符 位运算符&#xff08;了解&#xff09; 三目运算符 身份证运算符 成员运算符

uniApp中uView组件库的丰富单元格方法

目录 基础功能 #自定义内容 #自定义大小 #展示右箭头 #跳转页面 #右侧内容垂直居中 #自定义插槽 当谈到uniapp的uView组件库中的单元格&#xff08;Cell&#xff09;方法时&#xff0c;我们需要了解它的基本功能和用法。 单元格是一种常用的UI元素&#xff0c;在移动应…

每日一题——LeetCode977

方法一 个人方法&#xff1a; 以示例1为例&#xff1a;把[-4,-1,0,3,10] 中n<0的元素拆分出来&#xff0c;把他们的平方从小到大放入arr数组&#xff0c;则arr[0,1,16] ,那数组就还剩[3,10] 对于剩下的元素&#xff0c;看arr里面有没有比他们平方更小的元素先放入res数组&…