Updated F.A.Q. document.
This commit is contained in:
parent
0ac460b8dd
commit
0deb759096
61
doc/FAQ.html
61
doc/FAQ.html
@ -26,6 +26,7 @@ a:visited { color: #0000EE; }
|
|||||||
<li><a href="#fd53d98a">Who created LameXP?</a>
|
<li><a href="#fd53d98a">Who created LameXP?</a>
|
||||||
<li><a href="#de1c5e44">What license is LameXP released under?</a>
|
<li><a href="#de1c5e44">What license is LameXP released under?</a>
|
||||||
<li><a href="#303e5fa7">Do I have to pay for LameXP? / How can I donate to the authors of LameXP?</a>
|
<li><a href="#303e5fa7">Do I have to pay for LameXP? / How can I donate to the authors of LameXP?</a>
|
||||||
|
<li><a href="#e75ad4ac">Why is the thing called "LameXP" when it does so much more?</a>
|
||||||
<li><a href="#054010d9">MP3, AAC or Vorbis - What is the best compressed audio format?</a>
|
<li><a href="#054010d9">MP3, AAC or Vorbis - What is the best compressed audio format?</a>
|
||||||
<li><a href="#411d1257">What is the difference between the CBR, VBR and ABR rate control modes?</a>
|
<li><a href="#411d1257">What is the difference between the CBR, VBR and ABR rate control modes?</a>
|
||||||
<li><a href="#71a113b0">How do I enable AAC/MP4/M4A output (encoding) in LameXP?</a>
|
<li><a href="#71a113b0">How do I enable AAC/MP4/M4A output (encoding) in LameXP?</a>
|
||||||
@ -216,6 +217,23 @@ If you want to support the development of LameXP, you can do so by contributing
|
|||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
|
<a name="e75ad4ac"></a><b>Why is the thing called "LameXP" although it does so much more?</b><br>
|
||||||
|
<br>
|
||||||
|
LameXP was created as a (very simple!) GUI front-end to the LAME MP3 encoder, back in 2004. That version did<br>
|
||||||
|
NOT support any encoders except for LAME, it did NOT support any input formats other than Wave Audio files,<br>
|
||||||
|
it did NOT support any audio filters, it did NOT support multi-threading, it did NOT support Unicode file<br>
|
||||||
|
names and it did NOT handle meta data at all. Because the program really was nothing but (yet another) LAME<br>
|
||||||
|
front-end for Windows and because at that time Windows XP was the operating system of choice - for many<br>
|
||||||
|
people it still is nowadays - I decided to call the program "LameXP" (aka "LAME for Windows XP"). Since then<br>
|
||||||
|
more and more features have been added to LameXP. The program even went through two complete re-writes. Thus<br>
|
||||||
|
the name "LameXP" may not be the most meaningful one, especially because the program supports a huge number<br>
|
||||||
|
of encoders and decoders now, but I'm obviosuly lacking the creativity to come up with a better name. Also I<br>
|
||||||
|
think we already have enough doubious "super-duper everything to everything converter" programs out there...<br>
|
||||||
|
<br>
|
||||||
|
So to make a long story short: The name has historical reasons and probably isn't going to change ;-)<br><br>
|
||||||
|
|
||||||
|
<br><br>
|
||||||
|
|
||||||
<a name="054010d9"></a><b>MP3, AAC or Vorbis - What is the best compressed audio format?</b><br>
|
<a name="054010d9"></a><b>MP3, AAC or Vorbis - What is the best compressed audio format?</b><br>
|
||||||
<br>
|
<br>
|
||||||
This question can NOT be answered in general. The best audio format is the format that works best for you!<br>
|
This question can NOT be answered in general. The best audio format is the format that works best for you!<br>
|
||||||
@ -252,31 +270,35 @@ Another resource you might find interesting are Sebastian's Public Listening Tes
|
|||||||
<br>
|
<br>
|
||||||
CBR means "constant bitrate" and, as the name implies, CBR mode allocates the bits at a constant rate. This<br>
|
CBR means "constant bitrate" and, as the name implies, CBR mode allocates the bits at a constant rate. This<br>
|
||||||
means that each part of the audio will get the same amount of bits, regardless of its content. Obviously this<br>
|
means that each part of the audio will get the same amount of bits, regardless of its content. Obviously this<br>
|
||||||
will waste bits in parts of the audio that are easy to compress. At the same time the quality of parts of the<br>
|
will waste bits in parts of the audio that are "easy" to compress. At the same time the quality of parts of<br>
|
||||||
audio that are hard to compress will be degraded. Consequently using CBR mode is NOT a very good idea, unless<br>
|
the audio that are "hard" to compress will be degraded. Consequently using CBR mode is NOT a very good idea,<br>
|
||||||
you really have to for some reason. However CBR mode has the advantage that the final size of the compressed<br>
|
unless you really have to enforce a 100% constant bitrate (this is almost NEVER the case). However CBR mode<br>
|
||||||
file is perfectly predictable. The resulting file size is defined simply as "duration × fixed bitrate".<br>
|
has the advantage that the final size of the compressed file is perfectly predictable. The resulting file<br>
|
||||||
|
size is defined simply as "duration × fixed_bitrate". Note: The file size *is* predictable with ABR mode too!<br>
|
||||||
<br>
|
<br>
|
||||||
VBR means "variable bitrate" and, in contrast to CBR mode, VBR mode allows the bitrate to vary/fluctuate.<br>
|
VBR means "variable bitrate" and, in contrast to CBR mode, VBR mode allows the bitrate to vary/fluctuate.<br>
|
||||||
Thus the VBR mode enables the encoder to adapt the bitrate with respect to the content of the audio. Parts of<br>
|
Thus the VBR mode enables the encoder to adapt the bitrate with respect to the content of the audio. Parts of<br>
|
||||||
the audio that are easy to compress will get a lower bitrate in order to safe bits. Parts of the audio that<br>
|
the audio that are "easy" to compress will get a lower bitrate in order to avoid wasting bits there. At the<br>
|
||||||
are hard to compress will get a higher bitrate in order to avoid quality degradation. Or in other words: VBR<br>
|
same time, parts of the audio that are "hard" to compress will get a higher bitrate in order to avoid quality<br>
|
||||||
mode "moves" the bits to the locations where they are actually needed. Therefore the VBR mode achieves a much<br>
|
degradation. Or in other words: VBR mode "moves" the bits to the locations where they are actually needed!<br>
|
||||||
better compression efficiency than the CBR mode, i.e. with VBR mode you can get a better quality at the same<br>
|
Therefore the VBR mode achieves a much better compression efficiency than the CBR mode. This means with VBR<br>
|
||||||
file size, or the same quality at a smaller file size (compared to CBR mode). One disadvantage of the VBR<br>
|
mode you can get a better quality at the same file size - or the same quality at a smaller file size. One<br>
|
||||||
mode is, however, that the final size of the compressed file can NOT be predicted. The resulting file size is<br>
|
disadvantage of the VBR mode, however, is that the final size of the compressed file can NOT be predicted.<br>
|
||||||
defined as "duration × average bitrate", but the average bitrate can NOT be known beforehand. That's<br>
|
The resulting file size now is defined as "duration × average_bitrate", but the average bitrate is NOT<br>
|
||||||
because the average bitrate for a specific VBR quality level can vary greatly, depending solely on the<br>
|
known beforehand. That's because the average bitrate for a specific VBR quality level can vary greatly,<br>
|
||||||
complexity of the individual audio. Nonetheless VBR mode generally should be the preferred encoding mode.<br>
|
depending solely on the complexity of the individual audio. With VBR mode the encoder uses as many bits as<br>
|
||||||
|
required to achieve the desired level of quality. That clearly makes VBR the preferred encoding mode.<br>
|
||||||
<br>
|
<br>
|
||||||
ABR means "average bitrate". You can think of ABR mode as a compromise between the CBR and VBR mode. With ABR<br>
|
ABR means "average bitrate". You can think of ABR mode as a compromise between the CBR and VBR mode. With ABR<br>
|
||||||
mode the bitrate is allowed to vary/fluctuate, similar to VBR mode. However the ABR mode doesn't work with a<br>
|
mode the bitrate is allowed to vary/fluctuate, similar to VBR mode. However the ABR mode doesn't work with a<br>
|
||||||
predefined/fixed quality level, as VBR mode does. Instead in ABR mode the encoder will continuously re-adjust<br>
|
predefined/fixed quality level, as VBR mode does. Instead in ABR mode the encoder will continuously re-adjust<br>
|
||||||
the quality level in order to hit the target average(!) bitrate. You can also think of ABR mode as a mode<br>
|
the quality level in order to hit the target average(!) bitrate. You can also think of ABR mode as a mode<br>
|
||||||
that pre-allocates the bits in a CBR-like fashion and then redistributes the bits within a local neighborhood<br>
|
that pre-allocates the bits in a CBR-like fashion and then redistributes the bits within a local neighborhood<br>
|
||||||
as needed. Thus the ABR mode combines advantages of CBR mode (predictability) and VBR mode (good quality).<br>
|
as needed. Thus the ABR mode combines advantages of CBR mode (predictability) and VBR mode (higher quality).<br>
|
||||||
The final size of the encoded file is still defined as "duration × average bitrate", but with ABR mode the<br>
|
The final size of the encoded file is still defined as "duration × average_bitrate", but with ABR mode the<br>
|
||||||
average bitrate *is* known beforehand. So if you need to hit a specific file size, ABR mode is the solution.<br>
|
average bitrate *is* known beforehand. So if you need to hit a specific file size, ABR mode is the solution.<br>
|
||||||
|
Using ABR mode is to be preferred over CBR mode. Nonetheless VBR mode usually provides the best experience.<br>
|
||||||
|
<br>
|
||||||
<br>
|
<br>
|
||||||
Hint: The Nero AAC encoder supports a variant of the ABR mode, the so-called "2-Pass" mode. That mode scans<br>
|
Hint: The Nero AAC encoder supports a variant of the ABR mode, the so-called "2-Pass" mode. That mode scans<br>
|
||||||
through the entire file once (first pass) before the actual encoding is performed (second pass). This way the<br>
|
through the entire file once (first pass) before the actual encoding is performed (second pass). This way the<br>
|
||||||
@ -291,10 +313,11 @@ quality for obvious reasons. But drawing the conclusion that there is no differe
|
|||||||
VBR/ABR modes would be very wrong! The differences will become significant when using a reasonable bitrate.<br>
|
VBR/ABR modes would be very wrong! The differences will become significant when using a reasonable bitrate.<br>
|
||||||
Another mistake is starting with a low-quality source file and concluding that all modes perform equally bad.<br>
|
Another mistake is starting with a low-quality source file and concluding that all modes perform equally bad.<br>
|
||||||
<br>
|
<br>
|
||||||
Summary of rate control modes:<br><ul>
|
<br>
|
||||||
<li>Need to hit a specific fixed file size and still want to retain decent quality? ⇒ ABR mode
|
SUMMARY ON RATE CONTROL MODES:<br><ul>
|
||||||
<li>Want to retain a certain level of quality and the file size doesn't matter that much? ⇒ VBR mode
|
<li>Need to hit a specific fixed file size and still want to retain a decent quality? ⇒ ABR mode
|
||||||
<li>Avoid CBR mode by all means, unless there are crude restrictions that force you to use it!</ul>
|
<li>Want to retain a certain level of quality and hitting an exact file size is not needed? ⇒ VBR mode
|
||||||
|
<li>Avoid CBR mode by all means, unless there are "external" restrictions that force you to use it!</ul>
|
||||||
|
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1898,6 +1898,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation></translation>
|
<translation></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation>Hilfethemen anzeigen</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1897,6 +1897,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1907,6 +1907,10 @@ Ouvrir le dossier récursivement...</translation>
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1898,6 +1898,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1897,6 +1897,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1903,6 +1903,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1897,6 +1897,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1898,6 +1898,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1897,6 +1897,10 @@
|
|||||||
<source>OpusEnc:</source>
|
<source>OpusEnc:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Show Help</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>MetaInfo</name>
|
<name>MetaInfo</name>
|
||||||
|
@ -1269,17 +1269,91 @@
|
|||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelEncoderInfo">
|
<layout class="QHBoxLayout" name="horizontalLayout_10">
|
||||||
<property name="font">
|
<item>
|
||||||
<font>
|
<widget class="QLabel" name="labelEncoderInfo">
|
||||||
<weight>50</weight>
|
<property name="font">
|
||||||
<bold>false</bold>
|
<font>
|
||||||
</font>
|
<weight>50</weight>
|
||||||
</property>
|
<bold>false</bold>
|
||||||
<property name="text">
|
</font>
|
||||||
<string notr="true">(Encoder Info)</string>
|
</property>
|
||||||
</property>
|
<property name="text">
|
||||||
</widget>
|
<string notr="true">(Encoder Info)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="horizontalSpacer_60">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="labelCompressionHelp">
|
||||||
|
<property name="palette">
|
||||||
|
<palette>
|
||||||
|
<active>
|
||||||
|
<colorrole role="WindowText">
|
||||||
|
<brush brushstyle="SolidPattern">
|
||||||
|
<color alpha="255">
|
||||||
|
<red>0</red>
|
||||||
|
<green>0</green>
|
||||||
|
<blue>255</blue>
|
||||||
|
</color>
|
||||||
|
</brush>
|
||||||
|
</colorrole>
|
||||||
|
</active>
|
||||||
|
<inactive>
|
||||||
|
<colorrole role="WindowText">
|
||||||
|
<brush brushstyle="SolidPattern">
|
||||||
|
<color alpha="255">
|
||||||
|
<red>0</red>
|
||||||
|
<green>0</green>
|
||||||
|
<blue>255</blue>
|
||||||
|
</color>
|
||||||
|
</brush>
|
||||||
|
</colorrole>
|
||||||
|
</inactive>
|
||||||
|
<disabled>
|
||||||
|
<colorrole role="WindowText">
|
||||||
|
<brush brushstyle="SolidPattern">
|
||||||
|
<color alpha="255">
|
||||||
|
<red>120</red>
|
||||||
|
<green>120</green>
|
||||||
|
<blue>120</blue>
|
||||||
|
</color>
|
||||||
|
</brush>
|
||||||
|
</colorrole>
|
||||||
|
</disabled>
|
||||||
|
</palette>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>50</weight>
|
||||||
|
<bold>false</bold>
|
||||||
|
<underline>true</underline>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="cursor">
|
||||||
|
<cursorShape>PointingHandCursor</cursorShape>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Show Help</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer_2">
|
<spacer name="verticalSpacer_2">
|
||||||
@ -1323,8 +1397,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>604</width>
|
<width>602</width>
|
||||||
<height>1677</height>
|
<height>1668</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_22">
|
<layout class="QGridLayout" name="gridLayout_22">
|
||||||
@ -4514,6 +4588,9 @@
|
|||||||
<include location="../res/Icons.qrc"/>
|
<include location="../res/Icons.qrc"/>
|
||||||
<include location="../res/Icons.qrc"/>
|
<include location="../res/Icons.qrc"/>
|
||||||
<include location="../res/Icons.qrc"/>
|
<include location="../res/Icons.qrc"/>
|
||||||
|
<include location="../res/Icons.qrc"/>
|
||||||
|
<include location="../res/Icons.qrc"/>
|
||||||
|
<include location="../res/Icons.qrc"/>
|
||||||
</resources>
|
</resources>
|
||||||
<connections>
|
<connections>
|
||||||
<connection>
|
<connection>
|
||||||
|
Binary file not shown.
@ -30,7 +30,7 @@
|
|||||||
#define VER_LAMEXP_MINOR_LO 5
|
#define VER_LAMEXP_MINOR_LO 5
|
||||||
#define VER_LAMEXP_TYPE Alpha
|
#define VER_LAMEXP_TYPE Alpha
|
||||||
#define VER_LAMEXP_PATCH 13
|
#define VER_LAMEXP_PATCH 13
|
||||||
#define VER_LAMEXP_BUILD 1068
|
#define VER_LAMEXP_BUILD 1069
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Tool versions (minimum expected versions!)
|
// Tool versions (minimum expected versions!)
|
||||||
|
@ -316,10 +316,12 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
|
|||||||
m_encoderButtonGroup->addButton(radioButtonEncoderOpus, SettingsModel::OpusEncoder);
|
m_encoderButtonGroup->addButton(radioButtonEncoderOpus, SettingsModel::OpusEncoder);
|
||||||
m_encoderButtonGroup->addButton(radioButtonEncoderDCA, SettingsModel::DCAEncoder);
|
m_encoderButtonGroup->addButton(radioButtonEncoderDCA, SettingsModel::DCAEncoder);
|
||||||
m_encoderButtonGroup->addButton(radioButtonEncoderPCM, SettingsModel::PCMEncoder);
|
m_encoderButtonGroup->addButton(radioButtonEncoderPCM, SettingsModel::PCMEncoder);
|
||||||
|
|
||||||
m_modeButtonGroup = new QButtonGroup(this);
|
m_modeButtonGroup = new QButtonGroup(this);
|
||||||
m_modeButtonGroup->addButton(radioButtonModeQuality, SettingsModel::VBRMode);
|
m_modeButtonGroup->addButton(radioButtonModeQuality, SettingsModel::VBRMode);
|
||||||
m_modeButtonGroup->addButton(radioButtonModeAverageBitrate, SettingsModel::ABRMode);
|
m_modeButtonGroup->addButton(radioButtonModeAverageBitrate, SettingsModel::ABRMode);
|
||||||
m_modeButtonGroup->addButton(radioButtonConstBitrate, SettingsModel::CBRMode);
|
m_modeButtonGroup->addButton(radioButtonConstBitrate, SettingsModel::CBRMode);
|
||||||
|
|
||||||
radioButtonEncoderAAC->setEnabled(m_neroEncoderAvailable || m_fhgEncoderAvailable || m_qaacEncoderAvailable);
|
radioButtonEncoderAAC->setEnabled(m_neroEncoderAvailable || m_fhgEncoderAvailable || m_qaacEncoderAvailable);
|
||||||
radioButtonEncoderMP3->setChecked(m_settings->compressionEncoder() == SettingsModel::MP3Encoder);
|
radioButtonEncoderMP3->setChecked(m_settings->compressionEncoder() == SettingsModel::MP3Encoder);
|
||||||
radioButtonEncoderVorbis->setChecked(m_settings->compressionEncoder() == SettingsModel::VorbisEncoder);
|
radioButtonEncoderVorbis->setChecked(m_settings->compressionEncoder() == SettingsModel::VorbisEncoder);
|
||||||
@ -333,9 +335,15 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
|
|||||||
radioButtonModeAverageBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::ABRMode);
|
radioButtonModeAverageBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::ABRMode);
|
||||||
radioButtonConstBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::CBRMode);
|
radioButtonConstBitrate->setChecked(m_settings->compressionRCMode() == SettingsModel::CBRMode);
|
||||||
sliderBitrate->setValue(m_settings->compressionBitrate());
|
sliderBitrate->setValue(m_settings->compressionBitrate());
|
||||||
|
|
||||||
|
m_evenFilterCompressionTab = new CustomEventFilter();
|
||||||
|
labelCompressionHelp->installEventFilter(m_evenFilterCompressionTab);
|
||||||
|
|
||||||
connect(m_encoderButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateEncoder(int)));
|
connect(m_encoderButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateEncoder(int)));
|
||||||
connect(m_modeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateRCMode(int)));
|
connect(m_modeButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(updateRCMode(int)));
|
||||||
|
connect(m_evenFilterCompressionTab, SIGNAL(eventOccurred(QWidget*, QEvent*)), this, SLOT(compressionTabEventOccurred(QWidget*, QEvent*)));
|
||||||
connect(sliderBitrate, SIGNAL(valueChanged(int)), this, SLOT(updateBitrate(int)));
|
connect(sliderBitrate, SIGNAL(valueChanged(int)), this, SLOT(updateBitrate(int)));
|
||||||
|
|
||||||
updateEncoder(m_encoderButtonGroup->checkedId());
|
updateEncoder(m_encoderButtonGroup->checkedId());
|
||||||
|
|
||||||
//--------------------------------
|
//--------------------------------
|
||||||
@ -630,6 +638,7 @@ MainWindow::~MainWindow(void)
|
|||||||
LAMEXP_DELETE(m_evenFilterCustumParamsHelp);
|
LAMEXP_DELETE(m_evenFilterCustumParamsHelp);
|
||||||
LAMEXP_DELETE(m_evenFilterOutputFolderMouse);
|
LAMEXP_DELETE(m_evenFilterOutputFolderMouse);
|
||||||
LAMEXP_DELETE(m_evenFilterOutputFolderView);
|
LAMEXP_DELETE(m_evenFilterOutputFolderView);
|
||||||
|
LAMEXP_DELETE(m_evenFilterCompressionTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -690,42 +699,6 @@ void MainWindow::addFiles(const QStringList &files)
|
|||||||
/* ignore any exceptions that may occur */
|
/* ignore any exceptions that may occur */
|
||||||
}
|
}
|
||||||
|
|
||||||
//--ST--
|
|
||||||
//
|
|
||||||
//FileAnalyzer_ST *analyzerST = new FileAnalyzer_ST(files);
|
|
||||||
//connect(analyzerST, SIGNAL(fileSelected(QString)), m_banner, SLOT(setText(QString)), Qt::QueuedConnection);
|
|
||||||
//connect(analyzerST, SIGNAL(progressValChanged(unsigned int)), m_banner, SLOT(setProgressVal(unsigned int)), Qt::QueuedConnection);
|
|
||||||
//connect(analyzerST, SIGNAL(progressMaxChanged(unsigned int)), m_banner, SLOT(setProgressMax(unsigned int)), Qt::QueuedConnection);
|
|
||||||
//connect(analyzerST, SIGNAL(fileAnalyzed(AudioFileModel)), m_fileListModel, SLOT(addFile(AudioFileModel)), Qt::QueuedConnection);
|
|
||||||
//connect(m_banner, SIGNAL(userAbort()), analyzerST, SLOT(abortProcess()), Qt::DirectConnection);
|
|
||||||
//
|
|
||||||
//try
|
|
||||||
//{
|
|
||||||
// m_fileListModel->setBlockUpdates(true);
|
|
||||||
// QTime startTime = QTime::currentTime();
|
|
||||||
// m_banner->show(tr("Adding file(s), please wait..."), analyzerST);
|
|
||||||
// timeST = startTime.secsTo(QTime::currentTime());
|
|
||||||
//}
|
|
||||||
//catch(...)
|
|
||||||
//{
|
|
||||||
// /* ignore any exceptions that may occur */
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//------
|
|
||||||
//
|
|
||||||
//if(timeST > 0 && timeMT > 0)
|
|
||||||
//{
|
|
||||||
// double speedUp = static_cast<double>(timeST) / static_cast<double>(timeMT);
|
|
||||||
// qWarning("ST: %d, MT: %d", timeST, timeMT);
|
|
||||||
// QMessageBox::information(this, "Speed Up", QString().sprintf("Announcement: The new multi-threaded file analyzer is %.1fx faster !!!", speedUp), QMessageBox::Ok);
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// QMessageBox::information(this, "Speed Up", "Couldn't compare the the new multi-threaded file analyzer this time!", QMessageBox::Ok);
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//------
|
|
||||||
|
|
||||||
m_fileListModel->setBlockUpdates(false);
|
m_fileListModel->setBlockUpdates(false);
|
||||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||||
sourceFileView->update();
|
sourceFileView->update();
|
||||||
@ -3398,6 +3371,17 @@ void MainWindow::updateBitrate(int value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Event for compression tab occurred
|
||||||
|
*/
|
||||||
|
void MainWindow::compressionTabEventOccurred(QWidget *sender, QEvent *event)
|
||||||
|
{
|
||||||
|
if((sender == labelCompressionHelp) && (event->type() == QEvent::MouseButtonPress))
|
||||||
|
{
|
||||||
|
QDesktopServices::openUrl(QUrl("http://lamexp.git.sourceforge.net/git/gitweb.cgi?p=lamexp/lamexp;a=blob_plain;f=doc/FAQ.html;hb=HEAD#054010d9"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// =========================================================
|
// =========================================================
|
||||||
// Advanced option slots
|
// Advanced option slots
|
||||||
// =========================================================
|
// =========================================================
|
||||||
|
@ -71,6 +71,7 @@ private slots:
|
|||||||
void clearFilesButtonClicked(void);
|
void clearFilesButtonClicked(void);
|
||||||
void clearMetaButtonClicked(void);
|
void clearMetaButtonClicked(void);
|
||||||
void closeButtonClicked(void);
|
void closeButtonClicked(void);
|
||||||
|
void compressionTabEventOccurred(QWidget*, QEvent*);
|
||||||
void customParamsChanged(void);
|
void customParamsChanged(void);
|
||||||
void customParamsHelpRequested(QWidget *obj, QEvent *event);
|
void customParamsHelpRequested(QWidget *obj, QEvent *event);
|
||||||
void customTempFolderChanged(const QString &text);
|
void customTempFolderChanged(const QString &text);
|
||||||
@ -214,4 +215,5 @@ private:
|
|||||||
CustomEventFilter *m_evenFilterCustumParamsHelp;
|
CustomEventFilter *m_evenFilterCustumParamsHelp;
|
||||||
CustomEventFilter *m_evenFilterOutputFolderMouse;
|
CustomEventFilter *m_evenFilterOutputFolderMouse;
|
||||||
CustomEventFilter *m_evenFilterOutputFolderView;
|
CustomEventFilter *m_evenFilterOutputFolderView;
|
||||||
|
CustomEventFilter *m_evenFilterCompressionTab;
|
||||||
};
|
};
|
||||||
|
@ -743,7 +743,7 @@ void InitializationThread::selfTest(void)
|
|||||||
qDebug("%02i -> %s", ++n, g_lamexp_tools[i].pcName);
|
qDebug("%02i -> %s", ++n, g_lamexp_tools[i].pcName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(n != 25)
|
if(n != 28)
|
||||||
{
|
{
|
||||||
qFatal("Tool count mismatch !!!");
|
qFatal("Tool count mismatch !!!");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user