1<html> 2 3<head> 4<meta http-equiv="Content-Type" 5content="text/html; charset=iso-8859-1"> 6<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> 7<title>Lame-</title> 8</head> 9 10<body bgcolor="#FFFFFF"> 11 12<p align="center"> </p> 13 14<p align="center"><font size="7">Lame-enc DLL</font> <br> 15<font size="5">Interface version 1.32</font> (and above)<br> 16(Lame engine version: 3.93 or higher) <br> 17<font size="6">Programmers Manual</font></p> 18 19<p align="center"><i>The lame_enc.dll and this manual is 20copyright by Albert L Faber<br> 21Originally the the DLL interface is modeled after the BladeEnc 22DLL interface<br> 23which is copyrighted by Tord Jansson and Jukka Poikolainen<br> 24This document and the DLL interface may be distributed freely</i> 25<br> 26<i>as long as modifications are released under the LGPL license.</i> 27</p> 28 29<p align="center"> </p> 30 31<p align="center"><b>Homepage</b>: <a 32href="http://www.cdex.n3.net">http://www.cdex.n3.net</a><br> 33<b>E-mail:</b> mailto: <a 34href="mailto:afaber@users.sourceforge.net">afaber@users.sourceforge.net</a> 35</p> 36 37<p><br> 38<br> 39<br> 40<br> 41</p> 42 43<p><font size="5">Distribution</font> </p> 44 45<p>People and companies who wants to distribute 46lame_enc.dll with their commercial products are free to do so as 47far as I'm concerned (LGPL license), but should be aware that 48lame_enc.dll might infringe certain MP3 related software patents 49held by Fraunhofer IIS in certain countries. </p> 50 51<p><br> 52 </p> 53 54<p><font size="5">Disclaimer</font> </p> 55 56<p>lame_enc.dll and this manual is distributed 'as is' with no 57warranty of any kind. The Author is not to be held responsible 58for the result of any use or misuse of this product. <br> 59 <br> 60 </p> 61 62<p><font size="5">Current Bugs and Limitations</font> </p> 63 64<p>Although the interface is designed to be able to handle 65multiple parallel streams it can't be done yet due to limitations 66in the engine, only one stream is allowed. <br> 67 </p> 68 69<p><font size="5">Future Compatibility</font> </p> 70 71<p>This interface should be compatible with all future versions 72of lame_enc.DLL without any need to recompile your programs. You 73should therefore <b>not</b> check the version number upon start 74and prevent users from running your program with a later version 75of lame_enc.DLL. <br> 76 </p> 77 78<hr> 79 80<p><font size="5">How to use the DLL</font> </p> 81 82<p>1. Fill in a <a href="#The BE_CONFIG Structure">BE_CONFIG </a>structure 83and send it to <a href="#beInitStream()">beInitStream()</a>. Make 84sure that BE_ERR_SUCCESSFUL is returned. </p> 85 86<p>2. Reserve at least the amount of memory returned in 87dwBufferSize as your output buffer. </p> 88 89<p>3. Call <a href="#beEncodeChunk()">beEncodeChunk()</a> until 90you've encoded everything you want. </p> 91 92<p>4. Call <a href="#beDeinitStream()">beDeinitStream()</a> to 93make sure that all encoded data is flushed out before closing the 94stream. </p> 95 96<p>5. Close the stream using <a href="#beCloseStream()">beCloseStream() 97</a></p> 98 99<p>6. Finally, call the <a href="#beWriteVBRHeader()">beWriteVBRHeader()</a> 100functions, to insert the INFO tag MP3 Header. This is an 101extension of the Xing VBR tag which is also used for CBR 102encodings. This call can only be omitted if the INFO tag was 103explicilty disabled in the BE_CONFIG Structure.</p> 104 105<p>A handy feature is the available <a 106href="#Lame_enc.dll debug option">Lame_enc.dll debug option</a>, 107which will dump the important lame internal settings to a text 108file.<br> 109 </p> 110 111<p> </p> 112 113<p><font size="5">Return Values</font> </p> 114 115<p>See the header-file for a complete list of function return 116values. All functions should return BE_ERR_SUCCESSFUL unless 117something went wrong. <br> 118 </p> 119 120<hr> 121 122<h1><a name="Type definitions"><font size="5">Type definitions</font></a></h1> 123 124<p>The DLL is by default compiled with the MS Visual C/C++ 125compiler, which has the following type definitions:</p> 126 127<table border="0"> 128 <tr> 129 <td>Type </td> 130 <td>Description</td> 131 </tr> 132 <tr> 133 <td>CHAR</td> 134 <td>signed char (8 bits)</td> 135 </tr> 136 <tr> 137 <td>BYTE</td> 138 <td>unsigned char (8 bits)</td> 139 </tr> 140 <tr> 141 <td>SHORT</td> 142 <td>signed short (16 bits)</td> 143 </tr> 144 <tr> 145 <td>WORD</td> 146 <td>unsigned short (16 bits)</td> 147 </tr> 148 <tr> 149 <td>INT</td> 150 <td>signed long (32 bits)</td> 151 </tr> 152 <tr> 153 <td>LONG</td> 154 <td>signed long (32 bits)</td> 155 </tr> 156 <tr> 157 <td>BOOL</td> 158 <td>signed long (32 bits) (YES, 32 bits for a one bit 159 value)<br> 160 TRUE = 0<br> 161 FALSE=-1</td> 162 </tr> 163 <tr> 164 <td>DWORD</td> 165 <td>unsigned long (32 bits)</td> 166 </tr> 167 <tr> 168 <td>FLOAT</td> 169 <td>floating point (32 bits)</td> 170 </tr> 171 <tr> 172 <td>DOUBLE</td> 173 <td>float point (64 bits)</td> 174 </tr> 175 <tr> 176 <td>LPCSTR</td> 177 <td>const char* (32 bits pointer to zero terminated 178 character string)</td> 179 </tr> 180</table> 181 182<p>Within the lame_enc.dll All the structure elements are one 183byte alligned (due to backwards compatibility with BladEnc.DLL!</p> 184 185<p> </p> 186 187<hr> 188 189<h1><a name="The BE_CONFIG Structure"><font size="5">The 190BE_CONFIG Structure </font></a></h1> 191 192<p><font size="3">Currently there the BE_CONFIG structure has to 193varians, the old MP3 config structure that is truly compatible 194with the old BladeEnc interface, and the new defined LHV1 195structure, which can set far more options in the lame encoder</font></p> 196 197<p> </p> 198 199<h2><font size="5">The MP3 BE_CONFIG - structure (OBSOLETE)</font></h2> 200 201<p>This is the old structure as it was originally defined by the 202BladeEnc.DLL interface. However, I do highly recommend to use the 203new Lame specific config structure, since it gives you more 204control over the Lame encoder settings.</p> 205 206<p>These are the members of the BE_CONFIG structure you need to 207fill in before you call beInitStream(): <br> 208 </p> 209 210<table border="0"> 211 <tr> 212 <td><b>dwConfig</b></td> 213 <td>Specifies what kind of output you want. Since only 214 MP3 currently is supported you must set this to <b>BE_CONFIG_MP3</b></td> 215 </tr> 216 <tr> 217 <td><b>format.mp3.dwSampleRate</b> </td> 218 <td>Samplerate in Hz for MP3 file. This can be set to 219 either <b>32000</b>, <b>44100</b> or <b>48000</b>.</td> 220 </tr> 221 <tr> 222 <td><b>format.mp3.byMode</b></td> 223 <td>Stereomode for MP3 file. This can be either <b>BE_MP3_MODE_STEREO</b>, 224 <b>BE_MP3_MODE_DUALCHANNEL</b> or <b>BE_MP3_MODE_MONO.</b></td> 225 </tr> 226 <tr> 227 <td><b>format.mp3.bitrate</b></td> 228 <td>Bitrate (i.e. size) of MP3 file in kBit/s. Allowed 229 bitrates are: <b>32, 40, 48, 56, 64, 80, 96, 112, 128, 230 160, 192, 224, 256</b> and <b>320</b>.</td> 231 </tr> 232 <tr> 233 <td><b>format.mp3.bCopyright</b></td> 234 <td>If this is set to TRUE the Copyright bit in the MP3 235 stream will be set.</td> 236 </tr> 237 <tr> 238 <td><b>format.mp3.bCRC</b></td> 239 <td>Set this to TRUE in order to enable CRC-checksum in 240 the bitstream.</td> 241 </tr> 242 <tr> 243 <td><b>format.mp3.bOriginal</b></td> 244 <td>If this is set to TRUE the Original bit in the MP3 245 stream will be set.</td> 246 </tr> 247 <tr> 248 <td><b>format.mp3.bPrivate</b></td> 249 <td>If this is set to TRUE the Private bit in the MP3 250 stream will be set.</td> 251 </tr> 252</table> 253 254<p> </p> 255 256<h2><font size="5">The LHV1 BE_CONFIG - structure (recommended)</font></h2> 257 258<p>These are the members of the LHV1 BE_CONFIG structure, you 259need to fill in before you call beInitStream(): <br> 260</p> 261 262<table border="0"> 263 <tr> 264 <td><b>dwConfig</b></td> 265 <td>Specifies what kind of output you want. Since only 266 MP3 currently is supported you must set this to <b>BE_CONFIG_LAME</b></td> 267 </tr> 268 <tr> 269 <td> </td> 270 <td> </td> 271 </tr> 272 <tr> 273 <td><b>format.LHV1.dwStructVersion</b></td> 274 <td>Indicates the version number of the structure, 275 current version number is 1</td> 276 </tr> 277 <tr> 278 <td><b>format.LHV1.dwStructSize</b></td> 279 <td>Specifies the size of the BE_CONFIG structure 280 (currently 331 bytes)</td> 281 </tr> 282 <tr> 283 <td> </td> 284 <td> </td> 285 </tr> 286 <tr> 287 <td><b>format.LHV1.dwSampleRate</b> </td> 288 <td>Samplerate in Hz for MP3 file. This can be set to 289 either:<br> 290 <b>32000</b>, <b>44100</b> or <b>48000</b> for MPEG-I<br> 291 <b>16000</b>, <b>22050</b> or <b>24000</b> for MPEG-I<br> 292 <b>8000</b>, <b>11025</b> or <b>12000</b> for MPEG-II.5</td> 293 </tr> 294 <tr> 295 <td><b>format.LHV1.dwReSampleRate</b></td> 296 <td>Specifies to which sample rate the input stream has 297 to be resampled, if set to 0, the encoder will decide 298 which ReSample rate to use</td> 299 </tr> 300 <tr> 301 <td><b>format.LHV1.nMode</b></td> 302 <td>Stereomode for MP3 file. This can be either <b>BE_MP3_MODE_STEREO</b>, 303 <b>BE_MP3_MODE_JSTEREO, BE_MP3_MODE_DUALCHANNEL</b> or <b>BE_MP3_MODE_MONO.</b></td> 304 </tr> 305 <tr> 306 <td><strong>format.LHV1.dwBitrate</strong></td> 307 <td>For CBR, this specifies the actual bitrate, for VBR, 308 it specifies the minimum bitrate<br> 309 Allowed bitrates are: <b>32, 40, 48, 56, 64, 80, 96, 112, 310 128, 160, 192, 224, 256</b> and <b>320</b>.for MPEG-I<br> 311 Allowed bitrates are: <b>8, 16, 24, 32, 40, 48, 56, 64, 312 80, 96, 112, 128, 144 </b>and<b> 160</b>.for MPEG-II<p><strong>Note:</strong> 313 dwBitrate is used as the minimum bitrate in the case of 314 using a VBR mode.</p> 315 </td> 316 </tr> 317 <tr> 318 <td><strong>format.LHV1.dwMaxBitrate</strong></td> 319 <td>When VBR mode is enabled, it specifies the maximum 320 allowed bitrate (see also dwBitrate to specify the minium 321 bitrate), for CBR mode this setting is ignored.</td> 322 </tr> 323 <tr> 324 <td><strong>format.LHV1.nPreset</strong></td> 325 <td>Keep in mind that the presets can overwrite some of 326 the other settings, since it is called right before the 327 encoder is initialized<br> 328 <table border="0"> 329 <tr> 330 <td>The nPreset option can be set to one of the 331 following presets values::</td> 332 </tr> 333 </table> 334 <p>LQP_NOPRESET (don't use any presets)<br> 335 LQP_NORMAL_QUALITY (quality is set to 5)<br> 336 LQP_LOW_QUALITY (quality is set to 9)<br> 337 LQP_HIGH_QUALITY (quality is set to 2)<br> 338 LQP_VOICE_QUALITY (use for voice encoding)<br> 339 LQP_R3MIX (r3mix preset option)<br> 340 LQP_VERYHIGH_QUALITY (quality is set to 0)<br> 341 LQP_STANDARD (lame command line alt-preset standard)<br> 342 LQP_FAST_STANDARD (lame command line alt-preset fast 343 standard)<br> 344 LQP_EXTREME (lame command line alt-preset extreme)<br> 345 LQP_FAST_EXTREME (lame command line alt-preset fast 346 extreme)<br> 347 LQP_INSANE (lame command line alt-preset insane)<br> 348 LQP_ABR (lame command line alt-preset abr)<br> 349 LQP_CBR(lame command line alt-preset cbr)<br> 350 <br> 351 <strong>(old lame preset options)</strong><br> 352 LQP_PHONE <br> 353 LQP_SW<br> 354 LQP_AM<br> 355 LQP_FM<br> 356 LQP_VOICE<br> 357 LQP_RADIO<br> 358 LQP_TAPE<br> 359 LQP_HIFI<br> 360 LQP_CD<br> 361 LQP_STUDIO</p> 362 </td> 363 </tr> 364 <tr> 365 <td> </td> 366 </tr> 367 <tr> 368 <td><b>format.LHV1.bCopyright</b></td> 369 <td>If this is set to TRUE the Copyright bit in the MP3 370 stream will be set.</td> 371 </tr> 372 <tr> 373 <td><b>format.LHV1.bCRC</b></td> 374 <td>Set this to TRUE in order to enable CRC-checksum in 375 the bitstream.</td> 376 </tr> 377 <tr> 378 <td><b>format.LHV1.bOriginal</b></td> 379 <td>If this is set to TRUE the Original bit in the MP3 380 stream will be set.</td> 381 </tr> 382 <tr> 383 <td><b>format.LHV1.bPrivate</b></td> 384 <td>If this is set to TRUE the Private bit in the MP3 385 stream will be set.</td> 386 </tr> 387 <tr> 388 <td> </td> 389 <td> </td> 390 </tr> 391 <tr> 392 <td><strong>format.LHV1.nVbrMethod</strong></td> 393 <td>Sepecifes if the VBR method to use, currently the 394 following settings are supported:<p><font size="3">VBR_METHOD_NONE 395 (don't use VBR, use CBR encoding instead),<br> 396 VBR_METHOD_DEFAULT (default VBR method)<br> 397 VBR_METHOD_OLD (old VBR method, proven to be reliable)<br> 398 VBR_METHOD_NEW (new VBR method, faster than 399 VBR_METHOD_OLD)<br> 400 VBR_METHOD_MTRH (depreciated, same as VBR_METHOD_NEW)<br> 401 VBR_METHOD_ABR (Average Bitrate Encoding, see also </font><strong>format.LHV1.dwVbrAbr_bps</strong><font 402 size="3">)</font></p> 403 </td> 404 </tr> 405 <tr> 406 <td><strong>format.LHV1.bWriteVBRHeader</strong></td> 407 <td>Sepecifes if the a XING VBR header should be written 408 or not. When this option is enabled, you have to call the 409 <font size="3">beWriteVBRHeader function when encoding 410 has been completed. Keep in mind that the VBR info tag 411 can also be written for CBR encoded files, the TAG info 412 can be useful for additional info like encoder delay and 413 the like.</font></td> 414 </tr> 415 <tr> 416 <td><strong>format.LHV1.bEnableVBR</strong></td> 417 <td>Specifies if VBR encoding option shall be used or 418 not, possible values are TRUE/FALSE</td> 419 </tr> 420 <tr> 421 <td><strong>format.LHV1.nVBRQuality</strong></td> 422 <td>Quality option if VBR is enabled (0=highest quality, 423 9 is lowest quality)</td> 424 </tr> 425 <tr> 426 <td><strong>format.LHV1.dwVbrAbr_bps</strong></td> 427 <td>If the Average Bit Rate is specified, the lame 428 encoder ignores the nVBRQuality settings (However, <strong>bEnableVBR</strong> 429 must be set to TRUE and the <strong>format.LHV1.nVbrMethod 430 </strong>parameter should be set to<strong> </strong><font 431 size="3"><strong>VBR_METHOD_ABR</strong>). The allowed 432 range for the </font><strong>format.LHV1.dwVbrAbr_bps </strong>parameter<strong> 433 </strong>any integer value <font size="3">between:</font><p><strong>MPEG-I:</strong> 434 32000 .. 320000 bps<b><br> 435 </b><strong>MPEG-II:</strong> 8000 .. 160000 bps</p> 436 </td> 437 </tr> 438 <tr> 439 <td> </td> 440 <td> </td> 441 </tr> 442 <tr> 443 <td><strong>format.LHV1.bNoBitRes</strong></td> 444 <td>Disables the bit-resorvoir and disables the insertion 445 of padded frames</td> 446 </tr> 447 <tr> 448 <td><strong>format.LHV1.nQuality</strong></td> 449 <td>Quality Setting, HIGH BYTE should be NOT LOW byte, 450 otherwhise quality is set to 5. This is done to be 451 backward compatible. So to set quality to 3, you have to 452 set the nQuality parameter to 0xFC03.</td> 453 </tr> 454 <tr> 455 <td><b>format.mp3.btReserved</b></td> 456 <td>For future use, set all elements to zero</td> 457 </tr> 458</table> 459 460<p> </p> 461 462<p> </p> 463 464<hr> 465 466<h1><a name="beInitStream()"><font size="5">beInitStream()</font></a> 467</h1> 468 469<table border="0" cellspacing="16" width="100%"> 470 <tr> 471 <td valign="top" width="20%"><b>Synopsis:</b></td> 472 <td valign="top" width="80%">BE_ERR beInitStream( 473 PBE_CONFIG <i>pbeConfig</i>, PDWORD <i>dwSamples</i>, 474 PDWORD <i>dwBufferSize</i>, PHBE_STREAM <i>phbeStream</i> 475 )</td> 476 </tr> 477 <tr> 478 <td valign="top" width="20%"><b>Parameters:</b></td> 479 <td valign="top" width="80%"><table border="0" 480 cellspacing="10" width="100%"> 481 <tr> 482 <td valign="top" width="20%"><i>pbeConfig</i></td> 483 <td>Pointer at the struct containing encoder 484 settings.</td> 485 </tr> 486 <tr> 487 <td valign="top"><i>dwSamples</i></td> 488 <td>Pointer at double word where number of 489 samples to send to each <i>beEncodeChunk()</i> is 490 returned.</td> 491 </tr> 492 <tr> 493 <td valign="top"><i>dwBufferSize</i></td> 494 <td>Pointer at double word where minimum size in 495 bytes of output buffer is returned.</td> 496 </tr> 497 <tr> 498 <td valign="top"><i>phbeStream</i></td> 499 <td>Pointer at integer where Stream handle is 500 returned.</td> 501 </tr> 502 </table> 503 </td> 504 </tr> 505 <tr> 506 <td valign="top" width="20%"><b>Description:</b></td> 507 <td valign="top" width="80%">This function is the first 508 to call before starting an encoding stream.</td> 509 </tr> 510</table> 511 512<hr> 513 514<h1><a name="beEncodeChunk()"><font size="5">beEncodeChunk()</font> 515</a></h1> 516 517<table border="0" cellspacing="16" width="100%"> 518 <tr> 519 <td valign="top" width="20%"><b>Synopsis:</b></td> 520 <td valign="top" width="80%">BE_ERR beEncodeChunk( 521 HBE_STREAM <i>hbeStream</i>, DWORD <i>nSamples</i>, 522 PSHORT <i>pSamples</i>, PBYTE <i>pOutput</i>, PDWORD <i>pdwOutput</i> 523 )</td> 524 </tr> 525 <tr> 526 <td valign="top" width="20%"><b>Parameters:</b></td> 527 <td valign="top"><table border="0" cellspacing="10" 528 width="100%"> 529 <tr> 530 <td valign="top" width="20%"><i>hbeStream</i></td> 531 <td width="80%">Handle of the stream.</td> 532 </tr> 533 <tr> 534 <td valign="top" width="90"><i>nSamples</i></td> 535 <td>Number of samples to be encoded for this 536 call. This should be identical to what is 537 returned by <i>beInitStream()</i>, unless you are 538 encoding the last chunk, which might be smaller.</td> 539 </tr> 540 <tr> 541 <td valign="top" width="90"><i>pSamples</i></td> 542 <td>Pointer at the 16-bit signed samples to be 543 encoded. These should be in stereo when encoding 544 a stereo MP3 and mono when encoding a mono MP3.</td> 545 </tr> 546 <tr> 547 <td valign="top" width="90"><i>pOutput</i></td> 548 <td>Where to write the encoded data. This buffer 549 should be at least of the minimum size returned 550 by <i>beInitStream()</i>.</td> 551 </tr> 552 <tr> 553 <td valign="top" width="90"><i>pdwOutput</i></td> 554 <td>Where to return number of bytes of encoded 555 data written. The amount of data written might 556 vary from chunk to chunk.</td> 557 </tr> 558 </table> 559 </td> 560 </tr> 561 <tr> 562 <td valign="top" width="20%"><b>Description:</b></td> 563 <td valign="top">Encodes a chunk of samples. <i>Please 564 note that if you have set the output to generate mono MP3 565 files you must feed beEncodeChunk() with mono samples!</i></td> 566 </tr> 567</table> 568 569<hr> 570 571<h1><a name="beDeinitStream()"><font size="5">beDeinitStream()</font> 572</a></h1> 573 574<table border="0" cellspacing="16" width="100%"> 575 <tr> 576 <td valign="top" width="20%"><b>Synopsis:</b></td> 577 <td valign="top" width="80%">BE_ERR beDeinitStream( 578 HBE_STREAM <i>hbeStream</i>, PBYTE <i>pOutput</i>, PDWORD 579 <i>pdwOutput</i> )</td> 580 </tr> 581 <tr> 582 <td valign="top" width="20%"><b>Parameters:</b></td> 583 <td valign="top"><table border="0" cellspacing="10" 584 width="100%"> 585 <tr> 586 <td valign="top" width="20%"><i>hbeStream</i></td> 587 <td width="80%">Handle of the stream.</td> 588 </tr> 589 <tr> 590 <td valign="top"><i>pOutput</i></td> 591 <td>Where to write the encoded data. This buffer 592 should be at least of the minimum size returned 593 by <i>beInitStream()</i>.</td> 594 </tr> 595 <tr> 596 <td><i>pdwOutput</i></td> 597 <td>Where to return number of bytes of encoded 598 data written.</td> 599 </tr> 600 </table> 601 </td> 602 </tr> 603 <tr> 604 <td valign="top" width="20%"><b>Description:</b></td> 605 <td valign="top">This function should be called after 606 encoding the last chunk in order to flush the encoder. It 607 writes any encoded data that still might be left inside 608 the encoder to the output buffer. This function should 609 NOT be called unless you have encoded all of the chunks 610 in your stream.</td> 611 </tr> 612</table> 613 614<hr> 615 616<h1><a name="beCloseStream()"><font size="5">beCloseStream()</font></a> 617</h1> 618 619<table border="0" cellspacing="16" width="100%"> 620 <tr> 621 <td valign="top" width="20%"><b>Synopsis:</b></td> 622 <td valign="top">BE_ERR beCloseStream( HBE_STREAM <i>hbeStream</i> 623 )</td> 624 </tr> 625 <tr> 626 <td valign="top" width="90"><b>Parameters:</b></td> 627 <td valign="top"><table border="0" cellspacing="10" 628 width="100%"> 629 <tr> 630 <td width="20%"><i>hbeStream</i></td> 631 <td>Handle of the stream.</td> 632 </tr> 633 </table> 634 </td> 635 </tr> 636 <tr> 637 <td valign="top" width="90"><b>Description:</b></td> 638 <td valign="top">Last function to be called when finished 639 encoding a stream. Should unlike <i>beDeinitStream()</i> 640 also be called if the encoding is canceled.</td> 641 </tr> 642</table> 643 644<hr> 645 646<h1><a name="beVersion()"><font size="5">beVersion()</font> </a></h1> 647 648<table border="0" cellspacing="16" width="100%"> 649 <tr> 650 <td valign="top" width="20%"><b>Synopsis:</b></td> 651 <td valign="top">VOID beVersion( PBE_VERSION <i>pbeVersion</i> 652 )</td> 653 </tr> 654 <tr> 655 <td valign="top"><b>Parameters:</b></td> 656 <td valign="top"><table border="0" cellspacing="10" 657 width="100%"> 658 <tr> 659 <td valign="top" width="20%"><i>pbeVersion</i></td> 660 <td>Pointer at struct where version number, 661 release date and URL for homepage is returned.</td> 662 </tr> 663 </table> 664 </td> 665 </tr> 666 <tr> 667 <td valign="top"><b>Description:</b></td> 668 <td valign="top">Returns information like version numbers 669 (both of the DLL and encoding engine), release date and 670 URL for lame_enc's homepage. All this information should 671 be made available to the user of your product through a 672 dialog box or something similar.</td> 673 </tr> 674</table> 675 676<p> </p> 677 678<hr> 679 680<p> </p> 681 682<h1><a name="beWriteVBRHeader()"><font size="5">beWriteVBRHeader()</font> 683</a></h1> 684 685<table border="0" cellspacing="16" width="100%"> 686 <tr> 687 <td valign="top" width="20%"><b>Synopsis:</b></td> 688 <td valign="top">VOID beWriteVBRHeader( LPCSTR <i>pszMP3FileName</i> 689 )</td> 690 </tr> 691 <tr> 692 <td valign="top"><b>Parameters:</b></td> 693 <td valign="top"><table border="0" cellspacing="10" 694 width="100%"> 695 <tr> 696 <td valign="top" width="20%"><i>pszMP3FileName</i></td> 697 <td>Const Pointer zero terminated string, that 698 contains the MP3 file name.</td> 699 </tr> 700 </table> 701 </td> 702 </tr> 703 <tr> 704 <td valign="top"><b>Description:</b></td> 705 <td valign="top">Writes a Xing Header in front of the MP3 706 file. Make sure that the MP3 file is closed, and the the 707 beConfig.format.LHV1.bWriteVBRHeader has been set to 708 TRUE. In addition, it is always save to call 709 beWriteVBRHeader after the encoding has been finished, 710 even when the beConfig.format.LHV1.bWriteVBRHeader is not 711 set to TRUE</td> 712 </tr> 713</table> 714 715<p> </p> 716 717<p> </p> 718 719<hr> 720 721<p> </p> 722 723<h1><a name="Lame_enc.dll debug option">Lame_enc.dll debug option</a></h1> 724 725<p>The lame_enc.dll has a built-in debug option, that dumps all 726the important internal settings to a text file. To enable this 727feature, create a text file in the Windows directory which is 728named lame_enc.ini, and should contain the following two lines</p> 729 730<p>[debug]<br> 731WriteLogFile=1</p> 732 733<p>Save this text file, and each time you encode a file, the 734settings are added to a file name lame_enc.txt, that is located 735in the same directory as the lame_enc.dll</p> 736 737<p> </p> 738 739<p><br> 740 </p> 741</body> 742</html> 743