aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.tx/config6
-rw-r--r--src/plugins/Input/Input.pro2
-rw-r--r--src/plugins/Input/mpeg/CMakeLists.txt52
-rw-r--r--src/plugins/Input/mpeg/decoder_mad.cpp554
-rw-r--r--src/plugins/Input/mpeg/decoder_mad.h120
-rw-r--r--src/plugins/Input/mpeg/decoder_mpg123.cpp199
-rw-r--r--src/plugins/Input/mpeg/decoder_mpg123.h55
-rw-r--r--src/plugins/Input/mpeg/decodermpegfactory.cpp301
-rw-r--r--src/plugins/Input/mpeg/decodermpegfactory.h55
-rw-r--r--src/plugins/Input/mpeg/mpeg.pro34
-rw-r--r--src/plugins/Input/mpeg/mpegmetadatamodel.cpp407
-rw-r--r--src/plugins/Input/mpeg/mpegmetadatamodel.h66
-rw-r--r--src/plugins/Input/mpeg/replaygainreader.cpp91
-rw-r--r--src/plugins/Input/mpeg/replaygainreader.h46
-rw-r--r--src/plugins/Input/mpeg/settingsdialog.cpp118
-rw-r--r--src/plugins/Input/mpeg/settingsdialog.h49
-rw-r--r--src/plugins/Input/mpeg/settingsdialog.ui336
-rw-r--r--src/plugins/Input/mpeg/tagextractor.cpp124
-rw-r--r--src/plugins/Input/mpeg/tagextractor.h68
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts206
-rw-r--r--src/plugins/Input/mpeg/translations/translations.qrc32
48 files changed, 8482 insertions, 1 deletions
diff --git a/.tx/config b/.tx/config
index c86573a98..32f94d97d 100644
--- a/.tx/config
+++ b/.tx/config
@@ -103,6 +103,12 @@ source_lang = en
source_file = src/plugins/Input/flac/translations/flac_plugin_en.ts
type = QT
+[qmmp.mpeg]
+file_filter = src/plugins/Input/mpeg/translations/mpeg_plugin_<lang>.ts
+source_lang = en
+source_file = src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts
+type = QT
+
[qmmp.opus]
file_filter = src/plugins/Input/opus/translations/opus_plugin_<lang>.ts
source_lang = en
diff --git a/src/plugins/Input/Input.pro b/src/plugins/Input/Input.pro
index eef480670..18caadb88 100644
--- a/src/plugins/Input/Input.pro
+++ b/src/plugins/Input/Input.pro
@@ -1,7 +1,7 @@
include(../../../qmmp.pri)
TEMPLATE = subdirs
-SUBDIRS += mad vorbis cue sndfile wavpack
+SUBDIRS += mpeg vorbis cue sndfile wavpack
contains(CONFIG, FLAC_PLUGIN){
SUBDIRS += flac
diff --git a/src/plugins/Input/mpeg/CMakeLists.txt b/src/plugins/Input/mpeg/CMakeLists.txt
new file mode 100644
index 000000000..34f13bfb9
--- /dev/null
+++ b/src/plugins/Input/mpeg/CMakeLists.txt
@@ -0,0 +1,52 @@
+project(libmad)
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+# libqmmp
+include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../)
+link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp)
+
+# libmad
+pkg_search_module(MAD libmad mad)
+
+include_directories(${MAD_INCLUDE_DIRS} ${TAGLIB_INCLUDE_DIRS})
+link_directories(${MAD_LIBRARY_DIRS} ${TAGLIB_LIBRARY_DIRS})
+ADD_DEFINITIONS(${MAD_CFLAGS} ${TAGLIB_CFLAGS})
+
+SET(libmad_SRCS
+ decoder_mad.cpp
+ decodermadfactory.cpp
+ settingsdialog.cpp
+ tagextractor.cpp
+ mpegmetadatamodel.cpp
+ replaygainreader.cpp
+)
+
+SET(libmad_HDRS
+ decoder_mad.h
+ tagextractor.h
+ replaygainreader.h
+)
+
+SET(libmad_RCCS translations/translations.qrc)
+
+QT5_ADD_RESOURCES(libmad_RCC_SRCS ${libmad_RCCS})
+
+# user interface
+
+
+SET(libmad_UIS
+ settingsdialog.ui
+)
+
+QT5_WRAP_UI(libmad_UIS_H ${libmad_UIS})
+# Don't forget to include output directory, otherwise
+# the UI file won't be wrapped!
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+
+IF(MAD_FOUND)
+ADD_LIBRARY(mad MODULE ${libmad_SRCS} ${libmad_UIS_H} ${libmad_RCC_SRCS} ${libmad_HDRS})
+add_dependencies(mad qmmp)
+target_link_libraries(mad Qt5::Widgets -lqmmp ${MAD_LDFLAGS} ${TAGLIB_LDFLAGS})
+install(TARGETS mad DESTINATION ${LIB_DIR}/qmmp/Input)
+ENDIF(MAD_FOUND)
diff --git a/src/plugins/Input/mpeg/decoder_mad.cpp b/src/plugins/Input/mpeg/decoder_mad.cpp
new file mode 100644
index 000000000..d7625fc70
--- /dev/null
+++ b/src/plugins/Input/mpeg/decoder_mad.cpp
@@ -0,0 +1,554 @@
+/***************************************************************************
+ * Based on mq3 and madplay projects *
+ * *
+ * Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> *
+ * Copyright (C) 2000-2004 Robert Leslie <rob@mars.org> *
+ * Copyright (C) 2009-2018 Ilya Kotov forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <taglib/id3v2header.h>
+#include <taglib/tbytevector.h>
+#include <math.h>
+#include <stdio.h>
+#include "tagextractor.h"
+#include "decoder_mad.h"
+
+#define XING_MAGIC (('X' << 24) | ('i' << 16) | ('n' << 8) | 'g')
+#define XING_MAGIC2 (('I' << 24) | ('n' << 16) | ('f' << 8) | 'o')
+#define LAME_MAGIC (('L' << 24) | ('A' << 16) | ('M' << 8) | 'E')
+#define INPUT_BUFFER_SIZE (32*1024)
+
+DecoderMAD::DecoderMAD(QIODevice *i) : Decoder(i)
+{
+ m_inited = false;
+ m_totalTime = 0;
+ m_channels = 0;
+ m_bitrate = 0;
+ m_freq = 0;
+ m_len = 0;
+ m_input_buf = 0;
+ m_input_bytes = 0;
+ m_skip_frames = 0;
+ m_eof = false;
+ m_skip_bytes = 0;
+ m_play_bytes = -1;
+}
+
+DecoderMAD::~DecoderMAD()
+{
+ deinit();
+ if (m_input_buf)
+ {
+ qDebug("DecoderMAD: deleting input_buf");
+ delete [] m_input_buf;
+ m_input_buf = 0;
+ }
+}
+
+bool DecoderMAD::initialize()
+{
+ m_inited = false;
+ m_totalTime = 0;
+ m_channels = 0;
+ m_bitrate = 0;
+ m_freq = 0;
+ m_len = 0;
+ m_input_bytes = 0;
+
+ if (!input())
+ {
+ qWarning("DecoderMAD: cannot initialize. No input.");
+ return false;
+ }
+
+ if (!m_input_buf)
+ m_input_buf = new char[INPUT_BUFFER_SIZE];
+
+ if (input()->isSequential ()) //for streams only
+ {
+ TagExtractor extractor(input());
+ if(!extractor.id3v2tag().isEmpty())
+ addMetaData(extractor.id3v2tag());
+ }
+
+ mad_stream_init(&m_stream);
+ mad_frame_init(&m_frame);
+ mad_synth_init(&m_synth);
+
+ if (!findHeader())
+ {
+ qDebug("DecoderMAD: Can't find a valid MPEG header.");
+ return false;
+ }
+ mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf, m_input_bytes);
+ m_stream.error = MAD_ERROR_BUFLEN;
+ mad_frame_mute (&m_frame);
+ m_stream.next_frame = 0;
+ m_stream.sync = 0;
+ ChannelMap map;
+ if(m_channels == 1)
+ map << Qmmp::CHAN_FRONT_LEFT;
+ else
+ map << Qmmp::CHAN_FRONT_LEFT << Qmmp::CHAN_FRONT_RIGHT;
+ configure(m_freq, map, Qmmp::PCM_FLOAT);
+ m_inited = true;
+ return true;
+}
+
+void DecoderMAD::deinit()
+{
+ if (!m_inited)
+ return;
+
+ mad_synth_finish(&m_synth);
+ mad_frame_finish(&m_frame);
+ mad_stream_finish(&m_stream);
+
+ m_inited = false;
+ m_totalTime = 0;
+ m_channels = 0;
+ m_bitrate = 0;
+ m_freq = 0;
+ m_len = 0;
+ m_input_bytes = 0;
+ m_skip_frames = 0;
+ m_eof = false;
+ if(m_xing.lame)
+ {
+ delete m_xing.lame;
+ m_xing.lame = 0;
+ }
+}
+
+bool DecoderMAD::findXingHeader(struct mad_bitptr ptr, unsigned int bitlen)
+{
+ if (bitlen < 64)
+ return false;
+
+ quint32 xing_magic = mad_bit_read(&ptr, 32);
+ if(xing_magic != XING_MAGIC && xing_magic != XING_MAGIC2)
+ return false;
+
+ m_xing.flags = mad_bit_read(&ptr, 32);
+ bitlen -= 64;
+
+ if (m_xing.flags & XING_FRAMES)
+ {
+ if (bitlen < 32)
+ return false;
+
+ m_xing.frames = mad_bit_read(&ptr, 32);
+ bitlen -= 32;
+
+ if(!m_xing.frames)
+ {
+ qDebug("DecoderMAD: invalid xing header (zero number of frames)");
+ return false;
+ }
+ }
+
+ if (m_xing.flags & XING_BYTES)
+ {
+ if (bitlen < 32)
+ return false;
+
+ m_xing.bytes = mad_bit_read(&ptr, 32);
+ bitlen -= 32;
+
+ if(!m_xing.bytes)
+ {
+ qDebug("DecoderMAD: invalid xing header (zero number of bytes)");
+ return false;
+ }
+ }
+
+ if (m_xing.flags & XING_TOC)
+ {
+ if (bitlen < 800)
+ return false;
+
+ for (int i = 0; i < 100; ++i)
+ m_xing.toc[i] = mad_bit_read(&ptr, 8);
+
+ bitlen -= 800;
+ }
+
+ if (m_xing.flags & XING_SCALE)
+ {
+ if (bitlen < 32)
+ return false;
+
+ m_xing.scale = mad_bit_read(&ptr, 32);
+ bitlen -= 32;
+ }
+
+ m_xing.lame = findLameHeader(ptr, bitlen);
+ return true;
+}
+
+DecoderMAD::LameHeader* DecoderMAD::findLameHeader(mad_bitptr ptr, unsigned int bitlen)
+{
+ if(bitlen < 272)
+ return 0;
+
+ if(mad_bit_read (&ptr, 32) != LAME_MAGIC)
+ return 0;
+
+ LameHeader header;
+ mad_bit_skip (&ptr, 40); //version
+
+ header.revision = mad_bit_read (&ptr, 4);
+ if (header.revision == 15)
+ return 0;
+
+ mad_bit_skip(&ptr, 12); //VBR,Lowpass filter value
+ header.peak = mad_bit_read(&ptr, 32) << 5; //Peak amplitude
+ mad_bit_skip(&ptr, 32); //Replay Gain
+ mad_bit_skip(&ptr, 16); //Encoding flags, ATH Type, bitrate
+ header.start_delay = mad_bit_read (&ptr, 12); //Start delay
+ header.end_padding = mad_bit_read (&ptr, 12); //End padding
+ mad_bit_skip (&ptr, 8); //Misc
+ header.gain = mad_bit_read (&ptr, 8); //MP3 Gain
+ mad_bit_skip (&ptr, 64); //Preset and surroud info, MusicLength, Music CRC
+ return new LameHeader(header);
+}
+
+bool DecoderMAD::findHeader()
+{
+ bool result = false;
+ int count = 0;
+ bool has_xing = false;
+ bool is_vbr = false;
+ mad_timer_t duration = mad_timer_zero;
+ struct mad_header header;
+ mad_header_init (&header);
+ uint id3v2Size = 0;
+
+ forever
+ {
+ m_input_bytes = 0;
+ if (m_stream.error == MAD_ERROR_BUFLEN || !m_stream.buffer)
+ {
+ size_t remaining = 0;
+
+ if (m_stream.next_frame)
+ {
+ remaining = m_stream.bufend - m_stream.next_frame;
+ memmove (m_input_buf, m_stream.next_frame, remaining);
+ }
+
+ m_input_bytes = input()->read(m_input_buf + remaining, INPUT_BUFFER_SIZE - remaining);
+
+ if (m_input_bytes <= 0)
+ break;
+
+ mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf + remaining, m_input_bytes);
+ m_stream.error = MAD_ERROR_NONE;
+ }
+
+ if (mad_header_decode(&header, &m_stream) < 0)
+ {
+ if(m_stream.error == MAD_ERROR_LOSTSYNC)
+ {
+ uint tagSize = findID3v2((uchar *)m_stream.this_frame,
+ (ulong) (m_stream.bufend - m_stream.this_frame));
+ if (tagSize > 0)
+ {
+ mad_stream_skip(&m_stream, tagSize);
+ id3v2Size = tagSize;
+ }
+ continue;
+ }
+ else if (m_stream.error == MAD_ERROR_BUFLEN || MAD_RECOVERABLE(m_stream.error))
+ continue;
+ else
+ {
+ qDebug ("DecoderMAD: Can't decode header: %s", mad_stream_errorstr(&m_stream));
+ break;
+ }
+ }
+ result = true;
+
+ if (input()->isSequential())
+ break;
+
+ count ++;
+ //try to detect xing header
+ if (count == 1)
+ {
+ m_frame.header = header;
+ if (mad_frame_decode(&m_frame, &m_stream) != -1 &&
+ findXingHeader(m_stream.anc_ptr, m_stream.anc_bitlen))
+ {
+ is_vbr = true;
+
+ qDebug("DecoderMAD: Xing header found");
+
+ if (m_xing.flags & XING_FRAMES)
+ {
+ has_xing = true;
+ count = m_xing.frames;
+
+ if(m_xing.lame)
+ {
+ qDebug("DecoderMAD: LAME header found");
+ m_skip_bytes = m_xing.lame->start_delay * sizeof(float) * MAD_NCHANNELS(&header);
+ m_play_bytes = (m_xing.frames * 1152 - m_xing.lame->start_delay - m_xing.lame->end_padding) *
+ sizeof(float) * MAD_NCHANNELS(&header);
+ qDebug("DecoderMAD: samples to skip: %d, padding: %d",
+ m_xing.lame->start_delay, m_xing.lame->end_padding);
+ }
+ break;
+ }
+ }
+ }
+ //try to detect VBR
+ if (!is_vbr && !(count > 15))
+ {
+ if (m_bitrate && header.bitrate != m_bitrate)
+ {
+ qDebug ("DecoderMAD: VBR detected");
+ is_vbr = true;
+ }
+ else
+ m_bitrate = header.bitrate;
+ }
+ else if (!is_vbr)
+ {
+ qDebug ("DecoderMAD: Fixed rate detected");
+ break;
+ }
+ mad_timer_add (&duration, header.duration);
+ }
+
+ if (!result)
+ return false;
+
+ if (!is_vbr && !input()->isSequential())
+ {
+ double time = ((input()->size() - id3v2Size) * 8.0) / (header.bitrate);
+ double timefrac = (double)time - ((long)(time));
+ mad_timer_set(&duration, (long)time, (long)(timefrac*100), 100);
+ }
+ else if (has_xing)
+ {
+ mad_timer_multiply (&header.duration, count);
+ duration = header.duration;
+ }
+
+ m_totalTime = mad_timer_count(duration, MAD_UNITS_MILLISECONDS);
+ qDebug ("DecoderMAD: Total time: %ld", long(m_totalTime));
+ m_freq = header.samplerate;
+ m_channels = MAD_NCHANNELS(&header);
+ m_bitrate = header.bitrate / 1000;
+ mad_header_finish(&header);
+ input()->seek(0);
+ m_input_bytes = 0;
+ return true;
+}
+
+qint64 DecoderMAD::totalTime() const
+{
+ if (!m_inited)
+ return 0;
+ return m_totalTime;
+}
+
+int DecoderMAD::bitrate() const
+{
+ return int(m_bitrate);
+}
+
+qint64 DecoderMAD::read(unsigned char *data, qint64 size)
+{
+ while(m_skip_bytes > 0)
+ {
+ if(!decodeFrame())
+ return 0;
+
+ qint64 l = madOutputFloat((float*)data, size / sizeof(float)) * sizeof(float);
+
+ if(m_skip_bytes > l)
+ {
+ m_skip_bytes -= l;
+ continue;
+ }
+ else if(m_skip_bytes < l)
+ {
+ l -= m_skip_bytes;
+ memmove(data, data + m_skip_bytes, l);
+ m_skip_bytes = 0;
+ m_play_bytes -= l;
+ return l;
+ }
+ }
+
+ if(!decodeFrame())
+ return 0;
+
+ qint64 l = madOutputFloat((float*)data, size / sizeof(float)) * sizeof(float);
+
+ if(m_play_bytes > 0)
+ {
+ if(m_play_bytes > l)
+ m_play_bytes -= l;
+ else
+ {
+ l -= m_play_bytes;
+ m_play_bytes = 0;
+ }
+
+ }
+ return l;
+}
+
+void DecoderMAD::seek(qint64 pos)
+{
+ if(m_totalTime > 0)
+ {
+ qint64 seek_pos = qint64(pos * input()->size() / m_totalTime);
+ input()->seek(seek_pos);
+ mad_frame_mute(&m_frame);
+ mad_synth_mute(&m_synth);
+ m_stream.error = MAD_ERROR_BUFLEN;
+ m_stream.sync = 0;
+ m_input_bytes = 0;
+ m_stream.next_frame = 0;
+ m_skip_frames = 2;
+ m_skip_bytes = 0;
+ m_play_bytes = -1;
+ }
+}
+
+bool DecoderMAD::fillBuffer()
+{
+ if (m_stream.next_frame)
+ {
+ m_input_bytes = &m_input_buf[m_input_bytes] - (char *) m_stream.next_frame;
+ memmove(m_input_buf, m_stream.next_frame, m_input_bytes);
+ }
+ int len = input()->read((char *) m_input_buf + m_input_bytes, INPUT_BUFFER_SIZE - m_input_bytes);
+ if (!len)
+ {
+ qDebug("DecoderMAD: end of file");
+ return false;
+ }
+ else if(len < 0)
+ {
+ qWarning("DecoderMAD: error");
+ return false;
+ }
+ m_input_bytes += len;
+ mad_stream_buffer(&m_stream, (unsigned char *) m_input_buf, m_input_bytes);
+ return true;
+}
+
+uint DecoderMAD::findID3v2(uchar *data, ulong size) //retuns ID3v2 tag size
+{
+ if (size < 10)
+ return 0;
+
+ if (((data[0] == 'I' && data[1] == 'D' && data[2] == '3') || //ID3v2 tag
+ (data[0] == '3' && data[1] == 'D' && data[2] == 'I')) && //ID3v2 footer
+ data[3] < 0xff && data[4] < 0xff && data[6] < 0x80 &&
+ data[7] < 0x80 && data[8] < 0x80 && data[9] < 0x80)
+ {
+ TagLib::ByteVector byteVector((char *)data, size);
+ TagLib::ID3v2::Header header(byteVector);
+ return header.tagSize();
+ }
+ return 0;
+}
+
+bool DecoderMAD::decodeFrame()
+{
+ forever
+ {
+ if(((m_stream.error == MAD_ERROR_BUFLEN) || !m_stream.buffer) && !m_eof)
+ {
+ m_eof = !fillBuffer();
+ }
+ if(mad_frame_decode(&m_frame, &m_stream) < 0)
+ {
+ switch((int) m_stream.error)
+ {
+ case MAD_ERROR_LOSTSYNC:
+ {
+ //skip ID3v2 tag
+ uint tagSize = findID3v2((uchar *)m_stream.this_frame,
+ (ulong) (m_stream.bufend - m_stream.this_frame));
+ if (tagSize > 0)
+ {
+ mad_stream_skip(&m_stream, tagSize);
+ qDebug("DecoderMAD: %d bytes skipped", tagSize);
+ }
+ continue;
+ }
+ case MAD_ERROR_BUFLEN:
+ if(m_eof)
+ return false;
+ continue;
+ default:
+ if (!MAD_RECOVERABLE(m_stream.error))
+ return false;
+ else
+ continue;
+ }
+ }
+ if(m_skip_frames)
+ {
+ m_skip_frames--;
+ continue;
+ }
+ mad_synth_frame(&m_synth, &m_frame);
+ break;
+ }
+ return true;
+}
+
+qint64 DecoderMAD::madOutputFloat(float *data, qint64 samples)
+{
+ float *data_it = data;
+ unsigned int samples_per_channel, channels;
+ mad_fixed_t const *left, *right;
+
+ samples_per_channel = m_synth.pcm.length;
+ channels = m_synth.pcm.channels;
+ left = m_synth.pcm.samples[0];
+ right = m_synth.pcm.samples[1];
+ m_bitrate = m_frame.header.bitrate / 1000;
+ qint64 output_samples = 0;
+
+ if(samples_per_channel * channels > samples)
+ {
+ qWarning("DecoderMad: input buffer is too small");
+ samples_per_channel = samples / channels;
+ }
+
+ while (samples_per_channel--)
+ {
+ *data_it++ = mad_f_todouble(*left++);
+ output_samples++;
+ if (channels == 2)
+ {
+ *data_it++ = mad_f_todouble(*right++);
+ output_samples++;
+ }
+ }
+ return output_samples;
+}
diff --git a/src/plugins/Input/mpeg/decoder_mad.h b/src/plugins/Input/mpeg/decoder_mad.h
new file mode 100644
index 000000000..3cf1c1b35
--- /dev/null
+++ b/src/plugins/Input/mpeg/decoder_mad.h
@@ -0,0 +1,120 @@
+/***************************************************************************
+ * Based on mq3 and madplay projects *
+ * *
+ * Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> *
+ * Copyright (C) 2000-2004 Robert Leslie <rob@mars.org> *
+ * Copyright (C) 2009-2018 Ilya Kotov forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef DECODER_MAD_H
+#define DECODER_MAD_H
+
+class QIODevice;
+class DecoderMAD;
+
+#include <qmmp/decoder.h>
+#include "decodermpegfactory.h"
+
+extern "C"
+{
+#include <mad.h>
+}
+
+class DecoderMAD : public Decoder
+{
+public:
+ DecoderMAD(QIODevice *i);
+ virtual ~DecoderMAD();
+
+ // standard decoder API
+ bool initialize();
+ qint64 totalTime() const;
+ int bitrate() const;
+ qint64 read(unsigned char *data, qint64 size);
+ void seek(qint64);
+
+private:
+ //LAME header
+ struct LameHeader
+ {
+ unsigned char revision;
+ unsigned char flags;
+ mad_fixed_t peak;
+ unsigned short start_delay;
+ unsigned short end_padding;
+ qint8 gain;
+ };
+ // helper functions
+ bool decodeFrame();
+ qint64 madOutputFloat(float *data, qint64 samples);
+ bool fillBuffer();
+ void deinit();
+ bool findHeader();
+ bool findXingHeader(struct mad_bitptr, unsigned int bitlen);
+ LameHeader *findLameHeader(struct mad_bitptr ptr, unsigned int bitlen);
+ uint findID3v2(uchar *data, ulong size);
+ bool m_inited, m_eof;
+ qint64 m_totalTime;
+ int m_channels, m_skip_frames;
+ uint m_bitrate;
+ long m_freq, m_len;
+
+ // file input buffer
+ char *m_input_buf;
+ qint64 m_input_bytes;
+
+ // MAD decoder
+
+ //xing header
+ struct XingHeader
+ {
+ int flags;
+ unsigned long frames;
+ unsigned long bytes;
+ unsigned char toc[100];
+ long scale;
+ LameHeader *lame;
+
+ XingHeader()
+ {
+ flags = 0;
+ frames = 0;
+ bytes = 0;
+ scale = 0;
+ lame = 0;
+ }
+ };
+ XingHeader m_xing;
+
+ enum
+ {
+ XING_FRAMES = 0x0001,
+ XING_BYTES = 0x0002,
+ XING_TOC = 0x0004,
+ XING_SCALE = 0x0008
+ };
+
+ struct mad_stream m_stream;
+ struct mad_frame m_frame;
+ struct mad_synth m_synth;
+ qint64 m_skip_bytes, m_play_bytes;
+
+};
+
+
+#endif // DECODER_MAD_H
diff --git a/src/plugins/Input/mpeg/decoder_mpg123.cpp b/src/plugins/Input/mpeg/decoder_mpg123.cpp
new file mode 100644
index 000000000..4451ff47b
--- /dev/null
+++ b/src/plugins/Input/mpeg/decoder_mpg123.cpp
@@ -0,0 +1,199 @@
+/***************************************************************************
+ * Copyright (C) 2011-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <taglib/id3v2header.h>
+#include <taglib/tbytevector.h>
+#include <qmmp/buffer.h>
+#include <qmmp/output.h>
+#include <math.h>
+#include <stdio.h>
+#include "tagextractor.h"
+#include "decoder_mpg123.h"
+
+ssize_t mpg123_read_cb (void *src, void *buf, size_t size)
+{
+ DecoderMPG123 *d = (DecoderMPG123 *) src;
+ return d->input()->read((char *)buf, size);
+}
+
+off_t mpg123_seek_cb(void *src, off_t offset, int whence)
+{
+ DecoderMPG123 *d = (DecoderMPG123 *) src;
+ if (d->input()->isSequential())
+ return -1;
+
+ long start = 0;
+ switch (whence)
+ {
+ case SEEK_END:
+ start = d->input()->size();
+ break;
+
+ case SEEK_CUR:
+ start = d->input()->pos();
+ break;
+
+ case SEEK_SET:
+ default:
+ start = 0;
+ }
+
+ if (!d->input()->seek(start + offset))
+ return -1;
+ return d->input()->pos();
+}
+
+DecoderMPG123::DecoderMPG123(QIODevice *i) : Decoder(i)
+{
+ m_totalTime = 0;
+ m_rate = 0;
+ m_frame_info.bitrate = 0;
+ m_mpg123_encoding = MPG123_ENC_SIGNED_16;
+ m_handle = 0;
+}
+
+DecoderMPG123::~DecoderMPG123()
+{
+ cleanup(m_handle);
+ m_handle = 0;
+}
+
+bool DecoderMPG123::initialize()
+{
+ if (input()->isSequential ()) //for streams only
+ {
+ TagExtractor extractor(input());
+ if(!extractor.id3v2tag().isEmpty())
+ addMetaData(extractor.id3v2tag());
+ }
+
+ int err = mpg123_init();
+ if(err != MPG123_OK)
+ {
+ qWarning("DecoderMPG123: basic setup goes wrong: %s", mpg123_plain_strerror(err));
+ return false;
+ }
+ int channels = 0;
+
+ if(!(m_handle = mpg123_new(0, &err)))
+ {
+ qWarning("DecoderMPG123: basic setup goes wrong: %s", mpg123_plain_strerror(err));
+ return false;
+ }
+
+ mpg123_param (m_handle, MPG123_ADD_FLAGS, MPG123_SEEKBUFFER | MPG123_FUZZY, 0);
+
+ if((err = mpg123_replace_reader_handle(m_handle, mpg123_read_cb, mpg123_seek_cb, 0)) != MPG123_OK)
+ {
+ qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err));
+ cleanup(m_handle);
+ m_handle = 0;
+ return false;
+ }
+ setMPG123Format(MPG123_ENC_FLOAT_32);
+
+ if((err = mpg123_open_handle(m_handle, this)) != MPG123_OK)
+ {
+ qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err));
+ cleanup(m_handle);
+ m_handle = 0;
+ return false;
+ }
+
+ if((err = mpg123_getformat(m_handle, &m_rate, &channels, &m_mpg123_encoding)) != MPG123_OK)
+ {
+ qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err));
+ cleanup(m_handle);
+ m_handle = 0;
+ return false;
+ }
+ //check format
+ if(m_mpg123_encoding != MPG123_ENC_FLOAT_32)
+ {
+ cleanup(m_handle);
+ qWarning("DecoderMPG123: bad encoding: 0x%x!\n", m_mpg123_encoding);
+ m_handle = 0;
+ return false;
+ }
+
+ if(!input()->isSequential())
+ {
+ if((err = mpg123_scan(m_handle)) != MPG123_OK)
+ qWarning("DecoderMPG123: mpg123 error: %s", mpg123_plain_strerror(err));
+ //duration
+ m_totalTime = (qint64) mpg123_length(m_handle) * 1000 / m_rate;
+ }
+ else
+ m_totalTime = 0;
+
+ configure(m_rate, channels, Qmmp::PCM_FLOAT);
+ return true;
+}
+
+qint64 DecoderMPG123::totalTime() const
+{
+ return m_totalTime;
+}
+
+int DecoderMPG123::bitrate() const
+{
+ return m_frame_info.bitrate;
+}
+
+qint64 DecoderMPG123::read(unsigned char *data, qint64 size)
+{
+ size_t done = 0;
+ int err = mpg123_read(m_handle, data, size, &done);
+ if(err != MPG123_DONE && err != MPG123_OK)
+ {
+ qWarning("DecoderMPG123: decoder error: %s", mpg123_plain_strerror(err));
+ return -1;
+ }
+ mpg123_info(m_handle, &m_frame_info);
+ return done;
+}
+
+void DecoderMPG123::seek(qint64 pos)
+{
+ if(m_totalTime > 0)
+ {
+ mpg123_seek(m_handle, pos * m_rate / 1000, SEEK_SET);
+ }
+}
+
+void DecoderMPG123::cleanup(mpg123_handle *handle)
+{
+ if(handle)
+ {
+ mpg123_close(handle);
+ mpg123_delete(handle);
+ }
+}
+
+void DecoderMPG123::setMPG123Format(int encoding)
+{
+ int sample_rates[] = { 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000 };
+
+ /* Ensure that this output format will not change (it could, when we allow it). */
+ mpg123_format_none(m_handle);
+ for(unsigned int i = 0; i < sizeof(sample_rates)/sizeof(int); ++i)
+ mpg123_format(m_handle, sample_rates[i], MPG123_MONO | MPG123_STEREO, encoding);
+ m_mpg123_encoding = encoding;
+}
diff --git a/src/plugins/Input/mpeg/decoder_mpg123.h b/src/plugins/Input/mpeg/decoder_mpg123.h
new file mode 100644
index 000000000..54fc1e751
--- /dev/null
+++ b/src/plugins/Input/mpeg/decoder_mpg123.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * Copyright (C) 2011-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef DECODER_MPG123_H
+#define DECODER_MPG123_H
+
+class QIODevice;
+
+#include <mpg123.h>
+#include <qmmp/decoder.h>
+#include "decodermpegfactory.h"
+
+class DecoderMPG123 : public Decoder
+{
+public:
+ DecoderMPG123(QIODevice *i);
+ virtual ~DecoderMPG123();
+
+ // standard decoder API
+ bool initialize();
+ qint64 totalTime() const;
+ int bitrate() const;
+ qint64 read(unsigned char *data, qint64 size);
+ qint64 read(float *data, qint64 samples);
+ void seek(qint64);
+
+private:
+ void cleanup(mpg123_handle *handle);
+ void setMPG123Format(int encoding);
+ mpg123_handle *m_handle;
+ mpg123_frameinfo m_frame_info;
+ qint64 m_totalTime;
+ long m_rate;
+ int m_mpg123_encoding;
+};
+
+
+#endif // DECODER_MPG123_H
diff --git a/src/plugins/Input/mpeg/decodermpegfactory.cpp b/src/plugins/Input/mpeg/decodermpegfactory.cpp
new file mode 100644
index 000000000..70aef6488
--- /dev/null
+++ b/src/plugins/Input/mpeg/decodermpegfactory.cpp
@@ -0,0 +1,301 @@
+/***************************************************************************
+ * Copyright (C) 2008-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QDialog>
+#include <QMessageBox>
+#include <QSettings>
+#include <QTranslator>
+#include <QFile>
+#include <QTextCodec>
+#include <mad.h>
+#include <taglib/tag.h>
+#include <taglib/fileref.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/apetag.h>
+#include <taglib/tfile.h>
+#include <taglib/mpegfile.h>
+#include <taglib/tfilestream.h>
+#include "mpegmetadatamodel.h"
+#include "replaygainreader.h"
+#include "settingsdialog.h"
+#include "decoder_mad.h"
+#include "decoder_mpg123.h"
+#include "decodermpegfactory.h"
+
+// DecoderMPEGFactory
+
+DecoderMPEGFactory::DecoderMPEGFactory()
+{
+ //detecting rusxmms patch
+ m_using_rusxmms = false;
+ char str[] = { char(0xF2), char(0xE5), char(0xF1), char(0xF2), '\0'};
+ QTextCodec *codec = QTextCodec::codecForName ("windows-1251");
+ TagLib::String tstr(str);
+ if(codec->toUnicode(str) == QString::fromUtf8(tstr.toCString(true)))
+ {
+ qDebug("DecoderMADFactory: found taglib with rusxmms patch");
+ m_using_rusxmms = true;
+ }
+}
+
+bool DecoderMPEGFactory::canDecode(QIODevice *input) const
+{
+ char buf[8192];
+ qint64 buf_at = sizeof(buf);
+
+ if(input->peek(buf, sizeof(buf)) != sizeof(buf))
+ return false;
+
+ if (!memcmp(buf, "FLV", 3)) //skip Macromedia Flash Video
+ return false;
+
+ if (!memcmp(buf + 8, "WAVE", 4))
+ return !memcmp(buf + 20, "U" ,1);
+
+ if(!memcmp(buf, "ID3", 3))
+ {
+ TagLib::ByteVector byteVector(buf, sizeof(buf));
+ TagLib::ID3v2::Header header(byteVector);
+
+ //skip id3v2tag if possible
+ if(input->isSequential())
+ {
+ if(header.tagSize() >= sizeof(buf))
+ return false;
+
+ buf_at = sizeof(buf) - header.tagSize();
+ memmove(buf, buf + header.tagSize() + header.tagSize(), sizeof(buf) - header.tagSize());
+ }
+ else
+ {
+ input->seek(header.tagSize());
+ buf_at = input->read(buf, sizeof(buf));
+ input->seek(0); //restore inital position
+ }
+ }
+
+ if(buf_at > 0)
+ {
+ struct mad_stream stream;
+ struct mad_header header;
+ int dec_res;
+
+ mad_stream_init (&stream);
+ mad_header_init (&header);
+ mad_stream_buffer (&stream, (unsigned char *) buf, buf_at);
+ stream.error = MAD_ERROR_NONE;
+
+ while ((dec_res = mad_header_decode(&header, &stream)) == -1
+ && MAD_RECOVERABLE(stream.error))
+ ;
+ return dec_res != -1 ? true: false;
+ }
+ return false;
+}
+
+const DecoderProperties DecoderMPEGFactory::properties() const
+{
+ DecoderProperties properties;
+ properties.name = tr("MPEG Plugin");
+ properties.shortName = "mpeg";
+ properties.filters << "*.mp1" << "*.mp2" << "*.mp3" << "*.wav";
+ properties.description = tr("MPEG Files");
+ properties.contentTypes << "audio/mp3" << "audio/mpeg";
+ properties.hasAbout = true;
+ properties.hasSettings = true;
+ return properties;
+}
+
+Decoder *DecoderMPEGFactory::create(const QString &url, QIODevice *input)
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ Decoder *d = 0;
+ if(settings.value("MPEG/decoder", "mad").toString() == "mpg123")
+ {
+ qDebug("DecoderMPEGFactory: using mpg123 decoder");
+ d = new DecoderMPG123(input);
+ }
+ else
+ {
+ qDebug("DecoderMPEGFactory: using MAD decoder");
+ d = new DecoderMAD(input);
+ }
+
+ if(!url.contains("://")) //local file
+ {
+ ReplayGainReader rg(url);
+ d->setReplayGainInfo(rg.replayGainInfo());
+ }
+ return d;
+}
+
+QList<FileInfo *> DecoderMPEGFactory::createPlayList(const QString &fileName, bool useMetaData, QStringList *)
+{
+ FileInfo *info = new FileInfo(fileName);
+ TagLib::Tag *tag = 0;
+
+ TagLib::FileStream stream(QStringToFileName(fileName), true);
+ TagLib::MPEG::File fileRef(&stream, TagLib::ID3v2::FrameFactory::instance());
+
+ if (useMetaData)
+ {
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("MPEG");
+
+ QTextCodec *codec = 0;
+
+ uint tag_array[3];
+ tag_array[0] = settings.value("tag_1", SettingsDialog::ID3v2).toInt();
+ tag_array[1] = settings.value("tag_2", SettingsDialog::APE).toInt();
+ tag_array[2] = settings.value("tag_3", SettingsDialog::ID3v1).toInt();
+
+ QByteArray name;
+ for (int i = 0; i < 3; ++i)
+ {
+ switch ((uint) tag_array[i])
+ {
+ case SettingsDialog::ID3v1:
+ codec = QTextCodec::codecForName(settings.value("ID3v1_encoding","ISO-8859-1")
+ .toByteArray ());
+ tag = fileRef.ID3v1Tag();
+ break;
+ case SettingsDialog::ID3v2:
+ name = settings.value("ID3v2_encoding","UTF-8").toByteArray ();
+ if (name.contains("UTF"))
+ codec = QTextCodec::codecForName ("UTF-8");
+ else
+ codec = QTextCodec::codecForName(name);
+ tag = fileRef.ID3v2Tag();
+ break;
+ case SettingsDialog::APE:
+ codec = QTextCodec::codecForName ("UTF-8");
+ tag = fileRef.APETag();
+ break;
+ case SettingsDialog::Disabled:
+ break;
+ }
+ if (tag && !tag->isEmpty())
+ break;
+ }
+ settings.endGroup();
+
+ if(m_using_rusxmms)
+ codec = QTextCodec::codecForName ("UTF-8");
+
+ if (!codec)
+ codec = QTextCodec::codecForName ("UTF-8");
+
+ if (tag && codec)
+ {
+ bool utf = codec->name ().contains("UTF");
+ TagLib::String album = tag->album();
+ TagLib::String artist = tag->artist();
+ TagLib::String comment = tag->comment();
+ TagLib::String genre = tag->genre();
+ TagLib::String title = tag->title();
+
+ info->setMetaData(Qmmp::ALBUM,
+ codec->toUnicode(album.toCString(utf)).trimmed());
+ info->setMetaData(Qmmp::ARTIST,
+ codec->toUnicode(artist.toCString(utf)).trimmed());
+ info->setMetaData(Qmmp::COMMENT,
+ codec->toUnicode(comment.toCString(utf)).trimmed());
+ info->setMetaData(Qmmp::GENRE,
+ codec->toUnicode(genre.toCString(utf)).trimmed());
+ info->setMetaData(Qmmp::TITLE,
+ codec->toUnicode(title.toCString(utf)).trimmed());
+ info->setMetaData(Qmmp::YEAR,
+ tag->year());
+ info->setMetaData(Qmmp::TRACK,
+ tag->track());
+
+ if(tag == fileRef.ID3v2Tag())
+ {
+ if(!fileRef.ID3v2Tag()->frameListMap()["TPE2"].isEmpty())
+ {
+ TagLib::String albumArtist;
+ albumArtist = fileRef.ID3v2Tag()->frameListMap()["TPE2"].front()->toString();
+ info->setMetaData(Qmmp::ALBUMARTIST,
+ codec->toUnicode(albumArtist.toCString(utf)).trimmed());
+ }
+ if(!fileRef.ID3v2Tag()->frameListMap()["TCOM"].isEmpty())
+ {
+ TagLib::String composer;
+ composer = fileRef.ID3v2Tag()->frameListMap()["TCOM"].front()->toString();
+ info->setMetaData(Qmmp::COMPOSER,
+ codec->toUnicode(composer.toCString(utf)).trimmed());
+ }
+ if(!fileRef.ID3v2Tag()->frameListMap()["TPOS"].isEmpty())
+ {
+ TagLib::String disc = fileRef.ID3v2Tag()->frameListMap()["TPOS"].front()->toString();
+ info->setMetaData(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed());
+ }
+ }
+ else if(tag == fileRef.APETag())
+ {
+ TagLib::APE::Item fld;
+ if(!(fld = fileRef.APETag()->itemListMap()["ALBUM ARTIST"]).isEmpty())
+ info->setMetaData(Qmmp::ALBUMARTIST,
+ QString::fromUtf8(fld.toString().toCString(true)).trimmed());
+ if(!(fld = fileRef.APETag()->itemListMap()["COMPOSER"]).isEmpty())
+ info->setMetaData(Qmmp::COMPOSER,
+ QString::fromUtf8(fld.toString().toCString(true)).trimmed());
+ }
+ }
+ }
+ if (fileRef.audioProperties())
+ info->setLength(fileRef.audioProperties()->length());
+ QList <FileInfo*> list;
+ list << info;
+ return list;
+}
+
+MetaDataModel* DecoderMPEGFactory::createMetaDataModel(const QString &path, QObject *parent)
+{
+ return new MPEGMetaDataModel(m_using_rusxmms, path, parent);
+}
+
+void DecoderMPEGFactory::showSettings(QWidget *parent)
+{
+ SettingsDialog *s = new SettingsDialog(m_using_rusxmms, parent);
+ s->show();
+}
+
+void DecoderMPEGFactory::showAbout(QWidget *parent)
+{
+ QMessageBox::about (parent, tr("About MPEG Audio Plugin"),
+ tr("Qmmp MPEG Audio Plugin")+"\n"+
+ tr("Compiled against libmad version:")+" "+
+ QString("%1.%2.%3%4").arg(MAD_VERSION_MAJOR)
+ .arg(MAD_VERSION_MINOR)
+ .arg(MAD_VERSION_PATCH).arg(MAD_VERSION_EXTRA)+"\n"+
+ tr("Written by: Ilya Kotov <forkotov02@ya.ru>")+"\n"+
+ tr("Source code based on mq3 and madplay projects")
+ );
+}
+
+QTranslator *DecoderMPEGFactory::createTranslator(QObject *parent)
+{
+ QTranslator *translator = new QTranslator(parent);
+ QString locale = Qmmp::systemLanguageID();
+ translator->load(QString(":/mad_plugin_") + locale);
+ return translator;
+}
diff --git a/src/plugins/Input/mpeg/decodermpegfactory.h b/src/plugins/Input/mpeg/decodermpegfactory.h
new file mode 100644
index 000000000..5fd13dbe4
--- /dev/null
+++ b/src/plugins/Input/mpeg/decodermpegfactory.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * Copyright (C) 2006-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef DECODERMPEGFACTORY_H
+#define DECODERMPEGFACTORY_H
+
+#include <QObject>
+#include <QString>
+#include <QIODevice>
+#include <QWidget>
+
+#include <qmmp/decoder.h>
+#include <qmmp/output.h>
+#include <qmmp/decoderfactory.h>
+#include <qmmp/metadatamodel.h>
+
+class DecoderMPEGFactory : public QObject,
+ DecoderFactory
+{
+Q_OBJECT
+Q_PLUGIN_METADATA(IID "org.qmmp.qmmp.DecoderFactoryInterface.1.0")
+Q_INTERFACES(DecoderFactory)
+
+public:
+ DecoderMPEGFactory();
+ bool canDecode(QIODevice *input) const;
+ const DecoderProperties properties() const;
+ Decoder *create(const QString &path, QIODevice *input);
+ QList<FileInfo *> createPlayList(const QString &fileName, bool useMetaData, QStringList *);
+ MetaDataModel* createMetaDataModel(const QString &path, QObject *parent = 0);
+ void showSettings(QWidget *parent);
+ void showAbout(QWidget *parent);
+ QTranslator *createTranslator(QObject *parent);
+
+private:
+ bool m_using_rusxmms;
+};
+
+#endif
diff --git a/src/plugins/Input/mpeg/mpeg.pro b/src/plugins/Input/mpeg/mpeg.pro
new file mode 100644
index 000000000..e7d50b22e
--- /dev/null
+++ b/src/plugins/Input/mpeg/mpeg.pro
@@ -0,0 +1,34 @@
+include(../../plugins.pri)
+
+TARGET = $$PLUGINS_PREFIX/Input/mpeg
+
+HEADERS += decodermpegfactory.h \
+ decoder_mad.h \
+ decoder_mpg123.h \
+ settingsdialog.h \
+ tagextractor.h \
+ mpegmetadatamodel.h \
+ replaygainreader.h
+
+SOURCES += decoder_mad.cpp \
+ decoder_mpg123.cpp \
+ decodermpegfactory.cpp \
+ settingsdialog.cpp \
+ tagextractor.cpp \
+ mpegmetadatamodel.cpp \
+ replaygainreader.cpp
+
+FORMS += settingsdialog.ui
+
+RESOURCES = translations/translations.qrc
+
+unix {
+ target.path = $$LIB_DIR/qmmp/Input
+ INSTALLS += target
+ LIBS += -lmad
+ PKGCONFIG += taglib mad libmpg123
+}
+
+win32 {
+ LIBS += -lmad -ltag.dll
+}
diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.cpp b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp
new file mode 100644
index 000000000..65f2c94d6
--- /dev/null
+++ b/src/plugins/Input/mpeg/mpegmetadatamodel.cpp
@@ -0,0 +1,407 @@
+/***************************************************************************
+ * Copyright (C) 2009-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QTextCodec>
+#include <QSettings>
+
+#include <taglib/tag.h>
+#include <taglib/fileref.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/apetag.h>
+#include <taglib/tfile.h>
+#include <taglib/mpegfile.h>
+#include <taglib/mpegheader.h>
+#include <taglib/mpegproperties.h>
+#include <taglib/textidentificationframe.h>
+#include <taglib/attachedpictureframe.h>
+
+#include "mpegmetadatamodel.h"
+
+MPEGMetaDataModel::MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent) : MetaDataModel(parent)
+{
+ m_file = new TagLib::MPEG::File(QStringToFileName(path));
+ m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v1);
+ m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::ID3v2);
+ m_tags << new MpegFileTagModel(using_rusxmms, m_file, TagLib::MPEG::File::APE);
+}
+
+MPEGMetaDataModel::~MPEGMetaDataModel()
+{
+ while(!m_tags.isEmpty())
+ delete m_tags.takeFirst();
+ delete m_file;
+}
+
+QHash<QString, QString> MPEGMetaDataModel::audioProperties()
+{
+ QHash<QString, QString> ap;
+ QString text;
+ QString v;
+ switch((int)m_file->audioProperties()->version())
+ {
+ case TagLib::MPEG::Header::Version1:
+ v = "1";
+ break;
+ case TagLib::MPEG::Header::Version2:
+ v = "2";
+ break;
+ case TagLib::MPEG::Header::Version2_5:
+ v = "2.5";
+ }
+ text = QString("MPEG-%1 layer %2").arg(v).arg(m_file->audioProperties()->layer());
+ ap.insert(tr("Format"), text);
+ text = QString("%1").arg(m_file->audioProperties()->bitrate());
+ ap.insert(tr("Bitrate"), text+" "+tr("kbps"));
+ text = QString("%1").arg(m_file->audioProperties()->sampleRate());
+ ap.insert(tr("Sample rate"), text+" "+tr("Hz"));
+ switch (m_file->audioProperties()->channelMode())
+ {
+ case TagLib::MPEG::Header::Stereo:
+ ap.insert(tr("Mode"), "Stereo");
+ break;
+ case TagLib::MPEG::Header::JointStereo:
+ ap.insert(tr("Mode"), "Joint stereo");
+ break;
+ case TagLib::MPEG::Header::DualChannel:
+ ap.insert(tr("Mode"), "Dual channel");
+ break;
+ case TagLib::MPEG::Header::SingleChannel:
+ ap.insert(tr("Mode"), "Single channel");
+ break;
+ }
+ text = QString("%1 "+tr("KB")).arg(m_file->length()/1024);
+ ap.insert(tr("File size"), text);
+ if (m_file->audioProperties()->protectionEnabled())
+ ap.insert(tr("Protection"), tr("Yes"));
+ else
+ ap.insert(tr("Protection"), tr("No"));
+ if (m_file->audioProperties()->isCopyrighted())
+ ap.insert(tr("Copyright"), tr("Yes"));
+ else
+ ap.insert(tr("Copyright"), tr("No"));
+ if (m_file->audioProperties()->isOriginal())
+ ap.insert(tr("Original"), tr("Yes"));
+ else
+ ap.insert(tr("Original"), tr("No"));
+ return ap;
+}
+
+QList<TagModel* > MPEGMetaDataModel::tags()
+{
+ return m_tags;
+}
+
+QPixmap MPEGMetaDataModel::cover()
+{
+ if(!m_file->ID3v2Tag())
+ return QPixmap();
+ TagLib::ID3v2::FrameList frames = m_file->ID3v2Tag()->frameListMap()["APIC"];
+ if(frames.isEmpty())
+ return QPixmap();
+
+ for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
+ {
+ TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
+ if(frame && frame->type() == TagLib::ID3v2::AttachedPictureFrame::FrontCover)
+ {
+ QPixmap cover;
+ cover.loadFromData((const uchar *)frame->picture().data(),
+ frame->picture().size());
+ return cover;
+ }
+ }
+ //fallback image
+ for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
+ {
+ TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it);
+ if(frame)
+ {
+ QPixmap cover;
+ cover.loadFromData((const uchar *)frame->picture().data(),
+ frame->picture().size());
+ return cover;
+ }
+ }
+ return QPixmap();
+}
+
+MpegFileTagModel::MpegFileTagModel(bool using_rusxmms, TagLib::MPEG::File *file, TagLib::MPEG::File::TagTypes tagType)
+ : TagModel()
+{
+ m_tagType = tagType;
+ m_file = file;
+ m_using_rusxmms = using_rusxmms;
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("MPEG");
+ if (m_tagType == TagLib::MPEG::File::ID3v1)
+ {
+ m_tag = m_file->ID3v1Tag();
+ m_codec = QTextCodec::codecForName(settings.value("ID3v1_encoding", "ISO-8859-1").toByteArray ());
+ if (!m_codec)
+ QTextCodec::codecForName ("ISO-8859-1");
+ }
+ else if (m_tagType == TagLib::MPEG::File::ID3v2)
+ {
+ m_tag = m_file->ID3v2Tag();
+ m_codec = QTextCodec::codecForName(settings.value("ID3v2_encoding", "UTF-8").toByteArray ());
+ if (!m_codec)
+ QTextCodec::codecForName ("UTF-8");
+ }
+ else
+ {
+ m_tag = m_file->APETag();
+ m_codec = QTextCodec::codecForName ("UTF-8");
+ }
+ if(m_using_rusxmms)
+ {
+ m_codec = QTextCodec::codecForName ("UTF-8");
+ }
+ settings.endGroup();
+}
+
+MpegFileTagModel::~MpegFileTagModel()
+{}
+
+const QString MpegFileTagModel::name()
+{
+ if (m_tagType == TagLib::MPEG::File::ID3v1)
+ return "ID3v1";
+ else if (m_tagType == TagLib::MPEG::File::ID3v2)
+ return "ID3v2";
+ return "APE";
+}
+
+QList<Qmmp::MetaData> MpegFileTagModel::keys()
+{
+ QList<Qmmp::MetaData> list = TagModel::keys();
+ if (m_tagType == TagLib::MPEG::File::ID3v2)
+ return list;
+ else if(m_tagType == TagLib::MPEG::File::APE)
+ {
+ list.removeAll(Qmmp::DISCNUMBER);
+ return list;
+ }
+ list.removeAll(Qmmp::COMPOSER);
+ list.removeAll(Qmmp::ALBUMARTIST);
+ list.removeAll(Qmmp::DISCNUMBER);
+ return list;
+}
+
+const QString MpegFileTagModel::value(Qmmp::MetaData key)
+{
+ QTextCodec *codec = m_codec;
+
+ if (m_tag)
+ {
+ bool utf = codec->name().contains("UTF");
+ if (utf)
+ codec = QTextCodec::codecForName ("UTF-8");
+
+ TagLib::String str;
+ switch((int) key)
+ {
+ case Qmmp::TITLE:
+ str = m_tag->title();
+ break;
+ case Qmmp::ARTIST:
+ str = m_tag->artist();
+ break;
+ case Qmmp::ALBUMARTIST:
+ if(m_tagType == TagLib::MPEG::File::ID3v2 &&
+ !m_file->ID3v2Tag()->frameListMap()["TPE2"].isEmpty())
+ {
+ str = m_file->ID3v2Tag()->frameListMap()["TPE2"].front()->toString();
+ }
+ else if(m_tagType == TagLib::MPEG::File::APE &&
+ !m_file->APETag()->itemListMap()["ALBUM ARTIST"].isEmpty())
+ {
+ str = m_file->APETag()->itemListMap()["ALBUM ARTIST"].toString();
+ }
+ break;
+ case Qmmp::ALBUM:
+ str = m_tag->album();
+ break;
+ case Qmmp::COMMENT:
+ str = m_tag->comment();
+ break;
+ case Qmmp::GENRE:
+ str = m_tag->genre();
+ break;
+ case Qmmp::COMPOSER:
+ if(m_tagType == TagLib::MPEG::File::ID3v2 &&
+ !m_file->ID3v2Tag()->frameListMap()["TCOM"].isEmpty())
+ {
+ str = m_file->ID3v2Tag()->frameListMap()["TCOM"].front()->toString();
+ }
+ else if(m_tagType == TagLib::MPEG::File::APE &&
+ !m_file->APETag()->itemListMap()["COMPOSER"].isEmpty())
+ {
+ str = m_file->APETag()->itemListMap()["COMPOSER"].toString();
+ }
+ break;
+ case Qmmp::YEAR:
+ return QString::number(m_tag->year());
+ case Qmmp::TRACK:
+ return QString::number(m_tag->track());
+ case Qmmp::DISCNUMBER:
+ if(m_tagType == TagLib::MPEG::File::ID3v2
+ && !m_file->ID3v2Tag()->frameListMap()["TPOS"].isEmpty())
+ str = m_file->ID3v2Tag()->frameListMap()["TPOS"].front()->toString();
+ }
+ return codec->toUnicode(str.toCString(utf)).trimmed();
+ }
+ return QString();
+}
+
+void MpegFileTagModel::setValue(Qmmp::MetaData key, const QString &value)
+{
+ if(!m_tag)
+ return;
+ TagLib::String::Type type = TagLib::String::Latin1;
+
+ if (m_tagType == TagLib::MPEG::File::ID3v1)
+ {
+ if(m_codec->name().contains("UTF") && !m_using_rusxmms) //utf is unsupported
+ return;
+
+ if(m_using_rusxmms)
+ type = TagLib::String::UTF8;
+ }
+ else if (m_tagType == TagLib::MPEG::File::ID3v2)
+ {
+ if (m_codec->name().contains("UTF"))
+ {
+ type = TagLib::String::UTF8;
+ if (m_codec->name().contains("UTF-16"))
+ type = TagLib::String::UTF16;
+ else if (m_codec->name().contains("UTF-16LE"))
+ type = TagLib::String::UTF16LE;
+ else if (m_codec->name().contains("UTF-16BE"))
+ type = TagLib::String::UTF16BE;
+
+ m_codec = QTextCodec::codecForName ("UTF-8");
+ TagLib::ID3v2::FrameFactory *factory = TagLib::ID3v2::FrameFactory::instance();
+ factory->setDefaultTextEncoding(type);
+ m_file->setID3v2FrameFactory(factory);
+ type = TagLib::String::UTF8;
+ }
+ //save additional tags
+ TagLib::ByteVector id3v2_key;
+ if(key == Qmmp::ALBUMARTIST)
+ id3v2_key = "TPE2"; //album artist
+ else if (key == Qmmp::COMPOSER)
+ id3v2_key = "TCOM"; //composer
+ else if (key == Qmmp::DISCNUMBER)
+ id3v2_key = "TPOS"; //disc number
+
+ if (!id3v2_key.isEmpty())
+ {
+ TagLib::String composer = TagLib::String(m_codec->fromUnicode(value).constData(), type);
+ TagLib::ID3v2::Tag *id3v2_tag = dynamic_cast<TagLib::ID3v2::Tag *>(m_tag);
+ if(value.isEmpty())
+ id3v2_tag->removeFrames(id3v2_key);
+ else if(!id3v2_tag->frameListMap()[id3v2_key].isEmpty())
+ id3v2_tag->frameListMap()[id3v2_key].front()->setText(composer);
+ else
+ {
+ TagLib::ID3v2::TextIdentificationFrame *frame;
+ frame = new TagLib::ID3v2::TextIdentificationFrame(id3v2_key, type);
+ frame->setText(composer);
+ id3v2_tag->addFrame(frame);
+ }
+ return;
+ }
+ }
+ else if(m_tagType == TagLib::MPEG::File::APE)
+ {
+ type = TagLib::String::UTF8;
+ }
+
+ TagLib::String str = TagLib::String(m_codec->fromUnicode(value).constData(), type);
+
+ if(m_tagType == TagLib::MPEG::File::APE)
+ {
+ if(key == Qmmp::COMPOSER)
+ {
+ m_file->APETag()->addValue("COMPOSER", str, true);
+ return;
+ }
+ else if(key == Qmmp::ALBUMARTIST)
+ {
+ m_file->APETag()->addValue("ALBUM ARTIST", str, true);
+ return;
+ }
+ }
+
+ switch((int) key)
+ {
+ case Qmmp::TITLE:
+ m_tag->setTitle(str);
+ break;
+ case Qmmp::ARTIST:
+ m_tag->setArtist(str);
+ break;
+ case Qmmp::ALBUM:
+ m_tag->setAlbum(str);
+ break;
+ case Qmmp::COMMENT:
+ m_tag->setComment(str);
+ break;
+ case Qmmp::GENRE:
+ m_tag->setGenre(str);
+ break;
+ case Qmmp::YEAR:
+ m_tag->setYear(value.toInt());
+ break;
+ case Qmmp::TRACK:
+ m_tag->setTrack(value.toInt());
+ }
+}
+
+bool MpegFileTagModel::exists()
+{
+ return (m_tag != 0);
+}
+
+void MpegFileTagModel::create()
+{
+ if (m_tag)
+ return;
+ if (m_tagType == TagLib::MPEG::File::ID3v1)
+ m_tag = m_file->ID3v1Tag(true);
+ else if (m_tagType == TagLib::MPEG::File::ID3v2)
+ m_tag = m_file->ID3v2Tag(true);
+ else if (m_tagType == TagLib::MPEG::File::APE)
+ m_tag = m_file->APETag(true);
+}
+
+void MpegFileTagModel::remove()
+{
+ m_tag = 0;
+}
+
+void MpegFileTagModel::save()
+{
+ if(m_tag)
+ m_file->save(m_tagType, false);
+ else
+ m_file->strip(m_tagType);
+}
diff --git a/src/plugins/Input/mpeg/mpegmetadatamodel.h b/src/plugins/Input/mpeg/mpegmetadatamodel.h
new file mode 100644
index 000000000..30191cdb7
--- /dev/null
+++ b/src/plugins/Input/mpeg/mpegmetadatamodel.h
@@ -0,0 +1,66 @@
+/***************************************************************************
+ * Copyright (C) 2009-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef MPEGMETADATAMODEL_H
+#define MPEGMETADATAMODEL_H
+
+#include <qmmp/metadatamodel.h>
+#include <taglib/mpegfile.h>
+
+class QTextCodec;
+
+class MPEGMetaDataModel : public MetaDataModel
+{
+Q_OBJECT
+public:
+ MPEGMetaDataModel(bool using_rusxmms, const QString &path, QObject *parent);
+ ~MPEGMetaDataModel();
+ QHash<QString, QString> audioProperties();
+ QList<TagModel* > tags();
+ QPixmap cover();
+
+private:
+ QList<TagModel* > m_tags;
+ TagLib::MPEG::File *m_file;
+};
+
+class MpegFileTagModel : public TagModel
+{
+public:
+ MpegFileTagModel(bool using_rusxmms, TagLib::MPEG::File *file, TagLib::MPEG::File::TagTypes tagType);
+ ~MpegFileTagModel();
+ const QString name();
+ QList<Qmmp::MetaData> keys();
+ const QString value(Qmmp::MetaData key);
+ void setValue(Qmmp::MetaData key, const QString &value);
+ bool exists();
+ void create();
+ void remove();
+ void save();
+
+private:
+ bool m_using_rusxmms;
+ QTextCodec *m_codec;
+ TagLib::MPEG::File *m_file;
+ TagLib::Tag *m_tag;
+ TagLib::MPEG::File::TagTypes m_tagType;
+};
+
+#endif // MPEGMETADATAMODEL_H
diff --git a/src/plugins/Input/mpeg/replaygainreader.cpp b/src/plugins/Input/mpeg/replaygainreader.cpp
new file mode 100644
index 000000000..e66734562
--- /dev/null
+++ b/src/plugins/Input/mpeg/replaygainreader.cpp
@@ -0,0 +1,91 @@
+/***************************************************************************
+ * Copyright (C) 2009-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QtGlobal>
+#include <taglib/mpegfile.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/tag.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2header.h>
+#include <taglib/textidentificationframe.h>
+#include <taglib/tfilestream.h>
+#include <taglib/id3v2framefactory.h>
+#include "replaygainreader.h"
+
+ReplayGainReader::ReplayGainReader(const QString &path)
+{
+ TagLib::FileStream stream(QStringToFileName(path), true);
+ TagLib::MPEG::File fileRef(&stream, TagLib::ID3v2::FrameFactory::instance());
+ if(fileRef.ID3v2Tag())
+ readID3v2(fileRef.ID3v2Tag());
+ if(m_values.isEmpty() && fileRef.APETag())
+ readAPE(fileRef.APETag());
+}
+
+QMap <Qmmp::ReplayGainKey, double> ReplayGainReader::replayGainInfo() const
+{
+ return m_values;
+}
+
+void ReplayGainReader::readID3v2(TagLib::ID3v2::Tag *tag)
+{
+ TagLib::ID3v2::UserTextIdentificationFrame* frame = 0;
+ TagLib::ID3v2::FrameList frames = tag->frameList("TXXX");
+ for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it)
+ {
+ frame = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*it);
+ if(frame && frame->fieldList().size() >= 2)
+ {
+ TagLib::String desc = frame->description().upper();
+ if (desc == "REPLAYGAIN_TRACK_GAIN")
+ setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_TRACK_PEAK")
+ setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_ALBUM_GAIN")
+ setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, TStringToQString(frame->fieldList()[1]));
+ else if (desc == "REPLAYGAIN_ALBUM_PEAK")
+ setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, TStringToQString(frame->fieldList()[1]));
+ }
+ }
+}
+
+void ReplayGainReader::readAPE(TagLib::APE::Tag *tag)
+{
+ TagLib::APE::ItemListMap items = tag->itemListMap();
+ if (items.contains("REPLAYGAIN_TRACK_GAIN"))
+ setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].values()[0]));
+ if (items.contains("REPLAYGAIN_TRACK_PEAK"))
+ setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].values()[0]));
+ if (items.contains("REPLAYGAIN_ALBUM_GAIN"))
+ setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN,TStringToQString(items["REPLAYGAIN_ALBUM_GAIN"].values()[0]));
+ if (items.contains("REPLAYGAIN_ALBUM_PEAK"))
+ setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK,TStringToQString(items["REPLAYGAIN_ALBUM_PEAK"].values()[0]));
+}
+
+void ReplayGainReader::setValue(Qmmp::ReplayGainKey key, QString value)
+{
+ value.remove(" dB");
+ if(value.isEmpty())
+ return;
+ bool ok;
+ double v = value.toDouble(&ok);
+ if(ok)
+ m_values[key] = v;
+}
diff --git a/src/plugins/Input/mpeg/replaygainreader.h b/src/plugins/Input/mpeg/replaygainreader.h
new file mode 100644
index 000000000..d0bfa8f6a
--- /dev/null
+++ b/src/plugins/Input/mpeg/replaygainreader.h
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * Copyright (C) 2009-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#ifndef REPLAYGAINREADER_H
+#define REPLAYGAINREADER_H
+
+#include <QMap>
+#include <QString>
+#include <taglib/apetag.h>
+#include <taglib/id3v2tag.h>
+#include <qmmp/qmmp.h>
+
+/**
+ @author Ilya Kotov <forkotov02@ya.ru>
+*/
+class ReplayGainReader
+{
+public:
+ ReplayGainReader(const QString &path);
+ QMap <Qmmp::ReplayGainKey, double> replayGainInfo() const;
+
+private:
+ void readID3v2(TagLib::ID3v2::Tag *tag);
+ void readAPE(TagLib::APE::Tag *tag);
+ void setValue(Qmmp::ReplayGainKey key, QString value);
+ QMap <Qmmp::ReplayGainKey, double> m_values;
+};
+
+#endif // REPLAYGAINREADER_H
diff --git a/src/plugins/Input/mpeg/settingsdialog.cpp b/src/plugins/Input/mpeg/settingsdialog.cpp
new file mode 100644
index 000000000..056cae3ab
--- /dev/null
+++ b/src/plugins/Input/mpeg/settingsdialog.cpp
@@ -0,0 +1,118 @@
+/***************************************************************************
+ * Copyright (C) 2006-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#include <QTextCodec>
+#include <QSettings>
+#include <QFile>
+#include <qmmp/qmmp.h>
+#include "settingsdialog.h"
+
+SettingsDialog::SettingsDialog(bool using_rusxmms, QWidget *parent)
+ : QDialog(parent)
+{
+ m_ui.setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+ findCodecs();
+ foreach (QTextCodec *codec, codecs)
+ {
+ m_ui.id3v1EncComboBox->addItem(codec->name());
+ m_ui.id3v2EncComboBox->addItem(codec->name());
+ }
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("MPEG");
+
+ QString decoderName = settings.value("decoder", "mad").toString();
+ m_ui.madRadioButton->setChecked(true);
+ m_ui.mpg123RadioButton->setChecked(decoderName == "mpg123");
+
+ int pos = m_ui.id3v1EncComboBox->findText
+ (settings.value("ID3v1_encoding","ISO-8859-1").toString());
+ m_ui.id3v1EncComboBox->setCurrentIndex(pos);
+ pos = m_ui.id3v2EncComboBox->findText
+ (settings.value("ID3v2_encoding","UTF-8").toString());
+ m_ui.id3v2EncComboBox->setCurrentIndex(pos);
+
+ m_ui.firstTagComboBox->setCurrentIndex(settings.value("tag_1", ID3v2).toInt());
+ m_ui.secondTagComboBox->setCurrentIndex(settings.value("tag_2", APE).toInt());
+ m_ui.thirdTagComboBox->setCurrentIndex(settings.value("tag_3", ID3v1).toInt());
+
+ settings.endGroup();
+
+ if(using_rusxmms)
+ {
+ m_ui.id3v1EncComboBox->setEnabled(false);
+ m_ui.id3v2EncComboBox->setEnabled(false);
+ }
+}
+
+
+SettingsDialog::~SettingsDialog()
+{}
+
+void SettingsDialog::accept()
+{
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("MPEG");
+ settings.setValue("decoder", m_ui.mpg123RadioButton->isChecked() ? "mpg123" : "mad");
+ settings.setValue("ID3v1_encoding", m_ui.id3v1EncComboBox->currentText());
+ settings.setValue("ID3v2_encoding", m_ui.id3v2EncComboBox->currentText());
+ settings.setValue("tag_1", m_ui.firstTagComboBox->currentIndex());
+ settings.setValue("tag_2", m_ui.secondTagComboBox->currentIndex());
+ settings.setValue("tag_3", m_ui.thirdTagComboBox->currentIndex());
+ settings.endGroup();
+ QDialog::accept();
+}
+
+void SettingsDialog::findCodecs()
+{
+ QMap<QString, QTextCodec *> codecMap;
+ QRegExp iso8859RegExp("ISO[- ]8859-([0-9]+).*");
+
+ foreach (int mib, QTextCodec::availableMibs())
+ {
+ QTextCodec *codec = QTextCodec::codecForMib(mib);
+
+ QString sortKey = codec->name().toUpper();
+ int rank;
+
+ if (sortKey.startsWith("UTF-8"))
+ {
+ rank = 1;
+ }
+ else if (sortKey.startsWith("UTF-16"))
+ {
+ rank = 2;
+ }
+ else if (iso8859RegExp.exactMatch(sortKey))
+ {
+ if (iso8859RegExp.cap(1).size() == 1)
+ rank = 3;
+ else
+ rank = 4;
+ }
+ else
+ {
+ rank = 5;
+ }
+ sortKey.prepend(QChar('0' + rank));
+
+ codecMap.insert(sortKey, codec);
+ }
+ codecs = codecMap.values();
+}
diff --git a/src/plugins/Input/mpeg/settingsdialog.h b/src/plugins/Input/mpeg/settingsdialog.h
new file mode 100644
index 000000000..cdebaa15a
--- /dev/null
+++ b/src/plugins/Input/mpeg/settingsdialog.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * Copyright (C) 2009-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include <QDialog>
+#include "ui_settingsdialog.h"
+
+/**
+ @author Ilya Kotov <forkotov02@ya.ru>
+*/
+class SettingsDialog : public QDialog
+{
+Q_OBJECT
+public:
+ SettingsDialog(bool using_rusxmms, QWidget *parent = 0);
+
+ ~SettingsDialog();
+
+ enum TagType {ID3v1 = 0, ID3v2, APE, Disabled};
+
+public slots:
+ void accept();
+
+private:
+ void findCodecs();
+ Ui::SettingsDialog m_ui;
+ QList<QTextCodec *> codecs;
+
+};
+
+#endif
diff --git a/src/plugins/Input/mpeg/settingsdialog.ui b/src/plugins/Input/mpeg/settingsdialog.ui
new file mode 100644
index 000000000..818c802a6
--- /dev/null
+++ b/src/plugins/Input/mpeg/settingsdialog.ui
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SettingsDialog</class>
+ <widget class="QDialog" name="SettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>302</width>
+ <height>358</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MPEG Plugin Settings</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>Decoder</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QRadioButton" name="madRadioButton">
+ <property name="text">
+ <string>MAD</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QRadioButton" name="mpg123RadioButton">
+ <property name="text">
+ <string>MPG123</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Tag Priority</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_15_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>First:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="2">
+ <widget class="QComboBox" name="firstTagComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>ID3v1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ID3v2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>APE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_15_3">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Second:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" colspan="2">
+ <widget class="QComboBox" name="secondTagComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>ID3v1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ID3v2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>APE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_15_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Third:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2">
+ <widget class="QComboBox" name="thirdTagComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text">
+ <string>ID3v1</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>ID3v2</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>APE</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Disabled</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="3" rowspan="3">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Encodings</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_17_2_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>ID3v1 encoding:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="id3v1EncComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_18_2_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>ID3v2 encoding:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="id3v2EncComboBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2" rowspan="2">
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>SettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>168</x>
+ <y>351</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>70</x>
+ <y>244</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>SettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>257</x>
+ <y>336</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>302</x>
+ <y>319</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/Input/mpeg/tagextractor.cpp b/src/plugins/Input/mpeg/tagextractor.cpp
new file mode 100644
index 000000000..1e1557947
--- /dev/null
+++ b/src/plugins/Input/mpeg/tagextractor.cpp
@@ -0,0 +1,124 @@
+/***************************************************************************
+ * Copyright (C) 2008-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+
+#include <QIODevice>
+#include <QSettings>
+#include <QByteArray>
+#include <QBuffer>
+#include <QTextCodec>
+#include <QSettings>
+#include <QDir>
+#include <stdlib.h>
+
+#include "tagextractor.h"
+
+TagExtractor::TagExtractor(QIODevice *d)
+{
+ m_d = d;
+}
+
+
+TagExtractor::~TagExtractor()
+{
+}
+
+const QMap<Qmmp::MetaData, QString> TagExtractor::id3v2tag()
+{
+ QByteArray array = m_d->peek(2048);
+ int offset = array.indexOf("ID3");
+ if (offset < 0)
+ return m_tag;
+ ID3v2Tag taglib_tag(&array, offset);
+ if (taglib_tag.isEmpty())
+ return m_tag;
+
+ TagLib::String album = taglib_tag.album();
+ TagLib::String artist = taglib_tag.artist();
+ TagLib::String comment = taglib_tag.comment();
+ TagLib::String genre = taglib_tag.genre();
+ TagLib::String title = taglib_tag.title();
+
+ QSettings settings(Qmmp::configFile(), QSettings::IniFormat);
+ settings.beginGroup("MPEG");
+ QByteArray name = settings.value("ID3v2_encoding","UTF-8").toByteArray ();
+ bool utf = false;
+ QTextCodec *codec = 0;
+ if (name.contains("UTF"))
+ {
+ codec = QTextCodec::codecForName ("UTF-8");
+ utf = true;
+ }
+ else
+ codec = QTextCodec::codecForName(name);
+ settings.endGroup();
+
+ if (!codec)
+ codec = QTextCodec::codecForName ("UTF-8");
+
+ m_tag.insert(Qmmp::ALBUM,
+ codec->toUnicode(album.toCString(utf)).trimmed());
+ m_tag.insert(Qmmp::ARTIST,
+ codec->toUnicode(artist.toCString(utf)).trimmed());
+ m_tag.insert(Qmmp::COMMENT,
+ codec->toUnicode(comment.toCString(utf)).trimmed());
+ m_tag.insert(Qmmp::GENRE,
+ codec->toUnicode(genre.toCString(utf)).trimmed());
+ m_tag.insert(Qmmp::TITLE,
+ codec->toUnicode(title.toCString(utf)).trimmed());
+ m_tag.insert(Qmmp::YEAR,
+ QString::number(taglib_tag.year()));
+ m_tag.insert(Qmmp::TRACK,
+ QString::number(taglib_tag.track()));
+
+ if(!taglib_tag.frameListMap()["TCOM"].isEmpty())
+ {
+ TagLib::String composer = taglib_tag.frameListMap()["TCOM"].front()->toString();
+ m_tag.insert(Qmmp::COMPOSER, codec->toUnicode(composer.toCString(utf)).trimmed());
+ }
+ if(!taglib_tag.frameListMap()["TPOS"].isEmpty())
+ {
+ TagLib::String disc = taglib_tag.frameListMap()["TPOS"].front()->toString();
+ m_tag.insert(Qmmp::DISCNUMBER, QString(disc.toCString()).trimmed());
+ }
+ return m_tag;
+}
+
+ID3v2Tag::ID3v2Tag(QByteArray *array, long offset) : TagLib::ID3v2::Tag()
+{
+ m_buf = new QBuffer(array);
+ m_buf->open(QIODevice::ReadOnly);
+ m_offset = offset;
+ read();
+}
+
+void ID3v2Tag::read ()
+{
+ m_buf->seek(m_offset);
+ uint to_read = TagLib::ID3v2::Header::size();
+ if (to_read > 2048 - uint(m_offset))
+ return;
+ header()->setData(TagLib::ByteVector(m_buf->read(to_read).data(), to_read));
+ to_read = header()->tagSize();
+ if (!to_read || 2048 < m_offset + TagLib::ID3v2::Header::size())
+ return;
+ QByteArray array = m_buf->read(to_read);
+ TagLib::ByteVector v(array.data(), array.size());
+ parse(v);
+}
diff --git a/src/plugins/Input/mpeg/tagextractor.h b/src/plugins/Input/mpeg/tagextractor.h
new file mode 100644
index 000000000..9b142c26f
--- /dev/null
+++ b/src/plugins/Input/mpeg/tagextractor.h
@@ -0,0 +1,68 @@
+/***************************************************************************
+ * Copyright (C) 2008-2018 by Ilya Kotov *
+ * forkotov02@ya.ru *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ***************************************************************************/
+#ifndef TAGEXTRACTOR_H
+#define TAGEXTRACTOR_H
+
+#include <QMap>
+
+#include <taglib/tag.h>
+#include <taglib/fileref.h>
+#include <taglib/id3v1tag.h>
+#include <taglib/id3v2tag.h>
+#include <taglib/id3v2header.h>
+
+#include <qmmp/qmmp.h>
+
+class QIODevice;
+class QBuffer;
+class QByteArray;
+
+/**
+ @author Ilya Kotov <forkotov02@ya.ru>
+*/
+class TagExtractor
+{
+public:
+ TagExtractor(QIODevice *d);
+
+ ~TagExtractor();
+
+ const QMap<Qmmp::MetaData, QString> id3v2tag();
+
+private:
+ QMap<Qmmp::MetaData, QString> m_tag;
+ QIODevice *m_d;
+
+};
+
+class ID3v2Tag : public TagLib::ID3v2::Tag
+{
+public:
+ ID3v2Tag(QByteArray *array, long offset);
+
+protected:
+ void read ();
+
+private:
+ QBuffer *m_buf;
+ long m_offset;
+};
+
+#endif
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts
new file mode 100644
index 000000000..4ccc8c5f2
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_bg.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="bg">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts
new file mode 100644
index 000000000..70862992e
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_cs.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="cs">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Modul MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Soubory MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">O modulu MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Vstupní modul Qmmp MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Zkompilováno s libmad verze:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Zdrojový kód je založen na projektech mq3 a madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formát</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Datový tok</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Vzorkovací frekvence</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Režim</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KiB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Velikost souboru</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Ochrana</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Ano</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Ne</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Originál</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Nastavení pluginu MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Priorita tagu</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>První:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Zakázáno</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Druhý:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Třetí:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Kódování</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Kódování ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Kódování ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts
new file mode 100644
index 000000000..46ebc4793
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_de.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG-Modul</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG-Dateien</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Über MPEG-Audiomodul</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp MPEG-Audiomodul</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Kompiliert gegen libmad-Version:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Geschrieben von: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Basiert auf Code von den mq3- und madplay-Projekten</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Format</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Bitrate</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>KBit/s</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Abtastrate</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modus</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Dateigröße</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Geschützt</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Ja</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Nein</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Original</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Einstellungen MPEG-Modul</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Schlagwortpriorität</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Erster:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Deaktiviert</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Zweiter:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Dritter:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Kodierungen</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1-Kodierung:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2-Kodierung:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts
new file mode 100644
index 000000000..ed4f418c7
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_el.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="el">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Πρόσθετο MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Αρχεία MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Σχετικά με το πρόσθετο ήχου MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp πρόσθετο ήχου MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Μεταγλωττίστηκε χρησιμοποιώντας την έκδοση της βιβλιοθήκης libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Γράφτηκε από τον: Ilya Kotov &lt;forkotov02@hotmail.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Ο πηγαίος κώδικας έχει βασιστεί στα έργα mq3 και madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Μορφή</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Ρυθμός bit</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Ρυθμός δειγματοληψίας</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Λειτουργία</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Μέγεθος αρχείου</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Προστασία</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Ναι</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Όχι</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Πνευματικά δικαιώματα</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Αρχικό</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Ρυθμίσεις πρόσθετου MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Προτεραιότητα ετικέτας</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Πρώτη:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Απενεργοποιημένο</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Δεύτερη:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Τρίτη</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Κωδικοποιήσεις</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Κωδικοποίηση ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Κωδικοποίηση ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts
new file mode 100644
index 000000000..b5208a9fe
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_en.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts
new file mode 100644
index 000000000..aebbd365e
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_es.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="es">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Módulo MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Archivos MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Acerca del módulo de audio MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Módulo de audio MPEG para Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilado con libmad version:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Escrito por: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Código fuente basado sobre proyectos mq3 y madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Tasa de bits</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Frecuencia</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Tamaño del archivo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Protección</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Sí</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>No</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Original</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Configuración del módulo MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Prioridad de etiquetas</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Primera:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Deshabilitado</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Segunda:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Tercera:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codificaciones</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Codificación ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Codificación ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts
new file mode 100644
index 000000000..4c5233829
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_fi.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fi">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG-liitännäinen</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG-tiedostot</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Tietoja - MPEG-ääniliitännäinen</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp:n MPEG-ääniliitännäinen</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Koostettu vasten libmadin versiota:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Toteuttanut: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Bittinopeus</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Näytteenottotaajuus</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>kt</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Tiedostokoko</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Suojaus</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Kyllä</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Ei</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Tekijänoikeus</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Alkuperäinen</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG-liitännäisen asetukset</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts
new file mode 100644
index 000000000..b3df8b8a2
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_fr.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Greffon MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Fichiers MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">À propos du greffon audio MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Greffon audio MPEG pour Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilé contre libmad version :</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Écrit par : Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Code source basé sur les projets mq3 et madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Format</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Débit binaire</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Taux d’échantillonnage</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Mode</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>Ko</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Taille du fichier</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Protection</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Oui</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Original</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Configuration du greffon MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Priorité d&apos;étiquette</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Premier :</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Désactivé</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Deuxième :</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Troisième :</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Encodages</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Encodage ID3v1 :</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Encodage ID3v2 :</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts
new file mode 100644
index 000000000..5079eec87
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_gl_ES.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="gl_ES">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Engadido MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Ficheiros MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Sobre o engadido MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Engadido audio MPEG de Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilado coa versión libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Código fonte baseado nos proxectos mq3 e madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Taxa de bits</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Frecuencia de mostra</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Tamaño de ficheiro</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Protección</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Si</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Non</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Orixinal</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Preferencias do engadido MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Prioridade de etiquetas</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Primeira:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Desactivado</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Segunda:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Terceira:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codificacións</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Codificación ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Codificación ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts
new file mode 100644
index 000000000..185f592be
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_he.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="he">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">תוסף MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">קבצי MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">אודות תוסף שמע MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">תוסף שמע MPEG של Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">הודר כנגדlibmad גירסה:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">קוד מקור מבוסס על המיזמים mq3 וגם madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>פורמט</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>שיעור סיביות</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>שיעור דגימה</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>הרץ</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>מצב</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>ק״ב</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>גודל קובץ</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>הגנה</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>כן</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>לא</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>זכויות יוצרים</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>מקורי</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>הגדרות תוסף MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>עדיפות תגית</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>ראשונה:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>מנוטרלת</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>שניה:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>שלישית:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>קידוד</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>קידוד ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>קידוד ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts
new file mode 100644
index 000000000..b6288a31e
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_hu.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="hu_HU">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts
new file mode 100644
index 000000000..f0e33d4f3
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_id.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="id">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Plugin MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">File MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Tentang Plugin Audio MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Plugin Audio MPEG Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Dikompilasi terhadap versi libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Kode sumber berdasarkan pada mq3 dan proyek madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Format</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Bitrate</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Sample rate</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Mode</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Ukuran file</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Perlindungan</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Ya</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Tidak</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Hak cipta</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Asli</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Setelan Plugin MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Prioritas Tag</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Pertama:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Dinonaktifkan</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Detik:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Ketiga:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Pengkodean</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Pengkodean ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Pengkodean ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts
new file mode 100644
index 000000000..947657dc8
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_it.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="it">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Modulo MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Brani MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Info sul modulo audio MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Modulo audio MPEG per Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilato con libmad-Version:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Autore: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>bit al secondo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Campionamento</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Dimensione file</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Protezione</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Sì</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>No</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Originale</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Impostazioni modulo MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Codifica ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Codifica ID3v2:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Priorità etichettatura</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Prima:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Disabilitata</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Seconda:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Terza:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codifiche</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts
new file mode 100644
index 000000000..762c48b2a
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_ja.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja_JP">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG プラグイン</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG ファイル</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">MPEG 音響プラグインについて</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">QMMP MPEG 音響プラグイン</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">コンパイル時に使われた libmad の版はつぎのとおり:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">制作: Илья Котов (Ilya Kotov) &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">ソースコードは mq3 と madplay の両プロジェクトから流用</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>形式</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>ビットレート</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>キロビット毎秒</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>サンプルレート</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>モード</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KiB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>ファイルの大きさ</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>保護</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>する</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>しない</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>著作権</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>原作</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG プラグイン設定</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>タグ優先度</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>第一:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>無効</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>第二:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>第三:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>文字符号化の形式</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 用文字符号化形式:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 用文字符号化形式:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts
new file mode 100644
index 000000000..59a24131a
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_kk.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="kk_KZ">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts
new file mode 100644
index 000000000..c73586a37
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_lt.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="lt">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG įskiepis</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG bylos</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Apie MPEG audio įskiepį</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp MPEG įskiepis</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Sukurta libmad pagrindu:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Sukūrė: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Kodas sukurtas mq3 ir madplay projektų kodais </translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formatas</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Kokybė</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Dažnis</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Metodas</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>КB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Bylos dydis</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Apsauga</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Taip</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Ne</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Originalas</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 koduotė:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 koduotė:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG įskiepio nustatymai</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Tag pirmenybė</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Pirmas:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Išjungta</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Antras:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Trečias:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Koduotės</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts
new file mode 100644
index 000000000..eb4188712
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_nl.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="nl">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG Module</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG Bestanden</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Over de MPEG Audio Module</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">MPEG Audio Module voor Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Gecompileerd tegen libmad met versie:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Auteur: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Broncode gebasseerd op &apos;mq3&apos; en &apos;madplay&apos; projecten</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formaat</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Bitsnelheid</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Sample frequentie</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Stand</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Bestandsgrootte</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Bescherming</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Ja</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Nee</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Origineel</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG Module Instellingen</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 codering:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 codering:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Tag prioriteit</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Primair:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Uitgeschakeld</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Secundair:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Tertiair:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codering</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts
new file mode 100644
index 000000000..4b7bb1c2c
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pl_PL.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pl_PL">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Wtyczka MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Pliki MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">O wtyczce Audio MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Wtyczka MPEG Audio dla Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Skompilowane przy użyciu biblioteki libmad w wersji:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Kod źródłowy oparty na projektach mq3 oraz madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Format</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Szybkość transmisji</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Próbkowanie</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Tryb</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Wielkość pliku</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Zabezpieczenie</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Tak</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Nie</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Prawa autorskie</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Oryginał</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Ustawienia wtyczki MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Priorytet tagów</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Pierwszy:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Wyłączone</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Drugi:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Trzeci:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Kodowania</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Kodowanie ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Kodowanie ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts
new file mode 100644
index 000000000..ca9d97497
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Suplemento MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Ficheiros MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Sobre o suplemento MPEG Audio</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Suplemento Qmmp MPEG Audio</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilado com a versão libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Desenvolvido por: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Baseado no código fonte dos projetos mq3 e madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Taxa de dados</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Frequência</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Tamanho do ficheiro</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Proteção</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Sim</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Não</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Copyright</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Original</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Definições</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Prioridade das etiquetas</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Primeiro:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Desativada</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Segundo:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Terceiro:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codificação</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Codificação ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Codificação ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts
new file mode 100644
index 000000000..6b87e4031
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_pt_BR.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="pt_BR">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Plugin MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Arquivos MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Sobre o plugin MPEG Audio</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Plugin Qmmp MPEG Audio</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Compilado com a versão libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Baseado no código fonte dos projetos mq3 e madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Formato</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Taxa de dados</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Frequência</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Modo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Tamanho do arquivo</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Proteção</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Sim</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Não</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Direitos autorais</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Original</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Preferências do plugin MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Prioridade das etiquetas</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Primeiro:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Desativada</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Segundo:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Terceiro:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Codificação</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Codificação ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Codificação ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts
new file mode 100644
index 000000000..ded965774
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_ru.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ru">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Модуль MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Файлы MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Об аудио-модуле MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Аудио-модуль MPEG для Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Собрано с версией libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Разработчик: Илья Котов &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Исходный код снован на проектах mq3 и madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Формат</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Битовая частота</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>кбит/с</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Дискретизация</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Гц</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Режим</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>КБ</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Размер файла</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Защита</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Да</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Нет</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Авторские права</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Оригинальный</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Настройка модуля MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Приоритет тегов</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Первый:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Выключен</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Второй:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Третий:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Кодировки</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Кодировка ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Кодировка ID3v2:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts
new file mode 100644
index 000000000..c659c4dcc
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sk.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sk_SK">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts
new file mode 100644
index 000000000..28a38cc3d
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_BA.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sr_BA">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">МПЕГ прикључак</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">МПЕГ фајлови</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">О МПЕГ прикључку</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Кумп МПЕГ прикључак</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Компилован на libmad издању:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Аутор: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Заснован на пројектима mq3 и madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Формат</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Битски проток</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kb/s</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Узорковање</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Режим</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Величина</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Заштита</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Да</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Не</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Ауторско право</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Оригинал</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Поставке МПЕГ прикључка</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Приоритет ознака</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Прва:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ИД3в1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ИД3в2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>ЕЈП</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>онемогућена</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Друга:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Трећа:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Кодирање</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ИД3в1 кодирање:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ИД3в2 кодирање:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts
new file mode 100644
index 000000000..ef0a63c69
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_sr_RS.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="sr_RS">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">МПЕГ прикључак</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">МПЕГ фајлови</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">О МПЕГ прикључку</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Кумп МПЕГ прикључак</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Компилован на libmad издању:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Аутор: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Заснован на пројектима mq3 и madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Формат</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Битски проток</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kb/s</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Узорковање</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Режим</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Величина</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Заштита</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Да</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Не</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Ауторско право</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Оригинал</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Поставке МПЕГ прикључка</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Приоритет ознака</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Прва:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ИД3в1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ИД3в2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>ЕЈП</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>онемогућена</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Друга:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Трећа:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Кодирање</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ИД3в1 кодирање:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ИД3в2 кодирање:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts
new file mode 100644
index 000000000..3ed31f662
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_tr.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="tr_TR">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG Eklentisi</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG Dosyaları</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">MPEG Ses Eklentisi Hakkında</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp MPEG Ses Eklentisi</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Derlendiği libmad sürümü:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Yazan: Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG Eklenti Ayarları</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Etiket Önceliği</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>İlk:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Etkisiz</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>İkinci:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Üçüncü:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Kodlamalar</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 kodlaması:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 kodlaması:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts
new file mode 100644
index 000000000..91d889f17
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_uk_UA.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="uk">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">Модуль MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">Файли MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">Про аудіо-модуль MPEG</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Аудіо-модуль MPEG для Qmmp</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">Зібрано з версією libmad:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">Розробник: Ілля Котов &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">Вихідні коди базуються на проектах mq3 та madplay</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>Формат</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>Бітрейт</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>Кб/с</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>Частота</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Гц</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>Режим</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>Кб</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>Розмір файла</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>Захищено</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>Так</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>Ні</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>Авторське право</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>Оригінал</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>Кодування ID3v1:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>Кодування ID3v2:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>Налаштування модуля MPEG</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>Пріоритет тегу</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>Перший:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>Вимкнути</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>Другий:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>Третій:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>Кодування</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts
new file mode 100644
index 000000000..4a72af084
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_CN.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_CN">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG 插件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG 文件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">关于 MPEG 音频插件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp MPEG 音频插件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">编译基于 libmad 版本:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished">源代码基于mq3及madplay项目</translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>格式</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>比特率</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>千比特每秒</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>取样率</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>赫兹</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>风格</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>千字节</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>文件大小</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>保护</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>是</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>否</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>版权</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>原创</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG 插件设置</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>标签优先</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>第一:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>无效</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>第二:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>第三:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>编码</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 编码:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 编码:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts
new file mode 100644
index 000000000..f378fd6f6
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/mpeg_plugin_zh_TW.ts
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="zh_TW">
+<context>
+ <name>DecoderMPEGFactory</name>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="117"/>
+ <source>MPEG Plugin</source>
+ <translation type="unfinished">MPEG 外掛</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="120"/>
+ <source>MPEG Files</source>
+ <translation type="unfinished">MPEG 檔案</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="284"/>
+ <source>About MPEG Audio Plugin</source>
+ <translation type="unfinished">關於 MPEG 聲訊插件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="285"/>
+ <source>Qmmp MPEG Audio Plugin</source>
+ <translation type="unfinished">Qmmp MPEG 聲訊插件</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="286"/>
+ <source>Compiled against libmad version:</source>
+ <translation type="unfinished">編譯基於 libmad 的版本:</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="290"/>
+ <source>Written by: Ilya Kotov &lt;forkotov02@ya.ru&gt;</source>
+ <translation type="unfinished">作者:Ilya Kotov &lt;forkotov02@ya.ru&gt;</translation>
+ </message>
+ <message>
+ <location filename="../decodermpegfactory.cpp" line="291"/>
+ <source>Source code based on mq3 and madplay projects</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>MPEGMetaDataModel</name>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="70"/>
+ <source>Format</source>
+ <translation>格式</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>Bitrate</source>
+ <translation>比特率</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="72"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Sample rate</source>
+ <translation>取樣率</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="74"/>
+ <source>Hz</source>
+ <translation>Hz</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="78"/>
+ <location filename="../mpegmetadatamodel.cpp" line="81"/>
+ <location filename="../mpegmetadatamodel.cpp" line="84"/>
+ <location filename="../mpegmetadatamodel.cpp" line="87"/>
+ <source>Mode</source>
+ <translation>風格</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="90"/>
+ <source>KB</source>
+ <translation>KB</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="91"/>
+ <source>File size</source>
+ <translation>文件大小</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <source>Protection</source>
+ <translation>保護</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="93"/>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <source>Yes</source>
+ <translation>是</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="95"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>No</source>
+ <translation>否</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="97"/>
+ <location filename="../mpegmetadatamodel.cpp" line="99"/>
+ <source>Copyright</source>
+ <translation>版權</translation>
+ </message>
+ <message>
+ <location filename="../mpegmetadatamodel.cpp" line="101"/>
+ <location filename="../mpegmetadatamodel.cpp" line="103"/>
+ <source>Original</source>
+ <translation>原創</translation>
+ </message>
+</context>
+<context>
+ <name>SettingsDialog</name>
+ <message>
+ <location filename="../settingsdialog.ui" line="14"/>
+ <source>MPEG Plugin Settings</source>
+ <translation>MPEG 插件設定</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="29"/>
+ <source>Decoder</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="35"/>
+ <source>MAD</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="42"/>
+ <source>MPG123</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="52"/>
+ <source>Tag Priority</source>
+ <translation>標簽優先</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="64"/>
+ <source>First:</source>
+ <translation>第一:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="84"/>
+ <location filename="../settingsdialog.ui" line="133"/>
+ <location filename="../settingsdialog.ui" line="182"/>
+ <source>ID3v1</source>
+ <translation>ID3v1</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="89"/>
+ <location filename="../settingsdialog.ui" line="138"/>
+ <location filename="../settingsdialog.ui" line="187"/>
+ <source>ID3v2</source>
+ <translation>ID3v2</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="94"/>
+ <location filename="../settingsdialog.ui" line="143"/>
+ <location filename="../settingsdialog.ui" line="192"/>
+ <source>APE</source>
+ <translation>APE</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="99"/>
+ <location filename="../settingsdialog.ui" line="148"/>
+ <location filename="../settingsdialog.ui" line="197"/>
+ <source>Disabled</source>
+ <translation>無效</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="113"/>
+ <source>Second:</source>
+ <translation>第二:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="162"/>
+ <source>Third:</source>
+ <translation>第三:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="221"/>
+ <source>Encodings</source>
+ <translation>編碼</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="233"/>
+ <source>ID3v1 encoding:</source>
+ <translation>ID3v1 編碼:</translation>
+ </message>
+ <message>
+ <location filename="../settingsdialog.ui" line="259"/>
+ <source>ID3v2 encoding:</source>
+ <translation>ID3v2 編碼:</translation>
+ </message>
+</context>
+</TS>
diff --git a/src/plugins/Input/mpeg/translations/translations.qrc b/src/plugins/Input/mpeg/translations/translations.qrc
new file mode 100644
index 000000000..029b94e13
--- /dev/null
+++ b/src/plugins/Input/mpeg/translations/translations.qrc
@@ -0,0 +1,32 @@
+<!DOCTYPE RCC>
+<RCC version="1.0">
+ <qresource>
+ <file>mpeg_plugin_ru.qm</file>
+ <file>mpeg_plugin_uk_UA.qm</file>
+ <file>mpeg_plugin_zh_CN.qm</file>
+ <file>mpeg_plugin_zh_TW.qm</file>
+ <file>mpeg_plugin_tr.qm</file>
+ <file>mpeg_plugin_cs.qm</file>
+ <file>mpeg_plugin_pt_BR.qm</file>
+ <file>mpeg_plugin_pt.qm</file>
+ <file>mpeg_plugin_de.qm</file>
+ <file>mpeg_plugin_pl_PL.qm</file>
+ <file>mpeg_plugin_fr.qm</file>
+ <file>mpeg_plugin_it.qm</file>
+ <file>mpeg_plugin_kk.qm</file>
+ <file>mpeg_plugin_lt.qm</file>
+ <file>mpeg_plugin_hu.qm</file>
+ <file>mpeg_plugin_nl.qm</file>
+ <file>mpeg_plugin_ja.qm</file>
+ <file>mpeg_plugin_sk.qm</file>
+ <file>mpeg_plugin_es.qm</file>
+ <file>mpeg_plugin_he.qm</file>
+ <file>mpeg_plugin_gl_ES.qm</file>
+ <file>mpeg_plugin_sr_BA.qm</file>
+ <file>mpeg_plugin_sr_RS.qm</file>
+ <file>mpeg_plugin_bg.qm</file>
+ <file>mpeg_plugin_el.qm</file>
+ <file>mpeg_plugin_id.qm</file>
+ <file>mpeg_plugin_fi.qm</file>
+ </qresource>
+</RCC>