Record and play continuously
pablodz opened this issue · 5 comments
Hello there,
what if I want and play continously? I mean, creating the object in the backend and just adding the data as is received: not creating the microphone object, capture the data and delete the microphone object.
Similar errors:
#94
Can you try if the issue persists if you install the latest development version from here (github) instead of pypi?
For the problem
Assertion 's' failed at pulse/stream.c:1411, function pa_stream_connect_record(). Aborting.
Aborted
via pypi SoundCard==0.4.0 was the problem, now I have installed by source
git clone https://github.com/bastibe/SoundCard
cd SoundCard
sudo python3 setup.py install
and works without the initial error. However in the system appears that a mic is being created, capturing data and finally deleted (video). So, as I mention at the beginning, I think will be better if the mic is open and then we just capture the data as is received. Is this possible with soundcard?
simplescreenrecorder-2021-03-10_13.43.32.mp4
Thanks in advance.
Well, after a while and checking test_soundcard.py here is the solution, works well: this can be loaded in a python thread and we can process the array instead of adding latency saving files
File
# Taken from https://github.com/bastibe/SoundCard
import soundcard as sc
import soundfile as sf
import numpy
import time
# get the current default microphone on your system:
default_mic = sc.default_microphone()
# alternatively, get a `Recorder` and `Player` object
# and play or record continuously:
record_object=default_mic.recorder(44100, channels=1, blocksize=256)
print(record_object)
seconds=0.5
numframes=int(44100*seconds)
max_iterations=100
expected_time_array=numpy.arange(seconds,(max_iterations+1)*seconds,seconds)
my_audio_streaming=[]
with record_object as r:
start_time=time.time()
for number in range(max_iterations):
data=r.record(numframes)
my_audio_streaming.append(data)
# sf.write('temporal/pysoundcard_record_continously_{}.wav'.format(number), data, 44100, 'PCM_32') # add more seconds, not recommended
now=time.time()
print("[{}] \tReal: {} \tExpected: {} \tNumframes:{}".format(number, round(now-start_time,4),expected_time_array[number],numframes))
Output:
<soundcard.pulseaudio._Recorder object at 0x7ff71b24ca50>
[0] Real: 0.4972 Expected: 0.5 Numframes:22050
[1] Real: 0.9985 Expected: 1.0 Numframes:22050
[2] Real: 1.4986 Expected: 1.5 Numframes:22050
[3] Real: 1.9974 Expected: 2.0 Numframes:22050
[4] Real: 2.4977 Expected: 2.5 Numframes:22050
[5] Real: 2.9989 Expected: 3.0 Numframes:22050
[6] Real: 3.497 Expected: 3.5 Numframes:22050
[7] Real: 3.9976 Expected: 4.0 Numframes:22050
[8] Real: 4.4993 Expected: 4.5 Numframes:22050
[9] Real: 4.9978 Expected: 5.0 Numframes:22050
[10] Real: 5.4982 Expected: 5.5 Numframes:22050
[11] Real: 5.998 Expected: 6.0 Numframes:22050
[12] Real: 6.4974 Expected: 6.5 Numframes:22050
[13] Real: 6.998 Expected: 7.0 Numframes:22050
[14] Real: 7.4974 Expected: 7.5 Numframes:22050
[15] Real: 7.9981 Expected: 8.0 Numframes:22050
[16] Real: 8.4992 Expected: 8.5 Numframes:22050
[17] Real: 8.9992 Expected: 9.0 Numframes:22050
[18] Real: 9.4984 Expected: 9.5 Numframes:22050
[19] Real: 9.9975 Expected: 10.0 Numframes:22050
[20] Real: 10.4987 Expected: 10.5 Numframes:22050
[21] Real: 10.9992 Expected: 11.0 Numframes:22050
[22] Real: 11.5002 Expected: 11.5 Numframes:22050
[23] Real: 11.9999 Expected: 12.0 Numframes:22050
[24] Real: 12.4991 Expected: 12.5 Numframes:22050
[25] Real: 12.9979 Expected: 13.0 Numframes:22050
[26] Real: 13.499 Expected: 13.5 Numframes:22050
[27] Real: 13.9978 Expected: 14.0 Numframes:22050
[28] Real: 14.4973 Expected: 14.5 Numframes:22050
[29] Real: 14.9993 Expected: 15.0 Numframes:22050
[30] Real: 15.4986 Expected: 15.5 Numframes:22050
[31] Real: 15.9981 Expected: 16.0 Numframes:22050
[32] Real: 16.4993 Expected: 16.5 Numframes:22050
[33] Real: 16.9978 Expected: 17.0 Numframes:22050
[34] Real: 17.4996 Expected: 17.5 Numframes:22050
[35] Real: 17.9984 Expected: 18.0 Numframes:22050
[36] Real: 18.4988 Expected: 18.5 Numframes:22050
[37] Real: 18.9998 Expected: 19.0 Numframes:22050
[38] Real: 19.4985 Expected: 19.5 Numframes:22050
[39] Real: 19.9975 Expected: 20.0 Numframes:22050
[40] Real: 20.4979 Expected: 20.5 Numframes:22050
[41] Real: 20.9976 Expected: 21.0 Numframes:22050
[42] Real: 21.4987 Expected: 21.5 Numframes:22050
[43] Real: 22.0 Expected: 22.0 Numframes:22050
[44] Real: 22.5047 Expected: 22.5 Numframes:22050
[45] Real: 23.0025 Expected: 23.0 Numframes:22050
[46] Real: 23.5039 Expected: 23.5 Numframes:22050
[47] Real: 24.005 Expected: 24.0 Numframes:22050
[48] Real: 24.5048 Expected: 24.5 Numframes:22050
[49] Real: 25.0032 Expected: 25.0 Numframes:22050
[50] Real: 25.5042 Expected: 25.5 Numframes:22050
[51] Real: 26.0036 Expected: 26.0 Numframes:22050
[52] Real: 26.5039 Expected: 26.5 Numframes:22050
[53] Real: 27.0044 Expected: 27.0 Numframes:22050
[54] Real: 27.5028 Expected: 27.5 Numframes:22050
[55] Real: 28.0037 Expected: 28.0 Numframes:22050
[56] Real: 28.5021 Expected: 28.5 Numframes:22050
[57] Real: 29.0093 Expected: 29.0 Numframes:22050
[58] Real: 29.4998 Expected: 29.5 Numframes:22050
[59] Real: 30.0018 Expected: 30.0 Numframes:22050
[60] Real: 30.5007 Expected: 30.5 Numframes:22050
[61] Real: 31.0036 Expected: 31.0 Numframes:22050
[62] Real: 31.5032 Expected: 31.5 Numframes:22050
[63] Real: 32.0056 Expected: 32.0 Numframes:22050
[64] Real: 32.5036 Expected: 32.5 Numframes:22050
[65] Real: 33.0001 Expected: 33.0 Numframes:22050
[66] Real: 33.5085 Expected: 33.5 Numframes:22050
[67] Real: 34.0039 Expected: 34.0 Numframes:22050
[68] Real: 34.5017 Expected: 34.5 Numframes:22050
[69] Real: 35.0092 Expected: 35.0 Numframes:22050
[70] Real: 35.5033 Expected: 35.5 Numframes:22050
[71] Real: 36.0046 Expected: 36.0 Numframes:22050
[72] Real: 36.5116 Expected: 36.5 Numframes:22050
[73] Real: 37.0062 Expected: 37.0 Numframes:22050
[74] Real: 37.5051 Expected: 37.5 Numframes:22050
[75] Real: 38.0013 Expected: 38.0 Numframes:22050
[76] Real: 38.5004 Expected: 38.5 Numframes:22050
[77] Real: 39.0009 Expected: 39.0 Numframes:22050
[78] Real: 39.501 Expected: 39.5 Numframes:22050
[79] Real: 40.0009 Expected: 40.0 Numframes:22050
[80] Real: 40.4996 Expected: 40.5 Numframes:22050
[81] Real: 41.0078 Expected: 41.0 Numframes:22050
[82] Real: 41.4988 Expected: 41.5 Numframes:22050
[83] Real: 41.9999 Expected: 42.0 Numframes:22050
[84] Real: 42.5011 Expected: 42.5 Numframes:22050
[85] Real: 43.0009 Expected: 43.0 Numframes:22050
[86] Real: 43.4994 Expected: 43.5 Numframes:22050
[87] Real: 44.0091 Expected: 44.0 Numframes:22050
[88] Real: 44.4984 Expected: 44.5 Numframes:22050
[89] Real: 45.0095 Expected: 45.0 Numframes:22050
[90] Real: 45.4999 Expected: 45.5 Numframes:22050
[91] Real: 46.0007 Expected: 46.0 Numframes:22050
[92] Real: 46.4993 Expected: 46.5 Numframes:22050
[93] Real: 47.009 Expected: 47.0 Numframes:22050
[94] Real: 47.5094 Expected: 47.5 Numframes:22050
[95] Real: 48.0056 Expected: 48.0 Numframes:22050
[96] Real: 48.5014 Expected: 48.5 Numframes:22050
[97] Real: 49.0092 Expected: 49.0 Numframes:22050
[98] Real: 49.509 Expected: 49.5 Numframes:22050
[99] Real: 49.9976 Expected: 50.0 Numframes:22050
However in the system appears that a mic is being created, capturing data and finally deleted (video)
I think that is just how pulseaudio works when capturing an output. But I might be wrong.
Anyway, I'm glad you found a solution to your problem. I'll try to release a new version of SoundCard, soon.