On Mon, Jun 22, 2009 at 9:49 PM, Andras Pikler<andras.pik...@students.olin.edu> wrote: > Hi! > > > > Short: I need to turn a Python program that I (mostly) wrote into C code, > and I am at a loss. > > > > Long: I’m doing research/programming for a professor, and we are working > with MIDI files (a type of simple music file). The research deals with > generating variations from a musical melody; currently, my Python code uses > a Python midi package I found online to read the notes in question from a > midi file, about 350 lines of my own code to generate a variation based on > these notes and the professor’s algorithms, and finally the package again to > write the new melody to another midi file. > > > > Now, my professor would like to have this exact code in C/C++, as she > believes C is more compatible with MATLAB, and wants the code to be > available in multiple languages in case a programmer works for her in the > future who knows C but not Python. While I know a tiny bit of C (emphasis on > the tiny), I would much prefer if there were some sort of automatic compiler > I could use to turn my Python code into C than taking a week or two or three > to learn the minimum I need about C, find a way to access MIDI files in it, > and rewrite all of my code. > > > > After some googling, I found and tried Shedskin, but it doesn’t work, as the > Python midi package I’m using uses modules which Shedskin does not support. > Otherwise, I haven’t found much. Is there anything out there to help me do > this? If not, from anyone who has experience in this regard, how daunting > should I expect this to be?
Taking on C from a cold start and being able to handle the ins and outs of interfacing with Python isn't something that's feasible in 'two or three weeks'. Here are a couple of options -- take 'em or leave 'em: 1) Put the code in Cython: http://www.cython.org/ (full disclosure: I'm doing a GSoC project with Cython). It will convert pretty much any python code into C code (even closures are supported in the most recent version, I think), and the C code can then be compiled into an extension module. The only problem with the above is the C code isn't, at first blush, easy to read. Nor is it supposed to be changed by the user. So that leads us to option... 2) Write the core functionality in C yourself, and then wrap those C functions in Cython. You'll want to take a look at the documentation: http://docs.cython.org/ and, more specifically on wrapping C code: http://docs.cython.org/docs/external_C_code.html I don't think you'll be able to avoid learning C, though. Kurt -- http://mail.python.org/mailman/listinfo/python-list