Comments (6)
This is a big undertaking. I know from experience that implementing these callback interfaces can be quite tricky, and fraught with difficult problems (lack of error signaling, frequent segfaults, timing issues...).
Also, the Windows and Linux side currently do not use the callback interface, so this would require a big re-architecting. The macOS side has some really weird quirks with its callbacks, that we would need to carefully abstract away to make a callback API usable.
And finally, I haven't found callback interfaces to be faster or more reliable than polling interfaces. I would strongly recommend simply using the existing polling interface in a thread, and possibly tie a callback to that instead of using the C callbacks.
But of course I won't stop you, and will try to help wherever I can.
from soundcard.
Thanks for the explanation. I will look into the option of maybe implementing functions that poll gor audio data and call a provided callback function just for the purpose of abstracting polling and providing a more clean interface. If I'll manage to create anything useful I'll create a pull request.
from soundcard.
@bastibe What polling interface? I can't find any info about it in the documentation.
from soundcard.
@RuABraun
You could try something like:
input = soundcard.all_microphones(include_loopback=True)[self.device]
with input.recorder(self._samplerate, blocksize=self._chunksize) as recorder:
data = recorder.record(self._chunksize)
self._callback(data)
from soundcard.
And callback would then do stuff on a separate process is that the idea? My worry is that the second recorder.record() ends you will start skipping samples from the input until you call it again.
Actually I've just realized I can just use concurrent futures with a large enough value for chunk size so that I can do whatever needs to be done before the next buffer is ready.
from soundcard.
@slole, thank you, that's exactly what I meant, yes.
@RuABraun, If your processing code takes (potentially) longer than chunksize
, you might want to put data into a queue, and read that queue from a separate thread.
Be aware, however, that even a separate thread might stall the audio thread enough to drop frames. Audio runs in real time, and real time does not wait for anyone.
Alternatively, write the data to a file or socket, and read that from a separate process. Then you should be safe from dropouts.
from soundcard.
Related Issues (20)
- Watch for moved streams? HOT 1
- Decode error in _CoreAudio.CFString_to_str HOT 2
- feature request - ability to add virtual audio channels. HOT 1
- Why won't it save my audio when I use this with SoundFile? HOT 4
- OSError: ctypes.util.find_library() did not manage to locate a library called 'harfbuzz' please help in windows HOT 2
- Does anyone know how to make this work? HOT 1
- Wav file is empty after recording is saved to file HOT 5
- how to end playback in advance? HOT 2
- Need help with settings HOT 6
- MacOS: Empty result for all_speakers/all_microphones HOT 28
- Record audio unlimited HOT 6
- get mac audio output level HOT 1
- Queation: Is that possible to record based on a button click? HOT 1
- Data loss while recording HOT 4
- Cannot record sound with loopback if silence at start HOT 10
- loopback record audio from speaker return zero array HOT 5
- Problem with the player HOT 1
- how to get non numpy "raw" mono data from the record() method HOT 2
- pluseaudio.py line 3 `import collections` set --> `import collections.abc as collections` HOT 7
- Using version 0.4.2, when recording Xiaomi microphones on Win11, the response was that there was no valid sound in the data, HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from soundcard.