@@ -89,6 +89,8 @@ pgChannel_New(int);
89
89
#define pgChannel_Check (x ) \
90
90
(PyObject_IsInstance(x, (PyObject *)&pgChannel_Type))
91
91
92
+ static PyObject *
93
+ snd_get_arraystruct (PyObject * self , void * closure );
92
94
static int
93
95
snd_getbuffer (PyObject * , Py_buffer * , int );
94
96
static void
@@ -801,6 +803,37 @@ snd_get_raw(PyObject *self, PyObject *_null)
801
803
(Py_ssize_t )chunk -> alen );
802
804
}
803
805
806
+ static PyObject *
807
+ snd_copy (PyObject * self , PyObject * _null )
808
+ {
809
+ MIXER_INIT_CHECK ();
810
+
811
+ pgSoundObject * newSound =
812
+ (pgSoundObject * )pgSound_Type .tp_new (& pgSound_Type , NULL , NULL );
813
+
814
+ PyObject * kwargs = PyDict_New ();
815
+ PyObject * key = PyUnicode_FromString ("buffer" );
816
+ PyObject * bytes = snd_get_raw (self , NULL );
817
+ if (PyDict_SetItem (kwargs , key , bytes ) < 0 ) {
818
+ // exception set already
819
+ Py_DECREF (key );
820
+ Py_DECREF (bytes );
821
+ Py_DECREF (kwargs );
822
+ return NULL ;
823
+ }
824
+ Py_DECREF (key );
825
+ Py_DECREF (bytes );
826
+
827
+ if (sound_init ((PyObject * )newSound , NULL , kwargs ) != 0 ) {
828
+ Py_DECREF (kwargs );
829
+ Py_DECREF (newSound );
830
+ return RAISE (pgExc_SDLError , "Failed to initialize copied sound" );
831
+ }
832
+
833
+ Py_DECREF (kwargs );
834
+ return (PyObject * )newSound ;
835
+ }
836
+
804
837
static PyObject *
805
838
snd_get_arraystruct (PyObject * self , void * closure )
806
839
{
@@ -858,6 +891,8 @@ PyMethodDef sound_methods[] = {
858
891
{"get_volume" , snd_get_volume , METH_NOARGS , DOC_MIXER_SOUND_GETVOLUME },
859
892
{"get_length" , snd_get_length , METH_NOARGS , DOC_MIXER_SOUND_GETLENGTH },
860
893
{"get_raw" , snd_get_raw , METH_NOARGS , DOC_MIXER_SOUND_GETRAW },
894
+ {"copy" , snd_copy , METH_NOARGS , DOC_MIXER_SOUND_COPY },
895
+ {"__copy__" , snd_copy , METH_NOARGS , DOC_MIXER_SOUND_COPY },
861
896
{NULL , NULL , 0 , NULL }};
862
897
863
898
static PyGetSetDef sound_getset [] = {
0 commit comments