Как записать аудио на Python, не указав длительность заранее - PullRequest
0 голосов
/ 13 июня 2018

Я пишу функцию для записи звука в Python.Я использовал библиотеки как pyaudio для достижения цели.Но проблема в том, что я должен указать продолжительность записи в качестве входных данных.Есть ли способ записать звук, пока пользователь не захочет?

Я нашел способ записать звук на любой срок.Проблема заключается в том, что Ctrl + C останавливает запись и не работает в pycharm.Код выглядит следующим образом.

import sys
import queue
import tempfile
import numpy as np
import sounddevice as sd
import soundfile as sf
assert np


q = queue.Queue()


def callback(indata, frames, time, status):
    """
    This is called from a separate thread for each audio block
    """
    if status:
        print(status, file=sys.stderr)
    q.put(indata.copy())


# Unique file name for every recording
filename = tempfile.mktemp(prefix='untitled_', suffix='.wav', dir='')
# Make sure the file is open before recording anything
with sf.SoundFile(filename, mode='x', samplerate=48000, channels=2) as file:
    with sd.InputStream(samplerate=48000, channels=2, callback=callback):
        print('#' * 80)
        print('press Ctrl+C to stop the recording')
        print('#' * 80)
        while True:
            file.write(q.get())
...