I am trying to see if I can get PyAudio to record from my USB microphone on my Kubuntu computer. When I run this script, it does create a file, but the file contains no audio. Not even background white noise. I can confirm that my microphone works in the audio device settings and in OBS. The first print statement does display the correct device name. I am using the following code:
import pyaudioimport waveFRAMES_PER_BUFFER = 1024FORMAT = pyaudio.paInt16CHANNELS = 1RATE = 48000RECORD_SECONDS = 2WAVE_OUTPUT_FILENAME = "voice.wav"audio = pyaudio.PyAudio()stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=FRAMES_PER_BUFFER, input_device_index=2)print("recording from device " + str(audio.get_device_info_by_host_api_device_index(0, 2).get('name')))frames = []for i in range(0, int(RATE / FRAMES_PER_BUFFER * RECORD_SECONDS)): data = stream.read(FRAMES_PER_BUFFER) frames.append(data)print("done recording")stream.stop_stream()stream.close()audio.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(audio.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close()
It creates the following output:
ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rearALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfeALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.sideALSA lib pcm_route.c:877:(find_matching_chmap) Found no matching channel mapCannot connect to server socket err = No such file or directoryCannot connect to server request channeljack server is not running or cannot be startedJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockCannot connect to server socket err = No such file or directoryCannot connect to server request channeljack server is not running or cannot be startedJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dspALSA lib pcm_oss.c:397:(_snd_pcm_oss_open) Cannot open device /dev/dspALSA lib confmisc.c:160:(snd_config_get_card) Invalid field cardALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'ALSA lib confmisc.c:160:(snd_config_get_card) Invalid field cardALSA lib pcm_usb_stream.c:482:(_snd_pcm_usb_stream_open) Invalid card 'card'Cannot connect to server socket err = No such file or directoryCannot connect to server request channeljack server is not running or cannot be startedJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockJackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlockrecording from device USB Audio Device: - (hw:1,0)done recording
I tried running the script with sudo, but it didn't seem to change anything. I changed some PulseAudio settings to make it ignore my USB microphone because at first the script wasn't detecting the microphone at all. It recognizes the microphone now, but it's still creating empty audio files.