Запись и воспроизведение звука одновременно с PyAudio и NumPy - PullRequest
0 голосов
/ 29 января 2019

В настоящее время я могу записывать аудио и сохранять его как массив NumPy.Что мне нужно, так это то, что после записи звука я хочу иметь возможность записывать снова, но одновременно воспроизводить этот массив NumPy

import pyaudio
import numpy

CHUNK = 1024
WIDTH = 2
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(WIDTH),
                channels=CHANNELS,
                rate=RATE,
                input=True,
                output=True,
                frames_per_buffer=CHUNK) 

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(numpy.fromstring(data, dtype=numpy.int16))

numpydata = numpy.hstack(frames)

stream.stop_stream()
stream.close()

p.terminate()

1 Ответ

0 голосов
/ 29 января 2019

Вы можете использовать потоки.Для получения дополнительной информации перейдите к официальной документации здесь Я не очень хорошо умею записывать и воспроизводить аудио, поэтому я только что создал шаблон, который должен работать для вас.

Вот мой пример:

from threading import Thread

def record():
  #Put your recording function here
def play():
  #Put your playing function here

Thread(target = record).start()
Thread(target = play).start()   
#These two start the two functions at the same time. If you want to only run the play
#function after it runs the record function once, you could do something like this:

Вот лучший вариант:

from threading import Thread

def record():
  #Put your recording function here
def play():
  #Put your playing function here

while recorded!=True
  Thread(target = record)
  recorded=True

Thread(target = record).start()
Thread(target = play).start()

Чтобы повторить последние две строки во втором примере, вы можете просто добавитьwhile или for петля.Пожалуйста, не стесняйтесь задавать вопросы в комментариях.

...