<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>