Получение ALSA lib pcm. c неизвестная ошибка карт PCM при записи с использованием pyaudo - PullRequest
0 голосов
/ 26 мая 2020

Я хотел создать приложение kivy, которое записывает аудио-звук до тех пор, пока кнопка записи не будет нажата в пользовательском интерфейсе kivy. Для этого использовались следующие функции. Функция start record вызывается, когда кнопка нажата, а stop_record - вызывается при отпускании кнопки. В функции начала записи повторное преобразование выполняется до тех пор, пока общая переменная st == 1 не прерывается, когда st становится равным 0. Запись идет с предупреждением в первый раз, когда я нажимаю кнопку. Но после второго нажатия я получаю пустые файлы с ошибками ниже в терминале. Я использую ubuntu 18.

import multiprocessing
import csv
import wave
import pyaudio
st=multiprocessing.Value('i',1)
frames=[]

def start_record(self,st):
    """Records the audio until self.st variable is True and saves to file."""

  frames = []
  stream = pyaudio.PyAudio().open(format=pyaudio.paInt16, channels=2,  rate=44100, input=True, frames_per_buffer=3024)
  while st.value == 1:
    data = stream.read(3024)
    frames.append(data)
    print("* recording")

  stream.close()
  filename=''.join(random.choice(string.ascii_lowercase) for i in range(12))
  filename=filename+'.wav'
  loc='./Data/wavs/'+filename
  wf = wave.open(loc,'wb')
  wf.setnchannels(2)
  wf.setsampwidth(pyaudio.PyAudio().get_sample_size(pyaudio.paInt16))
  wf.setframerate(44100)
  wf.writeframes(b''.join(frames))
  wf.close()
  with open('./Data/transcripts.csv','a+') as csvfile:
    csvwriter=csv.writer(csvfile,delimiter=' ')
    csvwriter.writerow([f'{filename}|'+self.ids.txtread.text])


def stop_record(self,st):
    with st.get_lock():
        st.value=0

def ssrecord(self):
    global st
    if __name__ == '__main__':
        multiprocessing.Process(target=self.start_record,args=[st]).start()
def strecord(self):
    global st
    if __name__ == '__main__':
        multiprocessing.Process(target=self.stop_record,args=[st]).start()
...