PyMODINIT_FUNC PyInit_ossaudiodev(void) { PyObject *m; if (PyType_Ready(&OSSAudioType) < 0) return NULL; if (PyType_Ready(&OSSMixerType) < 0) return NULL; m = PyModule_Create(&ossaudiodevmodule); if (m == NULL) return NULL; OSSAudioError = PyErr_NewException("ossaudiodev.OSSAudioError", NULL, NULL); if (OSSAudioError) { /* Each call to PyModule_AddObject decrefs it; compensate: */ Py_INCREF(OSSAudioError); Py_INCREF(OSSAudioError); PyModule_AddObject(m, "error", OSSAudioError); PyModule_AddObject(m, "OSSAudioError", OSSAudioError); } /* Build 'control_labels' and 'control_names' lists and add them to the module. */ if (build_namelists(m) == -1) /* XXX what to do here? */ return NULL; /* Expose the audio format numbers -- essential! */ _EXPORT_INT(m, AFMT_QUERY); _EXPORT_INT(m, AFMT_MU_LAW); _EXPORT_INT(m, AFMT_A_LAW); _EXPORT_INT(m, AFMT_IMA_ADPCM); _EXPORT_INT(m, AFMT_U8); _EXPORT_INT(m, AFMT_S16_LE); _EXPORT_INT(m, AFMT_S16_BE); _EXPORT_INT(m, AFMT_S8); _EXPORT_INT(m, AFMT_U16_LE); _EXPORT_INT(m, AFMT_U16_BE); _EXPORT_INT(m, AFMT_MPEG); #ifdef AFMT_AC3 _EXPORT_INT(m, AFMT_AC3); #endif #ifdef AFMT_S16_NE _EXPORT_INT(m, AFMT_S16_NE); #endif #ifdef AFMT_U16_NE _EXPORT_INT(m, AFMT_U16_NE); #endif #ifdef AFMT_S32_LE _EXPORT_INT(m, AFMT_S32_LE); #endif #ifdef AFMT_S32_BE _EXPORT_INT(m, AFMT_S32_BE); #endif #ifdef AFMT_MPEG _EXPORT_INT(m, AFMT_MPEG); #endif /* Expose the sound mixer device numbers. */ _EXPORT_INT(m, SOUND_MIXER_NRDEVICES); _EXPORT_INT(m, SOUND_MIXER_VOLUME); _EXPORT_INT(m, SOUND_MIXER_BASS); _EXPORT_INT(m, SOUND_MIXER_TREBLE); _EXPORT_INT(m, SOUND_MIXER_SYNTH); _EXPORT_INT(m, SOUND_MIXER_PCM); _EXPORT_INT(m, SOUND_MIXER_SPEAKER); _EXPORT_INT(m, SOUND_MIXER_LINE); _EXPORT_INT(m, SOUND_MIXER_MIC); _EXPORT_INT(m, SOUND_MIXER_CD); _EXPORT_INT(m, SOUND_MIXER_IMIX); _EXPORT_INT(m, SOUND_MIXER_ALTPCM); _EXPORT_INT(m, SOUND_MIXER_RECLEV); _EXPORT_INT(m, SOUND_MIXER_IGAIN); _EXPORT_INT(m, SOUND_MIXER_OGAIN); _EXPORT_INT(m, SOUND_MIXER_LINE1); _EXPORT_INT(m, SOUND_MIXER_LINE2); _EXPORT_INT(m, SOUND_MIXER_LINE3); #ifdef SOUND_MIXER_DIGITAL1 _EXPORT_INT(m, SOUND_MIXER_DIGITAL1); #endif #ifdef SOUND_MIXER_DIGITAL2 _EXPORT_INT(m, SOUND_MIXER_DIGITAL2); #endif #ifdef SOUND_MIXER_DIGITAL3 _EXPORT_INT(m, SOUND_MIXER_DIGITAL3); #endif #ifdef SOUND_MIXER_PHONEIN _EXPORT_INT(m, SOUND_MIXER_PHONEIN); #endif #ifdef SOUND_MIXER_PHONEOUT _EXPORT_INT(m, SOUND_MIXER_PHONEOUT); #endif #ifdef SOUND_MIXER_VIDEO _EXPORT_INT(m, SOUND_MIXER_VIDEO); #endif #ifdef SOUND_MIXER_RADIO _EXPORT_INT(m, SOUND_MIXER_RADIO); #endif #ifdef SOUND_MIXER_MONITOR _EXPORT_INT(m, SOUND_MIXER_MONITOR); #endif /* Expose all the ioctl numbers for masochists who like to do this stuff directly. */ _EXPORT_INT(m, SNDCTL_COPR_HALT); _EXPORT_INT(m, SNDCTL_COPR_LOAD); _EXPORT_INT(m, SNDCTL_COPR_RCODE); _EXPORT_INT(m, SNDCTL_COPR_RCVMSG); _EXPORT_INT(m, SNDCTL_COPR_RDATA); _EXPORT_INT(m, SNDCTL_COPR_RESET); _EXPORT_INT(m, SNDCTL_COPR_RUN); _EXPORT_INT(m, SNDCTL_COPR_SENDMSG); _EXPORT_INT(m, SNDCTL_COPR_WCODE); _EXPORT_INT(m, SNDCTL_COPR_WDATA); #ifdef SNDCTL_DSP_BIND_CHANNEL _EXPORT_INT(m, SNDCTL_DSP_BIND_CHANNEL); #endif _EXPORT_INT(m, SNDCTL_DSP_CHANNELS); _EXPORT_INT(m, SNDCTL_DSP_GETBLKSIZE); _EXPORT_INT(m, SNDCTL_DSP_GETCAPS); #ifdef SNDCTL_DSP_GETCHANNELMASK _EXPORT_INT(m, SNDCTL_DSP_GETCHANNELMASK); #endif _EXPORT_INT(m, SNDCTL_DSP_GETFMTS); _EXPORT_INT(m, SNDCTL_DSP_GETIPTR); _EXPORT_INT(m, SNDCTL_DSP_GETISPACE); #ifdef SNDCTL_DSP_GETODELAY _EXPORT_INT(m, SNDCTL_DSP_GETODELAY); #endif _EXPORT_INT(m, SNDCTL_DSP_GETOPTR); _EXPORT_INT(m, SNDCTL_DSP_GETOSPACE); #ifdef SNDCTL_DSP_GETSPDIF _EXPORT_INT(m, SNDCTL_DSP_GETSPDIF); #endif _EXPORT_INT(m, SNDCTL_DSP_GETTRIGGER); _EXPORT_INT(m, SNDCTL_DSP_MAPINBUF); _EXPORT_INT(m, SNDCTL_DSP_MAPOUTBUF); _EXPORT_INT(m, SNDCTL_DSP_NONBLOCK); _EXPORT_INT(m, SNDCTL_DSP_POST); #ifdef SNDCTL_DSP_PROFILE _EXPORT_INT(m, SNDCTL_DSP_PROFILE); #endif _EXPORT_INT(m, SNDCTL_DSP_RESET); _EXPORT_INT(m, SNDCTL_DSP_SAMPLESIZE); _EXPORT_INT(m, SNDCTL_DSP_SETDUPLEX); _EXPORT_INT(m, SNDCTL_DSP_SETFMT); _EXPORT_INT(m, SNDCTL_DSP_SETFRAGMENT); #ifdef SNDCTL_DSP_SETSPDIF _EXPORT_INT(m, SNDCTL_DSP_SETSPDIF); #endif _EXPORT_INT(m, SNDCTL_DSP_SETSYNCRO); _EXPORT_INT(m, SNDCTL_DSP_SETTRIGGER); _EXPORT_INT(m, SNDCTL_DSP_SPEED); _EXPORT_INT(m, SNDCTL_DSP_STEREO); _EXPORT_INT(m, SNDCTL_DSP_SUBDIVIDE); _EXPORT_INT(m, SNDCTL_DSP_SYNC); _EXPORT_INT(m, SNDCTL_FM_4OP_ENABLE); _EXPORT_INT(m, SNDCTL_FM_LOAD_INSTR); _EXPORT_INT(m, SNDCTL_MIDI_INFO); _EXPORT_INT(m, SNDCTL_MIDI_MPUCMD); _EXPORT_INT(m, SNDCTL_MIDI_MPUMODE); _EXPORT_INT(m, SNDCTL_MIDI_PRETIME); _EXPORT_INT(m, SNDCTL_SEQ_CTRLRATE); _EXPORT_INT(m, SNDCTL_SEQ_GETINCOUNT); _EXPORT_INT(m, SNDCTL_SEQ_GETOUTCOUNT); #ifdef SNDCTL_SEQ_GETTIME _EXPORT_INT(m, SNDCTL_SEQ_GETTIME); #endif _EXPORT_INT(m, SNDCTL_SEQ_NRMIDIS); _EXPORT_INT(m, SNDCTL_SEQ_NRSYNTHS); _EXPORT_INT(m, SNDCTL_SEQ_OUTOFBAND); _EXPORT_INT(m, SNDCTL_SEQ_PANIC); _EXPORT_INT(m, SNDCTL_SEQ_PERCMODE); _EXPORT_INT(m, SNDCTL_SEQ_RESET); _EXPORT_INT(m, SNDCTL_SEQ_RESETSAMPLES); _EXPORT_INT(m, SNDCTL_SEQ_SYNC); _EXPORT_INT(m, SNDCTL_SEQ_TESTMIDI); _EXPORT_INT(m, SNDCTL_SEQ_THRESHOLD); #ifdef SNDCTL_SYNTH_CONTROL _EXPORT_INT(m, SNDCTL_SYNTH_CONTROL); #endif #ifdef SNDCTL_SYNTH_ID _EXPORT_INT(m, SNDCTL_SYNTH_ID); #endif _EXPORT_INT(m, SNDCTL_SYNTH_INFO); _EXPORT_INT(m, SNDCTL_SYNTH_MEMAVL); #ifdef SNDCTL_SYNTH_REMOVESAMPLE _EXPORT_INT(m, SNDCTL_SYNTH_REMOVESAMPLE); #endif _EXPORT_INT(m, SNDCTL_TMR_CONTINUE); _EXPORT_INT(m, SNDCTL_TMR_METRONOME); _EXPORT_INT(m, SNDCTL_TMR_SELECT); _EXPORT_INT(m, SNDCTL_TMR_SOURCE); _EXPORT_INT(m, SNDCTL_TMR_START); _EXPORT_INT(m, SNDCTL_TMR_STOP); _EXPORT_INT(m, SNDCTL_TMR_TEMPO); _EXPORT_INT(m, SNDCTL_TMR_TIMEBASE); return m; }
initsound(void) { Py_Initialize(); PyObject *m= Py_InitModule(MODULE_NAME, pysound_methods); // Initialize tables PyModule_AddStringConstant(m, "__doc__", PYMODULEDOC ); PyModule_AddStringConstant(m, "version", PYSNDVERSION ); PyModule_AddIntConstant(m, "build", PYSNDBUILD ); _EXPORT_INT(m, AFMT_MU_LAW); _EXPORT_INT(m, AFMT_A_LAW); _EXPORT_INT(m, AFMT_IMA_ADPCM); _EXPORT_INT(m, AFMT_U8); _EXPORT_INT(m, AFMT_S16_LE); _EXPORT_INT(m, AFMT_S16_BE); _EXPORT_INT(m, AFMT_S8); _EXPORT_INT(m, AFMT_U16_LE); _EXPORT_INT(m, AFMT_U16_BE); _EXPORT_INT(m, AFMT_MPEG); _EXPORT_INT(m, AFMT_AC3); _EXPORT_INT(m, AFMT_S16_NE); g_cErr = PyErr_NewException(MODULE_NAME".SoundError", NULL, NULL); if( g_cErr != NULL) PyModule_AddObject(m, "SoundError", g_cErr ); PyISoundType.ob_type = &PyType_Type; Py_INCREF((PyObject *)&PyISoundType); PyModule_AddObject(m, INPUT_NAME, (PyObject *)&PyISoundType); PySoundType.ob_type = &PyType_Type; Py_INCREF((PyObject *)&PySoundType); PyModule_AddObject(m, OUTPUT_NAME, (PyObject *)&PySoundType); ResamplerType.ob_type = &PyType_Type; Py_INCREF((PyObject *)&ResamplerType); PyModule_AddObject(m, RESAMPLER_NAME, (PyObject *)&ResamplerType); AnalyzerType.ob_type = &PyType_Type; Py_INCREF((PyObject *)&AnalyzerType); PyModule_AddObject(m, ANALYZER_NAME, (PyObject *)&AnalyzerType); MixerType.ob_type = &PyType_Type; Py_INCREF((PyObject *)&MixerType); PyModule_AddObject(m, MIXER_NAME, (PyObject *)&MixerType); }