Проблема использования процессора Pyaudio при использовании в потоке - PullRequest
0 голосов
/ 12 марта 2020
import time
import pyaudio
def getAudioIndex(deviceName):
    """
    get index of microphone
    """
    p = pyaudio.PyAudio()
    info = p.get_host_api_info_by_index(0)
    numdevices = info.get('deviceCount')
    MIC_DEVICE = 0
    for i in range(0, numdevices):
            if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
                i_index = i
                name = p.get_device_info_by_host_api_device_index(0, i).get('name')
                if name.find(deviceName) != -1:
                    print("found device, index: " + str(i_index) )
                    MIC_DEVICE = i_index
    return MIC_DEVICE


pa = pyaudio.PyAudio()
stream = pa.open(format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=2048,
input_device_index=getAudioIndex('ReSpeaker 4 Mic Array'))


def read():
    while True:
        chunk = stream.read(2048)
        print(chunk)

read()

Мои программы просто воспроизводят потоковое аудио и распечатывают данные. вот процессор, когда он запускается в основном потоке: b

и когда я помещаю функцию в поток:

# read()

from threading import Thread, Event

thread = Thread(target=read, daemon=True)
thread.daemon = True
thread.start()


while True:
    pass

это всегда 100% ?? ??? a

Может кто-нибудь помочь мне с этим? Я не могу понять, почему процессор перегружен в потоке. спасибо алоц

...