| | |
Translate C/C++ Code to python
Please support our Python advertiser: Programming Forums - DaniWeb Sister Site
![]() |
Hi All,
For long now have tried to get Python bindings and none is there.
jlgm suggested me to try ctypes and I dived in. But there are few examples on using ctypes for new bees like me.
I tried to take lame_enc.dll (The file made me to learn ctypes
) as sample to play with. The sad thing is, I find only C/C++ examples of the DLL and I failed to translate them.
Here is the example:
and here is my trial; I failed to finish
and here is TCL example:
http://wiki.tcl.tk/14289
and another CPP example:
http://www.creative-urge.com/ljpics/main.cpp
Please need help
For long now have tried to get Python bindings and none is there.
jlgm suggested me to try ctypes and I dived in. But there are few examples on using ctypes for new bees like me.
I tried to take lame_enc.dll (The file made me to learn ctypes
) as sample to play with. The sad thing is, I find only C/C++ examples of the DLL and I failed to translate them. Here is the example:
C++ Syntax (Toggle Plain Text)
/* * LAME DLL Sample Code. * * Copyright (c) 2000 A.L. Faber * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #include <windows.h> #include <stdio.h> #include <io.h> #include <fcntl.h> #include <sys/stat.h> #include "BladeMP3EncDLL.h" BEINITSTREAM beInitStream=NULL; BEENCODECHUNK beEncodeChunk=NULL; BEDEINITSTREAM beDeinitStream=NULL; BECLOSESTREAM beCloseStream=NULL; BEVERSION beVersion=NULL; BEWRITEVBRHEADER beWriteVBRHeader=NULL; // Main program int main(int argc, char *argv[]) { HINSTANCE hDLL =NULL; FILE* pFileIn =NULL; FILE* pFileOut =NULL; BE_VERSION Version ={0,}; BE_CONFIG beConfig ={0,}; CHAR strFileIn[255] ={'0',}; CHAR strFileOut[255] ={'0',}; DWORD dwSamples =0; DWORD dwMP3Buffer =0; HBE_STREAM hbeStream =0; BE_ERR err =0; PBYTE pMP3Buffer =NULL; PSHORT pWAVBuffer =NULL; // check number of arguments if(argc != 2) { fprintf(stderr,"Usage: %s <filename.wav>\n", argv[0]); fprintf(stderr,"Descr: Short demo to show how to use the lame_enc.dll library file\n"); fprintf(stderr,"Note : WAV file is assumed to to have the following parameters\n"); fprintf(stderr," : 44100 Hz, stereo, 16 Bits per sample\n"); return -1; } // Setup the file names strcpy(strFileIn ,argv[1]); strcpy(strFileOut,argv[1]); // Add mp3 extention strcat(strFileOut,".mp3"); // Load lame_enc.dll library (Make sure though that you set the // project/settings/debug Working Directory correctly, otherwhise the DLL can't be loaded #ifdef _MSC_VER hDLL = LoadLibrary(".\\Debug\\lame_enc.dll"); #ifdef _DEBUG hDLL = LoadLibrary(".\\Debug\\lame_enc.dll"); #else hDLL = LoadLibrary(".\\Release\\lame_enc.dll"); if ( NULL == hDLL ) { hDLL = LoadLibrary(".\\Release_NASM\\lame_enc.dll"); } #endif /* _DEBUG */ #else /* Don't worry about dll location. MSVC is the only compiler that creates .\Release\ or .\Debug\ directories. */ hDLL = LoadLibrary("lame_enc.dll"); #endif /* _MSC_VER */ if( NULL == hDLL ) { fprintf(stderr,"Error loading lame_enc.DLL"); return -1; } // Get Interface functions from the DLL beInitStream = (BEINITSTREAM) GetProcAddress(hDLL, TEXT_BEINITSTREAM); beEncodeChunk = (BEENCODECHUNK) GetProcAddress(hDLL, TEXT_BEENCODECHUNK); beDeinitStream = (BEDEINITSTREAM) GetProcAddress(hDLL, TEXT_BEDEINITSTREAM); beCloseStream = (BECLOSESTREAM) GetProcAddress(hDLL, TEXT_BECLOSESTREAM); beVersion = (BEVERSION) GetProcAddress(hDLL, TEXT_BEVERSION); beWriteVBRHeader= (BEWRITEVBRHEADER) GetProcAddress(hDLL,TEXT_BEWRITEVBRHEADER); // Check if all interfaces are present if(!beInitStream || !beEncodeChunk || !beDeinitStream || !beCloseStream || !beVersion || !beWriteVBRHeader) { printf("Unable to get LAME interfaces"); return -1; } // Get the version number beVersion( &Version ); printf( "lame_enc.dll version %u.%02u (%u/%u/%u)\n" "lame_enc Engine %u.%02u\n" "lame_enc homepage at %s\n\n", Version.byDLLMajorVersion, Version.byDLLMinorVersion, Version.byDay, Version.byMonth, Version.wYear, Version.byMajorVersion, Version.byMinorVersion, Version.zHomepage); // Try to open the WAV file, be sure to open it as a binary file! pFileIn = fopen( strFileIn, "rb" ); // Check file open result if(pFileIn == NULL) { fprintf(stderr,"Error opening %s", argv[1]); return -1; } // Open MP3 file pFileOut= fopen(strFileOut,"wb+"); // Check file open result if(pFileOut == NULL) { fprintf(stderr,"Error creating file %s", strFileOut); return -1; } memset(&beConfig,0,sizeof(beConfig)); // clear all fields // use the LAME config structure beConfig.dwConfig = BE_CONFIG_LAME; // this are the default settings for testcase.wav beConfig.format.LHV1.dwStructVersion = 1; beConfig.format.LHV1.dwStructSize = sizeof(beConfig); beConfig.format.LHV1.dwSampleRate = 44100; // INPUT FREQUENCY beConfig.format.LHV1.dwReSampleRate = 0; // DON"T RESAMPLE beConfig.format.LHV1.nMode = BE_MP3_MODE_JSTEREO; // OUTPUT IN STREO beConfig.format.LHV1.dwBitrate = 128; // MINIMUM BIT RATE beConfig.format.LHV1.nPreset = LQP_HIGH_QUALITY; // QUALITY PRESET SETTING beConfig.format.LHV1.dwMpegVersion = MPEG1; // MPEG VERSION (I or II) beConfig.format.LHV1.dwPsyModel = 0; // USE DEFAULT PSYCHOACOUSTIC MODEL beConfig.format.LHV1.dwEmphasis = 0; // NO EMPHASIS TURNED ON beConfig.format.LHV1.bOriginal = TRUE; // SET ORIGINAL FLAG // beConfig.format.LHV1.dwMaxBitrate = 320; // MAXIMUM BIT RATE // beConfig.format.LHV1.bCRC = TRUE; // INSERT CRC // beConfig.format.LHV1.bCopyright = TRUE; // SET COPYRIGHT FLAG // beConfig.format.LHV1.bPrivate = TRUE; // SET PRIVATE FLAG // beConfig.format.LHV1.bWriteVBRHeader = TRUE; // YES, WRITE THE XING VBR HEADER // beConfig.format.LHV1.bEnableVBR = TRUE; // USE VBR // beConfig.format.LHV1.nVBRQuality = 5; // SET VBR QUALITY beConfig.format.LHV1.bNoRes = TRUE; // No Bit resorvoir // Preset Test // beConfig.format.LHV1.nPreset = LQP_PHONE; // Init the MP3 Stream err = beInitStream(&beConfig, &dwSamples, &dwMP3Buffer, &hbeStream); // Check result if(err != BE_ERR_SUCCESSFUL) { fprintf(stderr,"Error opening encoding stream (%lu)", err); return -1; } // Allocate MP3 buffer pMP3Buffer = new BYTE[dwMP3Buffer]; // Allocate WAV buffer pWAVBuffer = new SHORT[dwSamples]; // Check if Buffer are allocated properly if(!pMP3Buffer || !pWAVBuffer) { printf("Out of memory"); return -1; } DWORD dwRead=0; DWORD dwWrite=0; DWORD dwDone=0; DWORD dwFileSize=0; // Seek to end of file fseek(pFileIn,0,SEEK_END); // Get the file size dwFileSize=ftell(pFileIn); // Seek back to start of WAV file, // but skip the first 44 bytes, since that's the WAV header fseek(pFileIn,44,SEEK_SET); // Convert All PCM samples while ( (dwRead=fread(pWAVBuffer,sizeof(SHORT),dwSamples,pFileIn)) >0 ) { // Encode samples err = beEncodeChunk(hbeStream, dwRead, pWAVBuffer, pMP3Buffer, &dwWrite); // Check result if(err != BE_ERR_SUCCESSFUL) { beCloseStream(hbeStream); fprintf(stderr,"beEncodeChunk() failed (%lu)", err); return -1; } // write dwWrite bytes that are returned in tehe pMP3Buffer to disk if(fwrite(pMP3Buffer,1,dwWrite,pFileOut) != dwWrite) { fprintf(stderr,"Output file write error"); return -1; } dwDone += dwRead*sizeof(SHORT); printf("Done: %0.2f%% \r", 100 * (float)dwDone/(float)(dwFileSize)); } // Deinit the stream err = beDeinitStream(hbeStream, pMP3Buffer, &dwWrite); // Check result if(err != BE_ERR_SUCCESSFUL) { beCloseStream(hbeStream); fprintf(stderr,"beExitStream failed (%lu)", err); return -1; } // Are there any bytes returned from the DeInit call? // If so, write them to disk if(dwWrite) { if( fwrite( pMP3Buffer, 1, dwWrite, pFileOut ) != dwWrite ) { fprintf(stderr,"Output file write error"); return -1; } } // close the MP3 Stream beCloseStream( hbeStream ); // Delete WAV buffer delete [] pWAVBuffer; // Delete MP3 Buffer delete [] pMP3Buffer; // Close input file fclose( pFileIn ); // Close output file fclose( pFileOut ); // Write the VBR Tag beWriteVBRHeader( strFileOut ); // Were done, return OK result return 0; }
and here is my trial; I failed to finish
python Syntax (Toggle Plain Text)
import ctypes as ct import os, sys lame = ct.cdll.lame_enc #start playing around #Configure the LAME encoder the to do the conversion. #use lame configuration structure lame.beConfig.dwConfig = lame.BE_CONFIG_LAME # this are the default settings for testcase.wav lame.beConfig.format.LHV1.dwStructVersion = 1 lame.beConfig.format.LHV1.dwStructSize = sizeof(lame.beConfig) lame.beConfig.format.LHV1.dwSampleRate = 44100 # INPUT FREQUENCY lame.beConfig.format.LHV1.dwReSampleRate = 0 #DON"T RESAMPLE lame.beConfig.format.LHV1.nMode = BE_MP3_MODE_JSTEREO #OUTPUT IN STREO lame.beConfig.format.LHV1.dwBitrate = 128 #MINIMUM BIT RATE lame.beConfig.format.LHV1.nPreset = LQP_HIGH_QUALITY #QUALITY PRESET SETTING lame.beConfig.format.LHV1.dwMpegVersion = MPEG1 # MPEG VERSION (I or II) lame.beConfig.format.LHV1.dwPsyModel = 0 #USE DEFAULT PSYCHOACOUSTIC MODEL lame.beConfig.format.LHV1.dwEmphasis = 0 #NO EMPHASIS TURNED ON lame.beConfig.format.LHV1.bOriginal = TRUE #SET ORIGINAL FLAG #init mp3 stream try: mp3 = beInitStream(beConfig, dwSamples, dwMP3Buffer, hbeStream) except: print "Error: Cannot open encoding stream " sys.exit(True) #failed to go on due to lack of C/C++ knowledge
and here is TCL example:
http://wiki.tcl.tk/14289
and another CPP example:
http://www.creative-urge.com/ljpics/main.cpp
Please need help
And another example here I found but didn't help
http://www.vbaccelerator.com/home/VB...ME/article.asp
and DLL manual here
http://www.fi.muni.cz/~qruzicka/Smid/man.htm
Pse help me
http://www.vbaccelerator.com/home/VB...ME/article.asp
and DLL manual here
http://www.fi.muni.cz/~qruzicka/Smid/man.htm
Pse help me
![]() |
Similar Threads
- Projects for the Beginner (Python)
- Replace words in a file (Python)
- RE: word count programming for python (wc) (Python)
- just for fun (Python)
- Python for Birthday (but having tech difficulties) (Python)
- Best way to convert C++ coding to Python (Python)
- Python and BOO (Python)
- Is Python better than C++ (Python)
Other Threads in the Python Forum
- Previous Thread: wx.CallAfter()
- Next Thread: List operation problem
Views: 516 | Replies: 2
| Thread Tools | Search this Thread |
Tag cloud for Python
address ansi backend beginner changecolor class code conversion coordinates copy curves customdialog dan08 dictionary digital directory dynamic edit events examples excel feet file float font format ftp function generator getvalue gui halp homework i/o iframe images import info input ip java line linux list lists loop mouse mysql newb number numbers output panel parsing path port prime print program programming projects py2exe pygame pyqt python queue random rational recursion recursive screensaverloopinactive scrolledtext server ssh stamp statictext string strings sudokusolver table terminal text thread threading time tkinter tlapse tuple tutorial type ubuntu unicode url urllib urllib2 variable whileloop windows write wxpython






