bastibe / SoundCard

A Pure-Python Real-Time Audio Library
https://soundcard.readthedocs.io
BSD 3-Clause "New" or "Revised" License
689 stars 70 forks source link

Wav file is empty after recording is saved to file #157

Open MarkoKurtovic opened 2 years ago

MarkoKurtovic commented 2 years ago
import soundcard as sc
import numpy
import soundfile

# get a list of all speakers:
speakers = sc.all_speakers()

# get the current default speaker on your system:
default_speaker = sc.default_speaker()

# get a list of all microphones:
mics = sc.all_microphones()

# get the current default microphone on your system:
default_mic = sc.default_microphone()
one_speaker = sc.get_speaker('IEC958')

# record and play back one second of audio:
data = default_mic.record(samplerate=48000, numframes=48000)
default_speaker.play(data/numpy.max(data), samplerate=48000)

# alternatively, get a `Recorder` and `Player` object
# and play or record continuously:
with default_mic.recorder(samplerate=48000) as mic, \
      default_speaker.player(samplerate=48000) as sp:
    for _ in range(400):
        data = mic.record(numframes=1024)
        sp.play(data)
        soundfile.write("x.wav", data, 1024)
        soundfile.read("x.wav")
MarkoKurtovic commented 2 years ago

I got few seconds of wav file but can't hear anything. I tried to change numframes, no luck

bastibe commented 2 years ago

What sound card are you using? Is it the correct one?

MarkoKurtovic commented 2 years ago

Not sure which one, but recording and playing is working

MarkoKurtovic commented 2 years ago

@bastibe

This is what I get when I print all_speakers() and all_microfons()

<Speaker Logi USB Headset Analog Stereo (2 channels)> [<Microphone Logi USB Headset Analog Mono (1 channels)>, <Microphone HD-Audio Generic Analog Stereo (2 channels)>]

bastibe commented 2 years ago

It might be that the sample rates of your sound cards are out-of-sync. Try reversing the order of play and record.