<div dir="rtl"><div dir="ltr" style>Hello,<br>My name is Tamir Friedman, and I suggest to fix a bug in PlaySound in winsound library. It's doesn't support the SND_MEMORY feature because its accepts only "str" and rejects "bytes" type.<br>
therefore i include the fixed source file:<br>OLD:</div><div dir="ltr" style>----------------------------------------------------------------------------<br><div dir="ltr">static PyObject *</div><div dir="ltr">sound_playsound(PyObject *s, PyObject *args)</div>
<div dir="ltr">{</div><div dir="ltr"> wchar_t *wsound;</div><div dir="ltr"> int flags;</div><div dir="ltr"> int ok;</div><div dir="ltr"><br></div><div dir="ltr"> if (PyArg_ParseTuple(args, "Zi:PlaySound", &wsound, &flags)) {</div>
<div dir="ltr"> if (flags & SND_ASYNC && flags & SND_MEMORY) {</div><div dir="ltr"> /* Sidestep reference counting headache; unfortunately this also</div><div dir="ltr"> prevent SND_LOOP from memory. */</div>
<div dir="ltr"> PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory");</div><div dir="ltr"> return NULL;</div><div dir="ltr"> }</div><div dir="ltr"> Py_BEGIN_ALLOW_THREADS</div>
<div dir="ltr"> ok = PlaySoundW(wsound, NULL, flags);</div><div dir="ltr"> Py_END_ALLOW_THREADS</div><div dir="ltr"> if (!ok) {</div><div dir="ltr"> PyErr_SetString(PyExc_RuntimeError, "Failed to play sound");</div>
<div dir="ltr"> return NULL;</div><div dir="ltr"> }</div><div dir="ltr"> Py_INCREF(Py_None);</div><div dir="ltr"> return Py_None;</div><div dir="ltr"> }</div><div dir="ltr"> return NULL;</div>
<div style>}<br>----------------------------------------------------------------------------<br>NEW:<br>----------------------------------------------------------------------------<br></div><div style><div>static PyObject *</div>
<div>sound_playsound(PyObject *s, PyObject *args)</div><div>{</div><div> wchar_t *wsound;</div><div> int flags;</div><div> int ok;</div><div><br></div><div> if (PyArg_ParseTuple(args, "z*i:PlaySound", &wsound, &flags)) {</div>
<div> if (flags & SND_ASYNC && flags & SND_MEMORY) {</div><div> /* Sidestep reference counting headache; unfortunately this also</div><div> prevent SND_LOOP from memory. */</div>
<div> PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory");</div><div> return NULL;</div><div> }</div><div> Py_BEGIN_ALLOW_THREADS</div><div> ok = PlaySoundW(wsound, NULL, flags);</div>
<div> Py_END_ALLOW_THREADS</div><div> if (!ok) {</div><div> PyErr_SetString(PyExc_RuntimeError, "Failed to play sound");</div><div> return NULL;</div><div> }</div><div>
Py_INCREF(Py_None);</div><div> return Py_None;</div><div> }</div><div> return NULL;</div><div>}</div></div><div style>----------------------------------------------------------------------------<br></div>
</div></div>