python开发的录音机(一)录制声卡播放的声音(内录)

article/2025/4/7 21:48:00

现在网上用python编写的录音机小软件很多,几乎都不支持内录。

这个小程序的主要功能特点是

1 , 录制电脑上正在播放的声音,即从声卡录制,而不是从麦克风录制,这样就可以将电脑上正在播放的音乐保存下来

2, 不预先指定录制时间,而是根据用户指令开始录音或停止录音,因此要使用多线程技术来实现

实际使用效果

在这里插入图片描述

技术关键点

调用pyaudio模块进行录音,为了实现内录功能,有一个关键点是要找出支持内录的音频输入设备。

为此专门定义了一个方法,找出支持内录的设备的序号

#获取内录设备序号,在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 iprint('无法找到内录设备!')return -1

此外在创建音频输入流时,要通过参数 input_device_index 指定内录设备
相关代码如下:

#在打开输入流时指定输入设备stream = p.open(input_device_index=dev_idx,format=self.FORMAT,channels=self.CHANNELS,rate=self.RATE,input=True,frames_per_buffer=self.CHUNK)

完整的python代码

pyRecorder.py

# _*_ coding: utf-8 _*_# 录音机,用于录制声卡播放的声音(内录)import os
import pyaudio
import threading
import wave
import time
from datetime import datetime#录音类 
class Recorder():def __init__(self, chunk=1024, channels=2, rate=44100):self.CHUNK = chunkself.FORMAT = pyaudio.paInt16self.CHANNELS = channelsself.RATE = rateself._running = Trueself._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 iprint('无法找到内录设备!')return -1#开始录音,开启一个新线程进行录音操作def start(self):threading._start_new_thread(self.__record, ())#执行录音的线程函数def __record(self):self._running = Trueself._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()#结束pyaudiop.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()#结束pyaudiop.terminate()if __name__ == "__main__":#检测当前目录下是否有record子目录if not os.path.exists('record'):os.makedirs('record')print("\npython 录音机 ....\n")print("提示:按 r 键并回车 开始录音\n")    i = input('请输入操作码:')if i == 'r':           rec = Recorder()begin = time.time()print("\n开始录音,按 s 键并回车 停止录音,自动保存到 record 子目录\n")rec.start()running = Truewhile running:i = input("请输入操作码:")if i == 's':running =Falseprint("录音已停止")rec.stop()               t = time.time() - beginprint('录音时间为%ds'%t)#以当前时间为关键字保存wav文件rec.save("record/rec_"+datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+".wav")

将以上内容保存在本地,在安装好python3 及 pyaudio 模块的前提下,执行 python pyRecorder.py 就可以开始录音了。

以上代码在 win10 下测试通过,linux或其它操作系统未测试,可能要做一些小的改动才能正常运行。

补充说明:

在录制网上音乐时,如果想做到:点击网页上的播放按钮时自动开始录音,可参看python录音机的改进版。


http://chatgpt.dhexx.cn/article/LQD55KVq.shtml

相关文章

体验 Linux 音频驱动

目录 一、音频接口简介 1、音频编解码芯片 2、 WM8960 3、I2S总线接口 二、硬件原理图 三、音频驱动使能 三、使能内核的 WM8960 驱动 1、取消 ALSA 模拟 OSS API 2、使能 I.MX6ULL 的 WM8960 驱动 验证 四、alsa-lib 和 alsa-utils 移植 1、alsa-utils 移植 ①、开…

华为电脑如何投屏到电视linux,华为 P30 如何投屏到电脑

北京时间 21:00&#xff0c;华为在巴黎发布了今年第一款旗舰手机——华为 P30。作为主打拍照功能的 P 系列&#xff0c;今年不仅在相机素质上又更上一层楼&#xff0c;还加入了潜望式光学结构镜头&#xff0c;可实现 10 倍的无损变焦和最高50倍的数码变焦。当你拍远处的物体时&…

linux下免费远程控制工具,ToDesk Linux版下载

ToDesk Linux版是一款安全实用且流畅的远程控制软件&#xff0c;可以轻松实现远程控制、文件传输等一系列操作&#xff0c;提升工作生活的效率&#xff0c;为远程客户提供技术支援。全面支持Win10、Win8、Win7、XP、Server 等操作系统,使用简单&#xff0c;操作方便&#xff0c…

linux 音频驱动实验

文章目录 一、音频接口简介1. 为何需要音频编解码芯片2. WM8960简介3. I2S总线接口4. 6u SAI简介 二、硬件原理图三、音频驱动使能1. 修改设备树1. Wm8906 i2c接口设备树2. 6u SAI接口设备树3. I.MX6ULL sound 节点 2. 使能内核的WM89601. 取消 ALSA 模拟 OSS API2. 使能 I.MX6…

ubuntu ffmpeg 录制系统音频

1.安装 kmod sudo apt-get install kmod 2. sudo modprobe snd-aloop 3. ffmpeg -f alsa -i hw:Loopback,1,0 rec.wav 参考&#xff1a;Linux上用ALSA aloop driver实现录制其他程序播放的声音_lsheevyfg的专栏-CSDN博客 没有用ffmpeg-alsa环回录制音频_三行代码http://a…

linux下怎么录视频,Linux下使用RecordMyDesktop进行屏幕录像

屏幕录像的功能对于分享游戏攻略、演示电脑软件的操作是必不可少的。在Windows下可能一般的用户就下载盗版的商业软件来做了。而在GNU/Linux操作系统下&#xff0c;则有现成的自由软件可供使用&#xff0c;只不过没有图形界面罢了&#xff0c;但也同样方便有效。更何况&#xf…

linux屏幕录制_配置Linux进行音乐录制和制作

linux屏幕录制 如果您是一名程序员&#xff0c;您会发现GNU / Linux系统非常强大。 当涉及到视觉艺术&#xff0c;视频&#xff0c;商业或游戏等领域时&#xff0c;您会发现一些具有潜力的工具&#xff0c;但存在许多错误&#xff0c;怪癖和挑战。 在大多数情况下&#xff0c;您…

i.mx536 linux视频录制,linux mint 18.3下录制网站上的视频与声音的软件 vokoscreen 安装与使用...

linux mint 18.3下录制网站上的视频与声音的软件 vokoscreen 2.4.0 的安装与使用 由于的学习的需要&#xff0c;所以总在网上看视频资料。有时&#xff0c;对于有用的资料总想下载下来备份到电脑中&#xff0c;以备以后学习使用方便。但有些视频网站是不允许下载的。在win中有很…

Linux 声音系统

驱动级 OSS 和ALSA OSS&#xff08;Open Sound System&#xff0c;开放声音系统&#xff09;,老系统中的音频框架 ALSA&#xff08;Advanced Linux Sound Architecture&#xff0c;高级Linux声音体系&#xff09;&#xff0c;新系统中的音频框架&#xff0c;用于替代老的OSS。…

python人像录制加声音_Python实现电脑录音(含音频基础知识讲解)

Python实现电脑录音&#xff08;含音频基础知识讲解&#xff09; 前言 今天开始进入近期系列文章的第一篇&#xff0c;如何用 Python 来实现录音功能。 在开始"造轮子"之前&#xff0c;个人一直强调一个观点&#xff0c;如果有些东西已经有了&#xff0c;不妨直接去 …

linux 下 FFmpeg 录制命令

linux 下 FFmpeg 录制命令 转载自&#xff1a;http://blog.topspeedsnail.com/archives/1325 录制屏幕&#xff08;mkv格式&#xff09;&#xff1a; ffmpeg -f x11grab -r 30 -i :0.0 -f alsa -i hw:0,0 -acodec flac -vcodec ffvhuff out.mkv 1 ffmpeg -f x11grab -r 30 -…

linux下录制视频流,Ubuntu Linux 下的PSP视频输出以及录制

前阵子&#xff0c;由于想录个PSP游戏的视频而又不想切到Windows&#xff0c;所以折腾了一下Ubuntu Linux下的办法。 最终算是实现了&#xff0c;以下为方法。 1、工具 需要PSP端视频输出软件&#xff0c;如irshell 5和FreeCheat(FC)&#xff0c;本人用的是FC&#xff0c;irshe…

如何录制电脑系统声音(Audacity)

文章目录 如何录制电脑系统声音什么是AudacityAudacity 如何使用 如何录制电脑系统声音 思路&#xff1a;利用音频录制工具&#xff08;电脑录音软件&#xff09; 电脑自带录音机 现在电脑系统都自带有录音机功能&#xff0c;无需安装&#xff0c;我们直接在开始菜单里面就可…

05_Git命令详解 - CRUD

教程目录 01_版本控制概述 02_Git概述 03_Git下载和安装 04_Git底层原理解析 05_Git命令详解 - CRUD 06_Git命令详解 - 分支 07_Git命令详解 - 后悔药 08_Git远程仓库 Git高层命令 - CRUD 初始化仓库 # 命令 git init 解析&#xff1a;要对现有的某个项目开始用 Git…

java开发中常用的Git命令详解

java开发中常用的Git命令详解&#xff08;IDEA内如何操作&#xff09; 一&#xff1a;写这篇文章的目的是什么&#xff1f;二&#xff1a;使用场景在哪里&#xff1f;1&#xff1a;当我们要使用idea去git仓库拉代码时&#xff0c;首先我们的idea得配置git工具2&#xff1a;项目…

Git 常用命令详解

Git 常用命令详解 1. Git 常用命令1.1 常用git 命令图表汇总1.2 配置个人信息1.3 创建版本库1.4 常用Git命令汇总 2. Git 解决代码冲突3. Git 分支管理4. Git 提交代码4.1 Git本地多次提交合并成一次提交4.1.1 多次提交合并需求4.1.2 多次提交合并Git操作步骤 1. Git 常用命令 …

git命令详解( 五 )

此篇只会来介绍rebase和merge的区别 rebase merge 区别 rebase 下面我们进行一个小练习来练习一下rebase 看一下题目要求&#xff1a; 共有三个特性分支 —— side1 side2 和 side3将这三分支按顺序推送到远程仓库因为远程仓库已经被更新过了&#xff0c;所以我们还要把那些工作…

git add 命令详解

1. 前言 2. git add 基本操作 3. git add 命令参数 4. git add 背后做了什么 1. 前言 众所周知&#xff0c;git 中有工作区、暂存区、版本库三大组成部分 工作区: 电脑中能看到的目录&#xff0c;也就是写代码的地方 暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下…

git命令详解( 四 )

此篇为git命令详解的第四篇&#xff0c;话不多说&#xff0c;我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库&#xff0c;并在远程仓库上合并你的新提交记录。一旦 git push 完成, 你的朋友们就可以从这个远程仓库下载你分享的成…

常用git命令详解

常用git命令 前言&#xff1a; 原链接&#xff1a;生哥哥牛逼(破音) 不争气的生哥哥链接404了&#xff0c;害得我要重新整理 一、概念&#xff1a; 1.基本概念 工作区&#xff1a;就是你在电脑里能看到的目录。 暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .gi…