NZND 发表于 2020-8-16 22:11:09

求助!关于pyaudio的一个很严重的问题

我最近要录制扬声器的声音,从网上随便找了一个程序,复制粘贴下来,而重点是,我分明有“立体声混音”这个设备,但程序硬要说找不到立体声混音!怎么办!
代码:
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 = 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()

      

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 = True
      while running:
            i = input("请输入操作码:")
            if i == 's':
                running =False
                print("录音已停止")
                rec.stop()               
                t = time.time() - begin
                print('录音时间为%ds'%t)
                #以当前时间为关键字保存wav文件
                rec.save("record/rec_"+datetime.now().strftime("%Y-%m-%d_%H-%M-%S")+".wav")

NZND 发表于 2020-8-16 22:16:41

急啊,谁来帮我啊!

NZND 发表于 2020-8-16 22:17:14

快快快!!!
{:10_266:}

hrp 发表于 2020-8-16 23:59:55

你的立体声混音是不是禁用了

NZND 发表于 2020-8-20 16:30:05

hrp 发表于 2020-8-16 23:59
你的立体声混音是不是禁用了

没有啊
页: [1]
查看完整版本: 求助!关于pyaudio的一个很严重的问题