Skip to content

Commit 3c8f666

Browse files
authored
Merge pull request #3617 from rhendric/rhendric/AudioDevice-None
Support devicename=None in _sdl2.AudioDevice
2 parents 7325850 + e0b4055 commit 3c8f666

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

buildconfig/stubs/pygame/_sdl2/audio.pyi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from collections.abc import Callable
2+
from typing import Optional
23

34
AUDIO_U8: int
45
AUDIO_S8: int
@@ -25,7 +26,7 @@ def get_audio_device_names(iscapture: bool = False) -> list[str]: ...
2526
class AudioDevice:
2627
def __init__(
2728
self,
28-
devicename: str,
29+
devicename: Optional[str],
2930
iscapture: bool,
3031
frequency: int,
3132
audioformat: int,
@@ -39,7 +40,7 @@ class AudioDevice:
3940
@property
4041
def deviceid(self) -> int: ...
4142
@property
42-
def devicename(self) -> str: ...
43+
def devicename(self) -> Optional[str]: ...
4344
@property
4445
def callback(self) -> Callable[[AudioDevice, memoryview], None]: ...
4546
@property

src_c/cython/pygame/_sdl2/audio.pyx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ cdef class AudioDevice:
131131
memset(&self.desired, 0, sizeof(SDL_AudioSpec))
132132
self._iscapture = iscapture
133133
self._callback = callback
134-
if not isinstance(devicename, str):
135-
raise TypeError("devicename must be a string")
134+
if devicename is not None and not isinstance(devicename, str):
135+
raise TypeError("devicename must be a string or None")
136136
self._devicename = devicename
137137

138138
self.desired.freq = frequency;
@@ -142,8 +142,17 @@ cdef class AudioDevice:
142142
self.desired.callback = <SDL_AudioCallback>recording_cb;
143143
self.desired.userdata = <void*>self
144144

145+
cdef bytes devicename_bytes
146+
cdef const char* devicename_ptr
147+
148+
if self._devicename is None:
149+
devicename_ptr = NULL
150+
else:
151+
devicename_bytes = self._devicename.encode("utf-8")
152+
devicename_ptr = devicename_bytes
153+
145154
self._deviceid = SDL_OpenAudioDevice(
146-
self._devicename.encode("utf-8"),
155+
devicename_ptr,
147156
self._iscapture,
148157
&self.desired,
149158
&self.obtained,

0 commit comments

Comments
 (0)