Comments (7)
I don't quite understand your comment. What exactly are you trying to do, and what do you think SoundCard is doing wrong?
from soundcard.
It isn't doing anything wrong, but if one wants to explore a module, it is helpful to hide imports that the developer does not need to see. I changed everything except numpy to start with underscores:
os
-> _os
time
-> _time
And I renamed _Speaker
, _Microphone
, _Player
and _Recorder
so that they are usable. Before,
import soundcard as sc
sc._Speaker
raised an AttributeError
: the module has no attribute _Speaker.
My fork here contains those changes and some linter eyecandy (visual indentation, some new docstrings) but I'm still working on it. I'll create a pull request when I'm happy with it.
from soundcard.
There's a reason for the underscores on _Speaker
, _Microphone
, _Player
, and _Recorder
: They are not meant to be used by users. There is essentially no way for a user to supply them with their required arguments. That's why they are hidden.
As for renaming common imports, do you have a reference for this? I know this practice exists, but I find it profoundly ugly. Could you accomplish a similar goal by specifying an __all__
?
from soundcard.
What exactly are you trying to do
One use case: I was trying to use type annotations for functions that passed around _Microphone
and _Speaker
objects but I couldn't because they're not exported.
Could you accomplish a similar goal by specifying an
__all__
?
Yes, __all__
can include identifiers with underscores; the name alone indicates that it's an internal identifier even if it's exported.
The main downside of __all__
is that it's extra work: you need to keep it up to date for every implementation (pulseaudio/coreaudio/mediafoundation) and then again in __init__.py
(although the code is identical between them all).
from soundcard.
For reference, I've been using this:
__all__ = (
'_Microphone',
'_Player',
'_Recorder',
'_Speaker',
'all_microphones',
'all_speakers',
'default_microphone',
'default_speaker',
'get_microphone',
'get_speaker',
)
(those are the classes that appears to be common, but I've only tested on windows)
from soundcard.
Yes, type annotations are a good reason for accessing these. But then, I think import soundcard._Microphone
is a sensible solution to this problem. It's only four imports, after all.
from soundcard.
If anyone cares enough about this to contribute a pull request, I'll be happy to merge it.
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.