Celtic88 Posted August 28, 2015 Posted August 28, 2015 (edited) I wrote a script to convert an audio file to .mp3 and I have to use "lame_enc.dll". May the converted file out wrong? someone just tell me why!my scriptexpandcollapse popup#include <WinAPI.au3> Global $h_LameEncDLL = _Open_LameEnc(@ScriptDir & "\lame_enc.dll") If @error Then Exit OnAutoItExitRegister("_Close_LameEnc") Global Const $tag_BE_CONFIG = _ ; { "DWORD dwConfig;" & _ ; // BE_CONFIG_LAME "DWORD dwStructVersion;" & _ ; // LAME header version 1 "DWORD dwStructSize;" & _ ; // Size of this structure (332 in autoit, should be 331) "DWORD dwSampleRate;" & _ ; // SAMPLERATE OF INPUT FILE "DWORD dwReSampleRate;" & _ ; // DOWNSAMPLERATE, 0=ENCODER DECIDES "LONG nMode;" & _ ; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO "DWORD dwBitrate;" & _ ; // CBR bitrate, VBR min bitrate "DWORD dwMaxBitrate;" & _ ; // CBR ignored, VBR Max bitrate "LONG nPreset;" & _ ; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum "DWORD dwMpegVersion;" & _ ; // FUTURE USE, MPEG-1 OR MPEG-2 "DWORD dwPsyModel;" & _ ; // FUTURE USE, SET TO 0 "DWORD dwEmphasis;" & _ ; // FUTURE USE, SET TO 0 "BOOL bPrivate;" & _ ; // Set Private Bit (TRUE/FALSE) "BOOL bCRC;" & _ ; // Insert CRC (TRUE/FALSE) "BOOL bCopyright;" & _ ; // Set Copyright Bit (TRUE/FALSE) "BOOL bOriginal;" & _ ; // Set Original Bit (TRUE/FALSE) "BOOL bWriteVBRHeader;" & _ ; // WRITE XING VBR HEADER (TRUE/FALSE) "BOOL bEnableVBR;" & _ ; // USE VBR ENCODING (TRUE/FALSE) "INT nVBRQuality;" & _ ; // VBR QUALITY 0..9 "DWORD dwVbrAbr_bps;" & _ ; // Use ABR in stead of nVBRQuality "UINT nVbrMethod;" & _ ; "BOOL bNoRes; " & _ ; // Disable Bit resorvoir (TRUE/FALSE) "BOOL bStrictIso;" & _ ; // Use strict ISO encoding rules (TRUE/FALSE) "WORD nQuality;" & _ ; // Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality=5 "BYTE btReserved[" & 255 - 4 * 4 - 2 & "]" Global Const $BE_CONFIG_LAME = 256 #cs #define BE_MP3_MODE_STEREO 0 #define BE_MP3_MODE_JSTEREO 1 #define BE_MP3_MODE_DUALCHANNEL 2 #define BE_MP3_MODE_MONO 3 #ce #cs LQP_NOPRESET =-1, // QUALITY PRESETS LQP_NORMAL_QUALITY = 0, LQP_LOW_QUALITY = 1, LQP_HIGH_QUALITY = 2, LQP_VOICE_QUALITY = 3, LQP_R3MIX = 4, LQP_VERYHIGH_QUALITY = 5, LQP_STANDARD = 6, LQP_FAST_STANDARD = 7, LQP_EXTREME = 8, LQP_FAST_EXTREME = 9, LQP_INSANE = 10, LQP_ABR = 11, LQP_CBR = 12, LQP_MEDIUM = 13, LQP_FAST_MEDIUM = 14, // NEW PRESET VALUES LQP_PHONE =1000, LQP_SW =2000, LQP_AM =3000, LQP_FM =4000, LQP_VOICE =5000, LQP_RADIO =6000, LQP_TAPE =7000, LQP_HIFI =8000, LQP_CD =9000, LQP_STUDIO =10000 #ce Local $sFileOpenDialog = FileOpenDialog("select a .Wav file.", @WorkingDir, "wav files (*.*)", 7) If @error Then Exit 1 _audio_Converttomp3($sFileOpenDialog, $sFileOpenDialog & ".mp3") Func _audio_Converttomp3($sFileTocovertPath, $sSavefilepath, $mp3Rate = 128) Local $tCfg = DllStructCreate($tag_BE_CONFIG) DllStructSetData($tCfg, "dwConfig", 256) ;// BE_CONFIG_LAME DllStructSetData($tCfg, "dwStructVersion", 1) ;// Struct version (LVH1) DllStructSetData($tCfg, "dwStructSize", DllStructGetSize($tCfg)); // Struct Size DllStructSetData($tCfg, "dwSampleRate", 22100); // INPUT FREQUENCY DllStructSetData($tCfg, "nMode", 3) ;BE_MP3_MODE_JSTEREO; // OUTPUT IN JOINT STEREO DllStructSetData($tCfg, "dwBitrate", $mp3Rate); // MINIMUM BIT RATE DllStructSetData($tCfg, "nPreset", 12) ;LQP_CBR; // QUALITY PRESET SETTING DllStructSetData($tCfg, "dwMpegVersion", 1);MPEG1; // MPEG VERSION (I or II) DllStructSetData($tCfg, "bOriginal", 1); // SET ORIGINAL FLAG DllStructSetData($tCfg, "bWriteVBRHeader", 1) ; // Write mp3 header, even on ABR or CBR mp3. Local $dwFileSize = FileGetSize($sFileTocovertPath), $clen Local $hReadin = _WinAPI_CreateFile($sFileTocovertPath, 2, 2) Local $hWriteOut = _WinAPI_CreateFile($sSavefilepath, 1, 4) ;Seek back to start of WAV file, ;but skip the first 44 bytes, since that's the WAV header _WinAPI_SetFilePointer($hReadin, 44, 0) _WinAPI_SetFilePointer($hWriteOut, 0, 2) Local $hStream, $iSamples, $iMP3Buffer _beInitStream(DllStructGetPtr($tCfg), $iSamples, $iMP3Buffer, $hStream) ; Lame encoder expects signed 16bit 2 bytes so use a SHORT data type Local $tWavBuf = DllStructCreate("SHORT[" & $iSamples & "]") ; Create MP3 buffer to receive the encoded mp3 data Local $tMP3Buf = DllStructCreate("BYTE[" & $iMP3Buffer & "]") Local $iOutput, $Nread, $NWrite, $mrlen = DllStructGetSize($tWavBuf);, $mrlen=$iSamples*2 While True _WinAPI_ReadFile($hReadin, DllStructGetPtr($tWavBuf), $mrlen, $Nread) If $Nread = 0 Then ExitLoop ;Encode _beEncodeChunk($hStream, $Nread / 2, DllStructGetPtr($tWavBuf), DllStructGetPtr($tMP3Buf), $iOutput) ;write $iOutput bytes that are returned in tehe $tMP3Buf to disk _WinAPI_WriteFile($hWriteOut, DllStructGetPtr($tMP3Buf), $iOutput, $NWrite) $clen += $Nread ToolTip(StringFormat("Done: %0.2f%% \r", 100 * ($clen / $dwFileSize))) WEnd _beDeinitStream($hStream, DllStructGetPtr($tMP3Buf), $iOutput) If $iOutput > 0 Then _WinAPI_WriteFile($hWriteOut, DllStructGetPtr($tMP3Buf), $iOutput, $NWrite) _WinAPI_CloseHandle($hReadin) _WinAPI_CloseHandle($hWriteOut) _beCloseStream($hStream) _beWriteVBRHeader("BELL.WAV") EndFunc ;==>_audio_Converttomp3 Func _Open_LameEnc($sLameEncDll = "lame_enc.dll") Local $h_LameEncDLL_Open = DllOpen($sLameEncDll) If @error Then Return SetError(@error) Return $h_LameEncDLL_Open EndFunc ;==>_Open_LameEnc Func _beInitStream($pBeConfig, ByRef $iSamples, ByRef $iBufferSize, ByRef $hStream) Local $aReturn, $aResult[3] $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beInitStream", "ptr", $pBeConfig, "dword*", 0, "dword*", 0, "ptr*", 0) If @error Then Return SetError(-1, @error, @error = 0) $iSamples = $aReturn[2] $iBufferSize = $aReturn[3] $hStream = $aReturn[4] Return SetError($aReturn[0], 0, $aResult[0] = 0) EndFunc ;==>_beInitStream Func _beEncodeChunk($hStream, $iSamples, $pWAVBuffer, $pMP3Buffer, ByRef $iOutput) Local $aReturn $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beEncodeChunk", "ptr", $hStream, "dword", $iSamples, "ptr", $pWAVBuffer, "ptr", $pMP3Buffer, "int*", 0) If @error Then Return SetError(-1, @error, @error = 0) $iOutput = $aReturn[5] Return SetError($aReturn[0], 0, $aReturn[0] = 0) EndFunc ;==>_beEncodeChunk Func _beDeinitStream($hStream, $pMP3Buffer, ByRef $iOutput) Local $aReturn $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beDeinitStream", "ptr", $hStream, "ptr", $pMP3Buffer, "dword*", 0) If @error Then Return SetError(-1, 0, @error = 0) $iOutput = $aReturn[3] Return SetError($aReturn[0], $aReturn[3], $aReturn[0] = 0) EndFunc ;==>_beDeinitStream Func _beVersion() Local $aReturn $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beVersion", "int*", 0) If @error Then Return SetError(-1, 0, @error = 0) Return $aReturn[0] EndFunc ;==>_beVersion Func _beCloseStream($hStream) Local $aReturn $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beCloseStream", "ptr", $hStream) If @error Then Return SetError(-1, 0, @error = 0) Return SetError($aReturn[0], 0, $aReturn[0] = 0) EndFunc ;==>_beCloseStream Func _beWriteVBRHeader($sMp3File) Local $aReturn $aReturn = DllCall($h_LameEncDLL, "ulong:cdecl", "beWriteVBRHeader", "str", $sMp3File) If @error Then Return SetError(-1, 0, @error = 0) Return SetError($aReturn[0], 0, $aReturn[0] = 0) EndFunc ;==>_beWriteVBRHeader Func _Close_LameEnc() DllClose($h_LameEncDLL) $h_LameEncDLL = -1 EndFunc ;==>_Close_LameEncsorry for my bad english  thank you. lame_enc.dll12-1234.wav Edited August 29, 2015 by Celtic88
Celtic88 Posted August 28, 2015 Author Posted August 28, 2015 (edited) original c++ codeexpandcollapse popup/* * 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; }BladeMP3EncDLL.hexpandcollapse popup/* * Blade Type of DLL Interface for Lame encoder * * Copyright (c) 1999-2002 A.L. Faber * Based on bladedll.h version 1.0 written by Jukka Poikolainen * * 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. */ #ifndef ___BLADEDLL_H_INCLUDED___ #define ___BLADEDLL_H_INCLUDED___ #ifdef __GNUC__ #define ATTRIBUTE_PACKED __attribute__((packed)) #else #define ATTRIBUTE_PACKED #pragma pack(push) #pragma pack(1) #endif #ifdef __cplusplus extern "C" { #endif /* encoding formats */ #define BE_CONFIG_MP3 0 #define BE_CONFIG_LAME 256 /* type definitions */ typedef unsigned long HBE_STREAM; typedef HBE_STREAM *PHBE_STREAM; typedef unsigned long BE_ERR; /* error codes */ #define BE_ERR_SUCCESSFUL 0x00000000 #define BE_ERR_INVALID_FORMAT 0x00000001 #define BE_ERR_INVALID_FORMAT_PARAMETERS 0x00000002 #define BE_ERR_NO_MORE_HANDLES 0x00000003 #define BE_ERR_INVALID_HANDLE 0x00000004 #define BE_ERR_BUFFER_TOO_SMALL 0x00000005 /* other constants */ #define BE_MAX_HOMEPAGE 128 /* format specific variables */ #define BE_MP3_MODE_STEREO 0 #define BE_MP3_MODE_JSTEREO 1 #define BE_MP3_MODE_DUALCHANNEL 2 #define BE_MP3_MODE_MONO 3 #define MPEG1 1 #define MPEG2 0 #ifdef _BLADEDLL #undef FLOAT #include <Windows.h> #endif #define CURRENT_STRUCT_VERSION 1 #define CURRENT_STRUCT_SIZE sizeof(BE_CONFIG) // is currently 331 bytes typedef enum { VBR_METHOD_NONE = -1, VBR_METHOD_DEFAULT = 0, VBR_METHOD_OLD = 1, VBR_METHOD_NEW = 2, VBR_METHOD_MTRH = 3, VBR_METHOD_ABR = 4 } VBRMETHOD; typedef enum { LQP_NOPRESET =-1, // QUALITY PRESETS LQP_NORMAL_QUALITY = 0, LQP_LOW_QUALITY = 1, LQP_HIGH_QUALITY = 2, LQP_VOICE_QUALITY = 3, LQP_R3MIX = 4, LQP_VERYHIGH_QUALITY = 5, LQP_STANDARD = 6, LQP_FAST_STANDARD = 7, LQP_EXTREME = 8, LQP_FAST_EXTREME = 9, LQP_INSANE = 10, LQP_ABR = 11, LQP_CBR = 12, LQP_MEDIUM = 13, LQP_FAST_MEDIUM = 14, // NEW PRESET VALUES LQP_PHONE =1000, LQP_SW =2000, LQP_AM =3000, LQP_FM =4000, LQP_VOICE =5000, LQP_RADIO =6000, LQP_TAPE =7000, LQP_HIFI =8000, LQP_CD =9000, LQP_STUDIO =10000 } LAME_QUALITY_PRESET; typedef struct { DWORD dwConfig; // BE_CONFIG_XXXXX // Currently only BE_CONFIG_MP3 is supported union { struct { DWORD dwSampleRate; // 48000, 44100 and 32000 allowed BYTE byMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO WORD wBitrate; // 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256 and 320 allowed BOOL bPrivate; BOOL bCRC; BOOL bCopyright; BOOL bOriginal; } mp3; // BE_CONFIG_MP3 struct { // STRUCTURE INFORMATION DWORD dwStructVersion; DWORD dwStructSize; // BASIC ENCODER SETTINGS DWORD dwSampleRate; // SAMPLERATE OF INPUT FILE DWORD dwReSampleRate; // DOWNSAMPLERATE, 0=ENCODER DECIDES LONG nMode; // BE_MP3_MODE_STEREO, BE_MP3_MODE_DUALCHANNEL, BE_MP3_MODE_MONO DWORD dwBitrate; // CBR bitrate, VBR min bitrate DWORD dwMaxBitrate; // CBR ignored, VBR Max bitrate LONG nPreset; // Quality preset, use one of the settings of the LAME_QUALITY_PRESET enum DWORD dwMpegVersion; // FUTURE USE, MPEG-1 OR MPEG-2 DWORD dwPsyModel; // FUTURE USE, SET TO 0 DWORD dwEmphasis; // FUTURE USE, SET TO 0 // BIT STREAM SETTINGS BOOL bPrivate; // Set Private Bit (TRUE/FALSE) BOOL bCRC; // Insert CRC (TRUE/FALSE) BOOL bCopyright; // Set Copyright Bit (TRUE/FALSE) BOOL bOriginal; // Set Original Bit (TRUE/FALSE) // VBR STUFF BOOL bWriteVBRHeader; // WRITE XING VBR HEADER (TRUE/FALSE) BOOL bEnableVBR; // USE VBR ENCODING (TRUE/FALSE) INT nVBRQuality; // VBR QUALITY 0..9 DWORD dwVbrAbr_bps; // Use ABR in stead of nVBRQuality VBRMETHOD nVbrMethod; BOOL bNoRes; // Disable Bit resorvoir (TRUE/FALSE) // MISC SETTINGS BOOL bStrictIso; // Use strict ISO encoding rules (TRUE/FALSE) WORD nQuality; // Quality Setting, HIGH BYTE should be NOT LOW byte, otherwhise quality=5 // FUTURE USE, SET TO 0, align strucutre to 331 bytes BYTE btReserved[255-4*sizeof(DWORD) - sizeof( WORD )]; } LHV1; // LAME header version 1 struct { DWORD dwSampleRate; BYTE byMode; WORD wBitrate; BYTE byEncodingMethod; } aac; } format; } BE_CONFIG, *PBE_CONFIG ATTRIBUTE_PACKED; typedef struct { // BladeEnc DLL Version number BYTE byDLLMajorVersion; BYTE byDLLMinorVersion; // BladeEnc Engine Version Number BYTE byMajorVersion; BYTE byMinorVersion; // DLL Release date BYTE byDay; BYTE byMonth; WORD wYear; // BladeEnc Homepage URL CHAR zHomepage[BE_MAX_HOMEPAGE + 1]; BYTE byAlphaLevel; BYTE byBetaLevel; BYTE byMMXEnabled; BYTE btReserved[125]; } BE_VERSION, *PBE_VERSION ATTRIBUTE_PACKED; #ifndef _BLADEDLL typedef BE_ERR (*BEINITSTREAM) (PBE_CONFIG, PDWORD, PDWORD, PHBE_STREAM); typedef BE_ERR (*BEENCODECHUNK) (HBE_STREAM, DWORD, PSHORT, PBYTE, PDWORD); // added for floating point audio -- DSPguru, jd typedef BE_ERR (*BEENCODECHUNKFLOATS16NI) (HBE_STREAM, DWORD, PFLOAT, PFLOAT, PBYTE, PDWORD); typedef BE_ERR (*BEDEINITSTREAM) (HBE_STREAM, PBYTE, PDWORD); typedef BE_ERR (*BECLOSESTREAM) (HBE_STREAM); typedef VOID (*BEVERSION) (PBE_VERSION); typedef BE_ERR (*BEWRITEVBRHEADER) (LPCSTR); typedef BE_ERR (*BEWRITEINFOTAG) (HBE_STREAM, LPCSTR ); #define TEXT_BEINITSTREAM "beInitStream" #define TEXT_BEENCODECHUNK "beEncodeChunk" #define TEXT_BEENCODECHUNKFLOATS16NI "beEncodeChunkFloatS16NI" #define TEXT_BEDEINITSTREAM "beDeinitStream" #define TEXT_BECLOSESTREAM "beCloseStream" #define TEXT_BEVERSION "beVersion" #define TEXT_BEWRITEVBRHEADER "beWriteVBRHeader" #define TEXT_BEFLUSHNOGAP "beFlushNoGap" #define TEXT_BEWRITEINFOTAG "beWriteInfoTag" #else __declspec(dllexport) BE_ERR beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD dwBufferSize, PHBE_STREAM phbeStream); __declspec(dllexport) BE_ERR beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT pSamples, PBYTE pOutput, PDWORD pdwOutput); // added for floating point audio -- DSPguru, jd __declspec(dllexport) BE_ERR beEncodeChunkFloatS16NI(HBE_STREAM hbeStream, DWORD nSamples, PFLOAT buffer_l, PFLOAT buffer_r, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beCloseStream(HBE_STREAM hbeStream); __declspec(dllexport) VOID beVersion(PBE_VERSION pbeVersion); __declspec(dllexport) BE_ERR beWriteVBRHeader(LPCSTR lpszFileName); __declspec(dllexport) BE_ERR beFlushNoGap(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD pdwOutput); __declspec(dllexport) BE_ERR beWriteInfoTag( HBE_STREAM hbeStream, LPCSTR lpszFileName ); #endif #ifndef __GNUC__ #pragma pack(pop) #endif #ifdef __cplusplus } #endif #endif Edited August 28, 2015 by Celtic88
wakillon Posted August 28, 2015 Posted August 28, 2015 (edited) In your documentation // Close input file fclose( pFileIn ); // Close output file fclose( pFileOut ); // Write the VBR Tag beWriteVBRHeader( strFileOut );MP3 file should be closed before you use the "_beWriteVBRHeader" function.and you write the header on the wav file instead of the mp3 output file !It should be_WinAPI_CloseHandle($rf) _WinAPI_CloseHandle($hWriteOut) _beWriteVBRHeader("m.mp3")But there must be another mistake because it doesn't resolve the problem... Edited August 28, 2015 by wakillon Celtic88 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Celtic88 Posted August 28, 2015 Author Posted August 28, 2015 (edited) @wakillonthank for your replay ;allo MPV , is there a solution? Edited September 3, 2015 by Celtic88
Danyfirex Posted August 29, 2015 Posted August 29, 2015 So I'm not MPV I can't answer. Celtic88 1  Danysys.com     AutoIt...  UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection  PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut  Â
wakillon Posted August 29, 2015 Posted August 29, 2015 (edited) @wakillonthank for your replay ;allo MPV, is there a solution?Same error again !_beCloseStream($hStream) _beWriteVBRHeader("BELL.WAV") EndFunc ;==>_audio_Converttomp3Replace _beWriteVBRHeader("BELL.WAV") by _beWriteVBRHeader ( $sSavefilepath )Edit : lame_enc.dll doesn't seems to support 8 Bits Wav Files as your "12-1234.wav" or "Bell.wav" files.but with a 16 Bits Wav file, it works well  !  Edited August 29, 2015 by wakillon Celtic88 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Celtic88 Posted September 3, 2015 Author Posted September 3, 2015 Same error again !_beCloseStream($hStream) _beWriteVBRHeader("BELL.WAV") EndFunc ;==>_audio_Converttomp3Replace _beWriteVBRHeader("BELL.WAV") by _beWriteVBRHeader ( $sSavefilepath )Edit : lame_enc.dll doesn't seems to support 8 Bits Wav Files as your "12-1234.wav" or "Bell.wav" files.but with a 16 Bits Wav file, it works well  !  @Danyfirexthank you bro
wakillon Posted September 3, 2015 Posted September 3, 2015 You're welcome.You can use MediaInfo for know if wav file is 8 Bits or 16 Bits. Celtic88 1 AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Danyfirex Posted September 3, 2015 Posted September 3, 2015 For get bits you can do it using AutoIt ways.Local $sFile="12-1234.wav" Local $tData=DllStructCreate("byte Data[" & FileGetSize($sFile) & "]") $tData.Data=FileRead($sFile) Local $tInfo=DllStructCreate("byte Data[34];word Bits",DllStructGetPtr($tData)) MsgBox(0,"",$tInfo.Bits)Saludos Celtic88 and fedcor 2  Danysys.com     AutoIt...  UDFs: VirusTotal API 2.0 UDF - libZPlay UDF - Apps: Guitar Tab Tester - VirusTotal Hash Checker Examples: Text-to-Speech ISpVoice Interface - Get installed applications - Enable/Disable Network connection  PrintHookProc - WINTRUST - Mute Microphone Level - Get Connected NetWorks - Create NetWork Connection ShortCut  Â
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now