diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-01-16 15:33:17 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2010-01-16 15:33:17 +0000 |
| commit | 435f1da1de18bafe57e43e47fd8a6fc69fd8bab7 (patch) | |
| tree | e332293971b3b3883685b79c62bcd50bf2f49c12 | |
| parent | 2fa169a585994ceb40db55405f46783d06820947 (diff) | |
| download | qmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.tar.gz qmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.tar.bz2 qmmp-435f1da1de18bafe57e43e47fd8a6fc69fd8bab7.zip | |
updated audio engine
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1503 90c681e8-e032-0410-971d-27865f9a5e38
90 files changed, 954 insertions, 870 deletions
@@ -51,7 +51,7 @@ Requirements: - libmodplug >= 0.8.4 (Optional) - libsndfile >= 1.0.17 (Optional) - wavpack >= 4.41 (Optional) -- pulseaudio >= 0.9.9 (Optional) +- pulseaudio >= 0.9.15 (Optional) - ffmpeg >= 0.4.9-pre1 (Optional) - libcdio >= 0.80 (Optional) - faad2 >= 2.6.1 (Optional) diff --git a/README.RUS b/README.RUS index 4820349fb..f39261523 100644 --- a/README.RUS +++ b/README.RUS @@ -51,7 +51,7 @@ Qmmp - Qt-based multimedia player - libmodplug >= 0.8.4 (Опционально) - libsndfile >= 1.0.17 (Опционально) - wavpack >= 4.41 (Опционально) -- pulseaudio >= 0.9.9 (Опционально) +- pulseaudio >= 0.9.15 (Опционально) - ffmpeg >= 0.4.9-pre1 (Опционально) - libcdio >= 0.80 (Опционально) - faad2 >= 2.6.1 (Опционально) diff --git a/src/plugins/Effect/bs2b/bs2bplugin.cpp b/src/plugins/Effect/bs2b/bs2bplugin.cpp index d2ced9bb9..b9f0bda94 100644 --- a/src/plugins/Effect/bs2b/bs2bplugin.cpp +++ b/src/plugins/Effect/bs2b/bs2bplugin.cpp @@ -32,6 +32,7 @@ Bs2bPlugin::Bs2bPlugin() : Effect() m_bs2b_handler = bs2b_open(); QSettings settings(Qmmp::configFile(), QSettings::IniFormat); bs2b_set_level(m_bs2b_handler, settings.value("bs2b/level", BS2B_DEFAULT_CLEVEL).toUInt()); + m_chan = 0; } Bs2bPlugin::~Bs2bPlugin() @@ -43,35 +44,33 @@ Bs2bPlugin::~Bs2bPlugin() #define CASE_BS2B(bitsPerSample, dataType, functionToCall, samples, out_data) \ case bitsPerSample: \ { \ - dataType * data = reinterpret_cast<dataType *>(*out_data); \ + dataType * data = reinterpret_cast<dataType *>(out_data); \ functionToCall(m_bs2b_handler, data, samples); \ } \ break; -ulong Bs2bPlugin::process(char *in_data, const ulong size, char **out_data) +void Bs2bPlugin::applyEffect(Buffer *b) { - memcpy(*out_data, in_data, size); - if (channels() != 2) - return size; - - uint samples = size / (bitsPerSample() / 8) / 2; + if(m_chan != 2) + return; + uint samples = b->nbytes / audioParameters().sampleSize() / 2; m_mutex.lock(); - switch (bitsPerSample()) + switch (format()) { - CASE_BS2B(8, int8_t, bs2b_cross_feed_s8, samples, out_data) - CASE_BS2B(16, int16_t, bs2b_cross_feed_s16le, samples, out_data) - CASE_BS2B(24, bs2b_int24_t, bs2b_cross_feed_s24, samples, out_data) - CASE_BS2B(32, int32_t, bs2b_cross_feed_s32le, samples, out_data) + CASE_BS2B(Qmmp::PCM_S8, int8_t, bs2b_cross_feed_s8, samples, b->data) + CASE_BS2B(Qmmp::PCM_S16LE, int16_t, bs2b_cross_feed_s16le, samples, b->data) + //CASE_BS2B(Qmmp::PCM_S24LE, bs2b_int24_t, bs2b_cross_feed_s24le, samples, out_data) + CASE_BS2B(Qmmp::PCM_S32LE, int32_t, bs2b_cross_feed_s32le, samples, b->data) default: ; // noop } m_mutex.unlock(); - return size; } -void Bs2bPlugin::configure(quint32 freq, int chan, int res) +void Bs2bPlugin::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { - Effect::configure(freq, chan, res); + m_chan = chan; + Effect::configure(freq, chan, format); bs2b_set_srate(m_bs2b_handler,freq); } diff --git a/src/plugins/Effect/bs2b/bs2bplugin.h b/src/plugins/Effect/bs2b/bs2bplugin.h index 93ad482bb..0070d0f6e 100644 --- a/src/plugins/Effect/bs2b/bs2bplugin.h +++ b/src/plugins/Effect/bs2b/bs2bplugin.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Ilya Kotov * + * Copyright (C) 2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -35,13 +35,14 @@ public: virtual ~Bs2bPlugin(); - ulong process(char *in_data, const ulong size, char **out_data); - void configure(quint32 freq, int chan, int res); + void applyEffect(Buffer *b); + void configure(quint32 freq, int chan, Qmmp::AudioFormat format); void setCrossfeedLevel(uint32_t level); static Bs2bPlugin* instance(); private: t_bs2bdp m_bs2b_handler; + int m_chan; QMutex m_mutex; static Bs2bPlugin *m_instance; }; diff --git a/src/plugins/Effect/ladspa/ladspahelper.cpp b/src/plugins/Effect/ladspa/ladspahelper.cpp index af683beca..ca34106f3 100644 --- a/src/plugins/Effect/ladspa/ladspahelper.cpp +++ b/src/plugins/Effect/ladspa/ladspahelper.cpp @@ -31,15 +31,13 @@ LADSPAHelper::LADSPAHelper() : Effect() LADSPAHelper::~LADSPAHelper() {} -ulong LADSPAHelper::process(char *in_data, const ulong size, char **out_data) +void LADSPAHelper::applyEffect(Buffer *b) { - LADSPAHost::instance()->applyEffect((qint16 *) in_data, size); - memcpy(*out_data, in_data, size); - return size; + LADSPAHost::instance()->applyEffect((qint16 *)b->data, b->nbytes); } -void LADSPAHelper::configure(quint32 freq, int chan, int res) +void LADSPAHelper::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { - LADSPAHost::instance()->configure(freq,chan,res); - Effect::configure(freq, chan, res); + LADSPAHost::instance()->configure(freq,chan,format); + Effect::configure(freq, chan, format); } diff --git a/src/plugins/Effect/ladspa/ladspahelper.h b/src/plugins/Effect/ladspa/ladspahelper.h index 53983fa17..18a44dafd 100644 --- a/src/plugins/Effect/ladspa/ladspahelper.h +++ b/src/plugins/Effect/ladspa/ladspahelper.h @@ -32,8 +32,8 @@ public: LADSPAHelper(); virtual ~LADSPAHelper(); - ulong process(char *in_data, const ulong size, char **out_data); - void configure(quint32 freq, int chan, int res); + void applyEffect(Buffer *b); + void configure(quint32 freq, int chan, Qmmp::AudioFormat format); }; #endif // LADSPAHELPER_H diff --git a/src/plugins/Effect/ladspa/ladspahost.cpp b/src/plugins/Effect/ladspa/ladspahost.cpp index d9eef5281..2e84fe205 100644 --- a/src/plugins/Effect/ladspa/ladspahost.cpp +++ b/src/plugins/Effect/ladspa/ladspahost.cpp @@ -27,6 +27,7 @@ #include <stdlib.h> #include <dlfcn.h> #include <qmmp/qmmp.h> +#include <qmmp/audioparameters.h> #include "ladspahost.h" #ifndef PATH_MAX @@ -56,10 +57,10 @@ LADSPAHost::~LADSPAHost() } } -void LADSPAHost::configure(quint32 freq, int chan, int res) +void LADSPAHost::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { m_chan = chan; - m_prec = res; + m_prec = AudioParameters::sampleSize(format); m_freq = freq; foreach(LADSPAEffect *e, m_effects) { diff --git a/src/plugins/Effect/ladspa/ladspahost.h b/src/plugins/Effect/ladspa/ladspahost.h index f97e54c08..2a35d7bbc 100644 --- a/src/plugins/Effect/ladspa/ladspahost.h +++ b/src/plugins/Effect/ladspa/ladspahost.h @@ -24,6 +24,7 @@ #include <QMutex> #include <QList> #include <QObject> +#include <qmmp/qmmp.h> #include "ladspa.h" class QWidget; @@ -83,7 +84,7 @@ public: virtual ~LADSPAHost(); int applyEffect(qint16 *d, int length); - void configure(quint32 freq, int chan, int res); + void configure(quint32 freq, int chan, Qmmp::AudioFormat format); QList <LADSPAPlugin *> plugins(); QList <LADSPAEffect *> runningPlugins(); LADSPAEffect *addPlugin(LADSPAPlugin * plugin); diff --git a/src/plugins/Effect/srconverter/srconverter.cpp b/src/plugins/Effect/srconverter/srconverter.cpp index 8a31bb18f..95c912cb6 100644 --- a/src/plugins/Effect/srconverter/srconverter.cpp +++ b/src/plugins/Effect/srconverter/srconverter.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Ilya Kotov * + * Copyright (C) 2007-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -50,32 +50,32 @@ SRConverter::~SRConverter() m_src_data.output_frames = 0; if (m_isSrcAlloc) { - free(m_srcIn); - free(m_srcOut); - free(m_wOut); + delete [] m_srcIn; + delete [] m_srcOut; + delete [] m_wOut; m_isSrcAlloc = FALSE; } } -ulong SRConverter::process(char *in_data, const ulong size, char **out_data) +void SRConverter::applyEffect(Buffer *b) { if (m_isSrcAlloc) { - free(m_srcIn); - free(m_srcOut); - free(m_wOut); + delete [] m_srcIn; + delete [] m_srcOut; + delete [] m_wOut; m_isSrcAlloc = FALSE; } ulong wbytes = 0; - if (m_src_state && size > 0) + if (m_src_state && b->nbytes > 0) { - int lrLength = size/2; + int lrLength = b->nbytes/2; int overLrLength= (int)floor(lrLength*(m_src_data.src_ratio+1)); - m_srcIn = (float*) malloc(sizeof(float)*lrLength); - m_srcOut = (float*) malloc(sizeof(float)*overLrLength); - m_wOut = (short int*) malloc(sizeof(short int)*overLrLength); - src_short_to_float_array((short int*)in_data, m_srcIn, lrLength); + m_srcIn = new float [lrLength]; + m_srcOut = new float [overLrLength]; + m_wOut = new short[overLrLength]; + src_short_to_float_array((short *)b->data, m_srcIn, lrLength); m_isSrcAlloc = TRUE; m_src_data.data_in = m_srcIn; m_src_data.data_out = m_srcOut; @@ -90,14 +90,15 @@ ulong SRConverter::process(char *in_data, const ulong size, char **out_data) { src_float_to_short_array(m_srcOut, m_wOut, m_src_data.output_frames_gen*2); wbytes = m_src_data.output_frames_gen*4; - *out_data = new char[wbytes]; - memcpy(*out_data, (char*) m_wOut, wbytes); + delete [] b->data; + b->data = (unsigned char *) m_wOut; + b->nbytes = wbytes; + m_wOut = 0; } } - return wbytes; } -void SRConverter::configure(quint32 freq, int chan, int res) +void SRConverter::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { freeSRC(); uint rate = freq; @@ -111,7 +112,7 @@ void SRConverter::configure(quint32 freq, int chan, int res) else qDebug("SRConverter: src_new(): %s", src_strerror(m_srcError)); } - Effect::configure(m_overSamplingFs, chan, res); + Effect::configure(m_overSamplingFs, chan, format); } void SRConverter::freeSRC() diff --git a/src/plugins/Effect/srconverter/srconverter.h b/src/plugins/Effect/srconverter/srconverter.h index bb4c2913c..5bc4b4ad1 100644 --- a/src/plugins/Effect/srconverter/srconverter.h +++ b/src/plugins/Effect/srconverter/srconverter.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Ilya Kotov * + * Copyright (C) 2007-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -33,8 +33,8 @@ public: SRConverter(); virtual ~SRConverter(); - ulong process(char *in_data, const ulong size, char **out_data); - void configure(quint32 freq, int chan, int res); + void applyEffect(Buffer *b); + void configure(quint32 freq, int chan, Qmmp::AudioFormat format); private: void freeSRC(); diff --git a/src/plugins/Input/aac/decoder_aac.cpp b/src/plugins/Input/aac/decoder_aac.cpp index fef00a206..6b65685f1 100644 --- a/src/plugins/Input/aac/decoder_aac.cpp +++ b/src/plugins/Input/aac/decoder_aac.cpp @@ -142,7 +142,7 @@ bool DecoderAAC::initialize() memmove(m_input_buf, m_input_buf + res, m_input_at - res); m_input_at -= res; - configure(freq, chan, 16); + configure(freq, chan, Qmmp::PCM_S16LE); qDebug("DecoderAAC: initialize succes"); return TRUE; } diff --git a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp index 6fa6e2e02..201d6ff63 100644 --- a/src/plugins/Input/cdaudio/decoder_cdaudio.cpp +++ b/src/plugins/Input/cdaudio/decoder_cdaudio.cpp @@ -251,7 +251,7 @@ bool DecoderCDAudio::initialize() } qDebug("DecoderCDAudio: using cd audio capable drive \"%s\"", QUrl(m_url).path().toAscii().constData()); } - configure(44100, 2, 16); + configure(44100, 2, Qmmp::PCM_S16LE); m_bitrate = 1411; m_totalTime = tracks[track_at].info.length() * 1000; m_first_sector = tracks[track_at].first_sector; diff --git a/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp b/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp index 2e1b3d00f..ae88ea6e6 100644 --- a/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp +++ b/src/plugins/Input/cdaudio/decodercdaudiofactory.cpp @@ -58,11 +58,14 @@ Decoder *DecoderCDAudioFactory::create(const QString &url, QIODevice *input) QList<FileInfo *> DecoderCDAudioFactory::createPlayList(const QString &fileName, bool useMetaData) { + qDebug("create!!"); Q_UNUSED(useMetaData); QList <FileInfo*> list; QList <CDATrack> tracks = DecoderCDAudio::generateTrackList(QUrl(fileName).path()); foreach(CDATrack t, tracks) - list << new FileInfo(t.info); + { + list << new FileInfo(t.info); + } return list; } diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_cs.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_cs.ts index 7c6ea1d30..26681d3a9 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_cs.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_cs.ts @@ -9,27 +9,27 @@ <translation>Modul pro zvuková CD</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>O modulu pro zvuková CD</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Modul Qmmp pro zvuková CD</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Autor: Ilja Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Použití: otevřete cdda:/// v dialogu Přidat URL nebo z příkazové řádky</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Přeloženo s libcdio verze:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_de.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_de.ts index 3fed87e02..9ed0049af 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_de.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_de.ts @@ -9,27 +9,27 @@ <translation>CD-Audio-Modul</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>Über CD-Audio-Modul</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Qmmp CD-Audio-Modul</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Autor: Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Verwendung: Geben Sie cdda:/// in den „URL hinzufügen“-Dialog oder in die Befehlszeile ein</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Kompiliert gegen libcdio-Version:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_it.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_it.ts index dede31eb3..95e211c92 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_it.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_it.ts @@ -9,27 +9,27 @@ <translation>Modulo CD-Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>Informazioni sul modulo CD-Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Modulo CD-Audio per Qmmp</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Autore: Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Uso: aprire cdda:// nella finestra di dialgo degli URL, o via linea di comando</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Compilato con libcdio, versione:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_lt.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_lt.ts index 270d9d579..47655c182 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_lt.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_lt.ts @@ -9,27 +9,27 @@ <translation>CD Audio Įskiepis</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>Apie CD Audio įskiepį</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Apie CD Audio Qmmp įskiepį</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Sukūrė: Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Naudojimas: atverti cdda:/// naudojant Prideti interneto adresą arba komandinė eilutę</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Surinkta iš libcdio versijos :</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_pl.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_pl.ts index 61049c20b..7cd11622d 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_pl.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_pl.ts @@ -9,27 +9,27 @@ <translation>Wtyczka CD Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>O wtyczce CD Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Wtyczka CD Audio dla Qmmp</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Skompilowane przy użyciu biblioteki libcdio w wersji:</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Autor: Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Instrukcja: otwórz cdda:/// używając Dodaj URL lib z linii poleceń</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_ru.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_ru.ts index 488bba2d1..d100fdb97 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_ru.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_ru.ts @@ -9,27 +9,27 @@ <translation>Модуль CD Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>О Модуле CD Audio</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Модуль CD Audio для Qmmp</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Разработчик: Илья Котов <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Использование: откройте cdda:/// с помощью диалога добавления URL или командной строки</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Собрано с libcdio версии:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_tr.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_tr.ts index 7a04a718d..a9803ab79 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_tr.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_tr.ts @@ -9,27 +9,27 @@ <translation>CD Ses Eklentisi</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>CD Ses Eklentisi Hakkında</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Qmmp CD Ses Eklentisi</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Derlendiği libcdio sürümü:</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Yazan: Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Kullanımı: komut satırından veya URL Ekle diyaloğundan open cdda:/// şeklindedir</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_uk_UA.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_uk_UA.ts index b0506d4dc..847b09aca 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_uk_UA.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_uk_UA.ts @@ -9,27 +9,27 @@ <translation>Модуль AudioCD</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>Про модуль AudioCD</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Модуль AudioCD для Qmmp</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>Розробник: Ілля Котов <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>Використання: відкрийте cdda:/// використовуючи діалог "Додати адресу" чи командний рядок</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>Зібрано з libcdio версії:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_CN.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_CN.ts index 806ecb21e..b4e9a5aad 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_CN.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_CN.ts @@ -9,27 +9,27 @@ <translation>CD 音频插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>关于 CD 音频插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Qmmp CD 音频插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>作者:Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>用法:open cdda:/// 使用添加 URL 对话或命令行</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>编译依赖 libcdio 版本:</translation> </message> diff --git a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_TW.ts b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_TW.ts index 0b4f60b65..c6e7c7af8 100644 --- a/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_TW.ts +++ b/src/plugins/Input/cdaudio/translations/cdaudio_plugin_zh_TW.ts @@ -9,27 +9,27 @@ <translation>CD 聲訊插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="84"/> + <location filename="../decodercdaudiofactory.cpp" line="87"/> <source>About CD Audio Plugin</source> <translation>關於 CD 聲訊插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="85"/> + <location filename="../decodercdaudiofactory.cpp" line="88"/> <source>Qmmp CD Audio Plugin</source> <translation>Qmmp CD 聲訊插件</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="87"/> + <location filename="../decodercdaudiofactory.cpp" line="90"/> <source>Writen by: Ilya Kotov <forkotov02@hotmail.ru></source> <translation>作者:Ilya Kotov <forkotov02@hotmail.ru></translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="88"/> + <location filename="../decodercdaudiofactory.cpp" line="91"/> <source>Usage: open cdda:/// using Add URL dialog or command line</source> <translation>用法:open cdda:/// 使用添加 URL會話或命令行</translation> </message> <message> - <location filename="../decodercdaudiofactory.cpp" line="86"/> + <location filename="../decodercdaudiofactory.cpp" line="89"/> <source>Compiled against libcdio version:</source> <translation>編譯依賴 libcdio 版本:</translation> </message> diff --git a/src/plugins/Input/cue/decoder_cue.cpp b/src/plugins/Input/cue/decoder_cue.cpp index f5cb53929..238134873 100644 --- a/src/plugins/Input/cue/decoder_cue.cpp +++ b/src/plugins/Input/cue/decoder_cue.cpp @@ -105,14 +105,14 @@ bool DecoderCUE::initialize() configure(m_decoder->audioParameters().sampleRate(), m_decoder->audioParameters().channels(), - m_decoder->audioParameters().bits()); + m_decoder->audioParameters().format()); setReplayGainInfo(m_decoder->replayGainInfo()); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().format() * m_length/8000; m_totalBytes = 0; - m_sz = audioParameters().bits() * audioParameters().channels()/8; + m_sz = audioParameters().sampleSize(); StateHandler::instance()->dispatch(m_parser->info(m_track)->metaData()); return TRUE; @@ -128,7 +128,7 @@ void DecoderCUE::seek(qint64 pos) m_decoder->seek(m_offset + pos); m_totalBytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * pos/8000; + audioParameters().sampleSize() * pos/1000; } qint64 DecoderCUE::read(char *data, qint64 size) @@ -197,7 +197,7 @@ void DecoderCUE::next() m_offset = m_parser->offset(m_track); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().sampleSize() * m_length/1000; StateHandler::instance()->dispatch(m_parser->info(m_track)->metaData()); m_totalBytes = 0; } diff --git a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp index 4ec673839..28b7134d9 100644 --- a/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp +++ b/src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp @@ -169,8 +169,8 @@ bool DecoderFFmpeg::initialize() return FALSE; } m_totalTime = input()->isSequential() ? 0 : ic->duration * 1000 / AV_TIME_BASE; - m_output_buf = new uint8_t[AVCODEC_MAX_AUDIO_FRAME_SIZE*sizeof(int16_t) + Qmmp::globalBufferSize()]; - configure(c->sample_rate, c->channels, 16); + m_output_buf = new uint8_t[AVCODEC_MAX_AUDIO_FRAME_SIZE*sizeof(int16_t) + QMMP_BUFFER_SIZE]; + configure(c->sample_rate, c->channels, Qmmp::PCM_S16LE); m_bitrate = c->bit_rate; qDebug("DecoderFFmpeg: initialize succes"); return TRUE; diff --git a/src/plugins/Input/flac/decoder_flac.cpp b/src/plugins/Input/flac/decoder_flac.cpp index 51ee170f7..50f679956 100644 --- a/src/plugins/Input/flac/decoder_flac.cpp +++ b/src/plugins/Input/flac/decoder_flac.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2009 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -28,17 +28,15 @@ #include <taglib/flacfile.h> #include <taglib/xiphcomment.h> #include <taglib/tmap.h> - #include <qmmp/buffer.h> #include <qmmp/output.h> #include <qmmp/recycler.h> #include <qmmp/statehandler.h> - #include <QObject> #include <QFile> #include <QIODevice> #include <FLAC/all.h> - +#include "replaygainreader.h" #include "cueparser.h" #include "decoder_flac.h" @@ -56,11 +54,10 @@ static size_t pack_pcm_signed (FLAC__byte *data, unsigned bytes_per_sample; unsigned incr; - if (bps == 24) - bps = 32; /* we encode to 32-bit words */ + if(bps == 24) // we encode to 32-bit words + bps = 32; bytes_per_sample = bps / 8; incr = bytes_per_sample * channels; - for (channel = 0; channel < channels; channel++) { samples = wide_samples; @@ -77,21 +74,18 @@ static size_t pack_pcm_signed (FLAC__byte *data, data[0] = sample; break; case 16: - data[1] = (FLAC__byte)(sample >> 8); - data[0] = (FLAC__byte)sample; + data[1] = (FLAC__byte)(sample >> 8) & 0xff; + data[0] = (FLAC__byte)sample & 0xff; break; case 32: - data[3] = (FLAC__byte)(sample >> 16); - data[2] = (FLAC__byte)(sample >> 8); - data[1] = (FLAC__byte)sample; + data[3] = (FLAC__byte)(sample >> 16) & 0xff; + data[2] = (FLAC__byte)(sample >> 8) & 0xff; + data[1] = (FLAC__byte)sample & 0xff; data[0] = 0; - break; } - data += incr; } } - return wide_samples * channels * bytes_per_sample; } @@ -324,6 +318,8 @@ bool DecoderFLAC::initialize() data()->input->open(QIODevice::ReadOnly); QMap<Qmmp::MetaData, QString> metaData = m_parser->info(m_track)->metaData(); StateHandler::instance()->dispatch(metaData); //send metadata + ReplayGainReader rg(p); + setReplayGainInfo(rg.replayGainInfo()); } else { @@ -376,10 +372,26 @@ bool DecoderFLAC::initialize() data()->ok = 0; return FALSE; } - if (data()->bits_per_sample == 24) - configure(data()->sample_rate, data()->channels, 32); - else - configure(data()->sample_rate, data()->channels, data()->bits_per_sample); + switch(data()->bits_per_sample) + { + case 8: + configure(data()->sample_rate, data()->channels, Qmmp::PCM_S8); + break; + case 16: + configure(data()->sample_rate, data()->channels, Qmmp::PCM_S16LE); + break; + case 24: + case 32: + configure(data()->sample_rate, data()->channels, Qmmp::PCM_S32LE); + break; + default: + return FALSE; + } + if(!m_path.contains("://")) + { + ReplayGainReader rg(m_path); + setReplayGainInfo(rg.replayGainInfo()); + } if(m_parser) { @@ -387,11 +399,11 @@ bool DecoderFLAC::initialize() m_offset = m_parser->offset(m_track); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().sampleSize() * m_length/1000; seek(0); } m_totalBytes = 0; - m_sz = audioParameters().bits() * audioParameters().channels()/8; + m_sz = audioParameters().sampleSize() * audioParameters().channels(); qDebug("DecoderFLAC: initialize succes"); return TRUE; @@ -413,7 +425,7 @@ void DecoderFLAC::seek(qint64 time) { m_totalBytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * time/8000; + audioParameters().sampleSize() * time/1000; if(m_parser) time += m_offset; FLAC__uint64 target_sample = FLAC__uint64(time * data()->total_samples /data()->length); @@ -502,7 +514,7 @@ void DecoderFLAC::next() m_length = m_parser->length(m_track); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().sampleSize() * m_length/1000; StateHandler::instance()->dispatch(m_parser->info(m_track)->metaData()); m_totalBytes = 0; } diff --git a/src/plugins/Input/mad/decoder_mad.cpp b/src/plugins/Input/mad/decoder_mad.cpp index 1e4fea68f..7ae79a580 100644 --- a/src/plugins/Input/mad/decoder_mad.cpp +++ b/src/plugins/Input/mad/decoder_mad.cpp @@ -96,7 +96,7 @@ bool DecoderMAD::initialize() mad_frame_mute (&frame); stream.next_frame = 0; stream.sync = 0; - configure(m_freq, m_channels, 16); + configure(m_freq, m_channels, Qmmp::PCM_S16LE); m_inited = TRUE; return TRUE; } diff --git a/src/plugins/Input/mad/settingsdialog.h b/src/plugins/Input/mad/settingsdialog.h index 2ad1ed188..dd1279728 100644 --- a/src/plugins/Input/mad/settingsdialog.h +++ b/src/plugins/Input/mad/settingsdialog.h @@ -1,6 +1,6 @@ /*************************************************************************** - * Copyright (C) 2006 by Ilya Kotov * - * forkotov02@hotmail.ru * + * Copyright (C) 2009 by Ilya Kotov * + * forkotov02@hotmail.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 * diff --git a/src/plugins/Input/modplug/decoder_modplug.cpp b/src/plugins/Input/modplug/decoder_modplug.cpp index b2f6866e5..6a9acb581 100644 --- a/src/plugins/Input/modplug/decoder_modplug.cpp +++ b/src/plugins/Input/modplug/decoder_modplug.cpp @@ -95,7 +95,7 @@ bool DecoderModPlug::initialize() m_soundFile->Create((uchar*) m_input_buf.data(), m_input_buf.size()); m_bitrate = m_soundFile->GetNumChannels(); m_totalTime = (qint64) m_soundFile->GetSongTime() * 1000; - configure(m_freq, m_chan, m_bps); + configure(m_freq, m_chan, (m_bps == 8 ? Qmmp::PCM_S8 : Qmmp::PCM_S16LE)); return TRUE; } @@ -111,7 +111,7 @@ int DecoderModPlug::bitrate() qint64 DecoderModPlug::read(char *audio, qint64 maxSize) { - long len = m_soundFile->Read (audio, qMin((qint64)Buffer::size(), maxSize)) * m_sampleSize; + long len = m_soundFile->Read (audio, qMin((qint64)QMMP_BLOCK_SIZE, maxSize)) * m_sampleSize; if (m_usePreamp) { { diff --git a/src/plugins/Input/mpc/decoder_mpc.cpp b/src/plugins/Input/mpc/decoder_mpc.cpp index b093b6910..82ba36694 100644 --- a/src/plugins/Input/mpc/decoder_mpc.cpp +++ b/src/plugins/Input/mpc/decoder_mpc.cpp @@ -190,7 +190,7 @@ bool DecoderMPC::initialize() #endif int chan = data()->info.channels; - configure(data()->info.sample_freq, chan, 16); + configure(data()->info.sample_freq, chan, Qmmp::PCM_S16LE); QMap<Qmmp::ReplayGainKey, double> rg_info; //replay gain information #ifdef MPC_OLD_API mpc_decoder_setup (&data()->decoder, &data()->reader); diff --git a/src/plugins/Input/sndfile/decoder_sndfile.cpp b/src/plugins/Input/sndfile/decoder_sndfile.cpp index 45ea15cbe..73a54ef0b 100644 --- a/src/plugins/Input/sndfile/decoder_sndfile.cpp +++ b/src/plugins/Input/sndfile/decoder_sndfile.cpp @@ -65,7 +65,7 @@ bool DecoderSndFile::initialize() m_totalTime = snd_info.frames * 1000 / m_freq; m_bitrate = QFileInfo(m_path).size () * 8.0 / m_totalTime + 0.5; - configure(m_freq, chan, 16); + configure(m_freq, chan, Qmmp::PCM_S16LE); qDebug("DecoderSndFile: detected format: %08X", snd_info.format); qDebug("DecoderSndFile: initialize succes"); return TRUE; diff --git a/src/plugins/Input/vorbis/decoder_vorbis.cpp b/src/plugins/Input/vorbis/decoder_vorbis.cpp index 7b8c1e480..c1d563963 100644 --- a/src/plugins/Input/vorbis/decoder_vorbis.cpp +++ b/src/plugins/Input/vorbis/decoder_vorbis.cpp @@ -134,7 +134,7 @@ bool DecoderVorbis::initialize() freq = ogginfo->rate; chan = ogginfo->channels; } - configure(freq, chan, 16); + configure(freq, chan, Qmmp::PCM_S16LE); inited = TRUE; return TRUE; } diff --git a/src/plugins/Input/wavpack/decoder_wavpack.cpp b/src/plugins/Input/wavpack/decoder_wavpack.cpp index 9c99c7992..d9ea2b62d 100644 --- a/src/plugins/Input/wavpack/decoder_wavpack.cpp +++ b/src/plugins/Input/wavpack/decoder_wavpack.cpp @@ -106,8 +106,21 @@ bool DecoderWavPack::initialize() m_freq = WavpackGetSampleRate (m_context); int bps = WavpackGetBitsPerSample (m_context); if (!m_output_buf) - m_output_buf = new int32_t[Qmmp::globalBufferSize()/4]; - configure(m_freq, m_chan, bps); + m_output_buf = new int32_t[QMMP_BUFFER_SIZE/4]; + switch(bps) + { + case 8: + configure(m_freq, m_chan, Qmmp::PCM_S8); + break; + case 16: + configure(m_freq, m_chan, Qmmp::PCM_S16LE); + break; + case 24: + configure(m_freq, m_chan, Qmmp::PCM_S24LE); + break; + case 32: + configure(m_freq, m_chan, Qmmp::PCM_S32LE); + } if(!m_parser) m_totalTime = (qint64) WavpackGetNumSamples(m_context) * 1000 / m_freq; else @@ -116,11 +129,11 @@ bool DecoderWavPack::initialize() m_offset = m_parser->offset(m_track); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().sampleSize() * m_length/1000; seek(0); } m_totalBytes = 0; - m_sz = audioParameters().bits() * audioParameters().channels()/8; + m_sz = audioParameters().sampleSize() * audioParameters().channels(); qDebug("DecoderWavPack: initialize succes"); return TRUE; } @@ -158,7 +171,7 @@ void DecoderWavPack::seek(qint64 time) { m_totalBytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * time/8000; + audioParameters().sampleSize() * time/1000; if(m_parser) time += m_offset; WavpackSeekSample (m_context, time * m_freq / 1000); @@ -229,7 +242,7 @@ void DecoderWavPack::next() m_length = m_parser->length(m_track); length_in_bytes = audioParameters().sampleRate() * audioParameters().channels() * - audioParameters().bits() * m_length/8000; + audioParameters().sampleSize() * m_length/1000; StateHandler::instance()->dispatch(m_parser->info(m_track)->metaData()); m_totalBytes = 0; } diff --git a/src/plugins/Output/alsa/outputalsa.cpp b/src/plugins/Output/alsa/outputalsa.cpp index 829641638..16cc7d0a8 100644 --- a/src/plugins/Output/alsa/outputalsa.cpp +++ b/src/plugins/Output/alsa/outputalsa.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -57,7 +57,7 @@ OutputALSA::~OutputALSA() free (pcm_name); } -void OutputALSA::configure(quint32 freq, int chan, int prec) +void OutputALSA::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { // we need to configure @@ -99,32 +99,32 @@ void OutputALSA::configure(quint32 freq, int chan, int prec) return; } } - snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN; - switch (prec) + snd_pcm_format_t alsa_format = SND_PCM_FORMAT_UNKNOWN; + switch (format) { - case 8: - format = SND_PCM_FORMAT_S8; + case Qmmp::PCM_S8: + alsa_format = SND_PCM_FORMAT_S8; break; - case 16: - format = SND_PCM_FORMAT_S16_LE; + case Qmmp::PCM_S16LE: + alsa_format = SND_PCM_FORMAT_S16_LE; break; - case 24: - format = SND_PCM_FORMAT_S24_LE; + case Qmmp::PCM_S24LE: + alsa_format = SND_PCM_FORMAT_S24_LE; break; - case 32: - format = SND_PCM_FORMAT_S32_LE; + case Qmmp::PCM_S32LE: + alsa_format = SND_PCM_FORMAT_S32_LE; break; default: qWarning("OutputALSA: unsupported format detected"); return; } - if ((err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, format)) < 0) + if ((err = snd_pcm_hw_params_set_format(pcm_handle, hwparams, alsa_format)) < 0) { qDebug("OutputALSA: Error setting format: %s", snd_strerror(err)); return; } exact_rate = rate;// = 11000; - qDebug("OutputALSA: frequency=%d, channels=%d, bits=%d", rate, chan,prec); + //qDebug("OutputALSA: frequency=%d, channels=%d, bits=%d", rate, chan,prec); if ((err = snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, &exact_rate, 0)) < 0) { @@ -181,13 +181,13 @@ void OutputALSA::configure(quint32 freq, int chan, int prec) return; } //setup needed values - m_bits_per_frame = snd_pcm_format_physical_width(format) * chan; + m_bits_per_frame = snd_pcm_format_physical_width(alsa_format) * chan; m_chunk_size = period_size; m_can_pause = snd_pcm_hw_params_can_pause(hwparams) && use_pause; qDebug("OutputALSA: can pause: %d", m_can_pause); - Output::configure(freq, chan, prec); //apply configuration + Output::configure(freq, chan, format); //apply configuration //create alsa prebuffer; - m_prebuf_size = Buffer::size() + m_bits_per_frame * m_chunk_size / 8; + m_prebuf_size = QMMP_BLOCK_SIZE + m_bits_per_frame * m_chunk_size / 8; m_prebuf = (uchar *)malloc(m_prebuf_size); } @@ -225,7 +225,7 @@ bool OutputALSA::initialize() qint64 OutputALSA::latency() { - return m_prebuf_fill * 8000 / sampleRate() / numChannels() / sampleSize(); + return m_prebuf_fill * 1000 / sampleRate() / numChannels() / sampleSize(); } void OutputALSA::pause() diff --git a/src/plugins/Output/alsa/outputalsa.h b/src/plugins/Output/alsa/outputalsa.h index b3dc92a68..b0afcebce 100644 --- a/src/plugins/Output/alsa/outputalsa.h +++ b/src/plugins/Output/alsa/outputalsa.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -42,7 +42,7 @@ public: ~OutputALSA(); bool initialize(); - void configure(quint32, int, int); + void configure(quint32, int, Qmmp::AudioFormat format); qint64 latency(); void pause(); @@ -94,5 +94,4 @@ private: bool m_use_mmap; }; - #endif // OUTPUTALSA_H diff --git a/src/plugins/Output/alsa/settingsdialog.ui b/src/plugins/Output/alsa/settingsdialog.ui index c39d3937d..b578a1d52 100644 --- a/src/plugins/Output/alsa/settingsdialog.ui +++ b/src/plugins/Output/alsa/settingsdialog.ui @@ -14,6 +14,15 @@ <string>ALSA Plugin Settings</string> </property> <layout class="QGridLayout" name="gridLayout"> + <property name="leftMargin"> + <number>6</number> + </property> + <property name="rightMargin"> + <number>6</number> + </property> + <property name="bottomMargin"> + <number>6</number> + </property> <item row="0" column="0" colspan="2"> <widget class="QTabWidget" name="tabWidget"> <property name="currentIndex"> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts b/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts index a00c1a805..5b9f18c0a 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_cs.ts @@ -32,57 +32,57 @@ <translation>Nastavení pluginu ALSA</translation> </message> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Nastavení zařízení</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Zvukové zařízení</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Mixér</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Zvuková karta:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Ovládání hlasitosti:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Pokročilá nastavení</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Zvuková karta</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Velikost bufferu (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Délka periody (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Použít mmap</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation type="unfinished"></translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_de.ts b/src/plugins/Output/alsa/translations/alsa_plugin_de.ts index 7890c64ca..5e1cbee8c 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_de.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_de.ts @@ -32,57 +32,57 @@ <translation>Einstellungen ALSA-Modul</translation> </message> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Geräte-Einstellungen</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Audiogerät</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Mixer</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Mixerkarte:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Mixergerät:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Erweiterte Einstellungen</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Soundkarte</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Pufferzeit (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Zeitraster (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Mmap-Unterstützung aktivieren</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>„snd_pcm_pause“-Funktion verwenden</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_it.ts b/src/plugins/Output/alsa/translations/alsa_plugin_it.ts index af23e7a7c..80c581637 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_it.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_it.ts @@ -32,57 +32,57 @@ <translation>Impostazioni modulo ALSA</translation> </message> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Impostazione del device</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Dispositivo audio</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Mixer</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Scheda Mixer:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Dispositivo Mixer:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Impostazoni avanzate</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Scheda audio</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Tempo di buffering (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Periodo (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Usa accesso Mmap</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>Usa la funzione snd_pcm_pause</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_lt.ts b/src/plugins/Output/alsa/translations/alsa_plugin_lt.ts index 7c97d1c14..7bc83016a 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_lt.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_lt.ts @@ -27,52 +27,52 @@ <context> <name>SettingsDialog</name> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Įrangos nustatymai</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Garso įranga</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Glotintuvas</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Glotintuvo plokštė :</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Glotintuvo įranga:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Papildomi nustatymai</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Garso plokštė</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Buferio laikas (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Periodo laikas (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>Naudoti snd_pcm_pause funciją</translation> </message> @@ -82,7 +82,7 @@ <translation>ALSA įskiepio nustatymai</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Naudoti mmap prieigą</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_pl.ts b/src/plugins/Output/alsa/translations/alsa_plugin_pl.ts index 1b9abdb69..cbf5e07b5 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_pl.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_pl.ts @@ -32,57 +32,57 @@ <translation>Ustawienia wtyczki ALSA</translation> </message> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Ustawienia urządzenia</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Urządzenie dźwiękowe</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Mikser</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Karta miksująca:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Urządzenie miksujące:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Zaawansowane ustawienia</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Karta dźwiękowa</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Wielkość buforu (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Czas cyklu (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Użyj dostępu mmap</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>Użyj funkcji snd_pcm_pause</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts b/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts index 244715907..7b4557086 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_ru.ts @@ -27,52 +27,52 @@ <context> <name>SettingsDialog</name> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Параметры устройства</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Аудио устройство</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Микшер</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Карта микшера:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Устройство микшера:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Дополнительные настройки</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Звуковая карта</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Время буферизации (мс):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Время периода (мс):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>Использовать функцию snd_pcm_pause</translation> </message> @@ -82,7 +82,7 @@ <translation>Настройки модуля ALSA</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Использовать доступ mmap</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_tr.ts b/src/plugins/Output/alsa/translations/alsa_plugin_tr.ts index 898446c40..7ee692993 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_tr.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_tr.ts @@ -32,57 +32,57 @@ <translation>ALSA Eklentisi Ayarları</translation> </message> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Aygıt Ayarları</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Ses aygıtı</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Karıştırıcı</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Karıştırıcı kartı:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Karıştırıcı aygıtı:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Gelişmiş Ayarlar</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Ses kartı</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Arabellek süresi (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Periyot süresi (ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>mmap erişimi kullan</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation type="unfinished"></translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts b/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts index 9b415534e..716f7fa4d 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_uk_UA.ts @@ -27,52 +27,52 @@ <context> <name>SettingsDialog</name> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>Параметри пристроїв</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>Аудіо пристрій</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>Мікшер</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>Карта мікшера:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>Пристрій мікшера:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>Додаткові налаштування</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>Звукова карта</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>Час буферизації (мс):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>Час періоду (мс):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation>Використовувати функцію snd_pcm_pause</translation> </message> @@ -82,7 +82,7 @@ <translation>Налаштування модуля ALSA</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>Використовувати доступ mmap</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts b/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts index 196cb3e87..c5368dbfa 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_zh_CN.ts @@ -27,52 +27,52 @@ <context> <name>SettingsDialog</name> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>设备设置</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>音频设备</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>混频</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>混频卡:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>混频设备:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>高级设置</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>声卡</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>缓冲时间(ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>周期时间(ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation type="unfinished"></translation> </message> @@ -82,7 +82,7 @@ <translation>ALSA 插件设置</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>使用内存映射</translation> </message> diff --git a/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts b/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts index 409330b4a..b509bcc07 100644 --- a/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts +++ b/src/plugins/Output/alsa/translations/alsa_plugin_zh_TW.ts @@ -27,52 +27,52 @@ <context> <name>SettingsDialog</name> <message> - <location filename="../settingsdialog.ui" line="24"/> + <location filename="../settingsdialog.ui" line="33"/> <source>Device Settings</source> <translation>裝置設定</translation> </message> <message> - <location filename="../settingsdialog.ui" line="36"/> + <location filename="../settingsdialog.ui" line="45"/> <source>Audio device</source> <translation>聲訊裝置</translation> </message> <message> - <location filename="../settingsdialog.ui" line="48"/> + <location filename="../settingsdialog.ui" line="57"/> <source>Mixer</source> <translation>混頻</translation> </message> <message> - <location filename="../settingsdialog.ui" line="63"/> + <location filename="../settingsdialog.ui" line="72"/> <source>Mixer card:</source> <translation>混頻卡:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="73"/> + <location filename="../settingsdialog.ui" line="82"/> <source>Mixer device:</source> <translation>混頻裝置:</translation> </message> <message> - <location filename="../settingsdialog.ui" line="90"/> + <location filename="../settingsdialog.ui" line="99"/> <source>Advanced Settings</source> <translation>進階設定</translation> </message> <message> - <location filename="../settingsdialog.ui" line="102"/> + <location filename="../settingsdialog.ui" line="111"/> <source>Soundcard</source> <translation>音效卡</translation> </message> <message> - <location filename="../settingsdialog.ui" line="108"/> + <location filename="../settingsdialog.ui" line="117"/> <source>Buffer time (ms):</source> <translation>緩衝時間(ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="144"/> + <location filename="../settingsdialog.ui" line="153"/> <source>Period time (ms):</source> <translation>周期時間(ms):</translation> </message> <message> - <location filename="../settingsdialog.ui" line="200"/> + <location filename="../settingsdialog.ui" line="209"/> <source>Use snd_pcm_pause function</source> <translation type="unfinished"></translation> </message> @@ -82,7 +82,7 @@ <translation>ALSA 插件設定</translation> </message> <message> - <location filename="../settingsdialog.ui" line="180"/> + <location filename="../settingsdialog.ui" line="189"/> <source>Use mmap access</source> <translation>使用內存對映</translation> </message> diff --git a/src/plugins/Output/jack/outputjack.cpp b/src/plugins/Output/jack/outputjack.cpp index b064590f4..c60087711 100644 --- a/src/plugins/Output/jack/outputjack.cpp +++ b/src/plugins/Output/jack/outputjack.cpp @@ -23,8 +23,8 @@ #include <QtGlobal> #include <QDir> #include <QSettings> - #include "outputjack.h" +#include <qmmp/audioparameters.h> #include <qmmp/buffer.h> #include <qmmp/visual.h> @@ -42,10 +42,10 @@ OutputJACK::~OutputJACK() uninitialize(); } -void OutputJACK::configure(quint32 freq, int chan, int prec) +void OutputJACK::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { qDebug("OutputJACK: configure"); - if(JACK_Open(&jack_device, prec, (unsigned long *)&freq, chan)) + if(JACK_Open(&jack_device, AudioParameters::sampleSize(format)*8, (unsigned long *)&freq, chan)) { m_configure = FALSE; m_inited = FALSE; @@ -54,7 +54,7 @@ void OutputJACK::configure(quint32 freq, int chan, int prec) else m_configure = TRUE; m_inited = TRUE; - Output::configure(freq, chan, prec); + Output::configure(freq, chan, format); qDebug("OutputJACK: configure end"); } @@ -72,7 +72,7 @@ bool OutputJACK::initialize() { qDebug("Unable to connect to JACK server."); } - return FALSE; + return FALSE; } jack_client_close (client); m_inited = TRUE; diff --git a/src/plugins/Output/jack/outputjack.h b/src/plugins/Output/jack/outputjack.h index 8a340002d..f2d6357b6 100644 --- a/src/plugins/Output/jack/outputjack.h +++ b/src/plugins/Output/jack/outputjack.h @@ -40,7 +40,7 @@ public: ~OutputJACK(); bool initialize(); - void configure(quint32, int, int); + void configure(quint32, int, Qmmp::AudioFormat format); qint64 latency(); private: diff --git a/src/plugins/Output/oss/outputoss.cpp b/src/plugins/Output/oss/outputoss.cpp index 9402d99bd..84d3d652e 100644 --- a/src/plugins/Output/oss/outputoss.cpp +++ b/src/plugins/Output/oss/outputoss.cpp @@ -65,7 +65,7 @@ OutputOSS* OutputOSS::instance() OutputOSS::OutputOSS(QObject * parent) : Output(parent), m_inited(FALSE), - m_frequency(-1), m_channels(-1), m_precision(-1), + m_frequency(-1), m_channels(-1), do_select(TRUE), m_audio_fd(-1) { @@ -89,12 +89,11 @@ OutputOSS::~OutputOSS() } } -void OutputOSS::configure(quint32 freq, int chan, int prec) +void OutputOSS::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { // we need to configure - if (freq != m_frequency || chan != m_channels || prec != m_precision) + if (freq != m_frequency || chan != m_channels) { - qDebug("OutputOSS: frequency=%d, channels=%d, bits=%d", freq, chan, prec); // we have already configured, but are changing settings... // reset the device resetDSP(); @@ -111,15 +110,14 @@ void OutputOSS::configure(quint32 freq, int chan, int prec) #endif m_frequency = freq; m_channels = chan; - m_precision = prec; //m_bps = freq * chan * (prec / 8); int p; - switch (prec) + switch (format) { default: - case 16: + case Qmmp::PCM_S16LE: #if defined(AFMT_S16_NE) p = AFMT_S16_NE; #else @@ -127,7 +125,7 @@ void OutputOSS::configure(quint32 freq, int chan, int prec) #endif break; - case 8: + case Qmmp::PCM_S8: p = AFMT_S8; break; @@ -135,8 +133,8 @@ void OutputOSS::configure(quint32 freq, int chan, int prec) if (ioctl(m_audio_fd, SNDCTL_DSP_SETFMT, &p) == -1) qWarning("OutputOSS: can't set audio format"); - if(ioctl(m_audio_fd, SNDCTL_DSP_SAMPLESIZE, &prec) == -1) - qDebug("OutputOSS: can't set audio format"); + /*if(ioctl(m_audio_fd, SNDCTL_DSP_SAMPLESIZE, &prec) == -1) + qDebug("OutputOSS: can't set audio format");*/ int stereo = (chan > 1) ? 1 : 0; ioctl(m_audio_fd, SNDCTL_DSP_STEREO, &stereo); /*if (ioctl(m_audio_fd, SNDCTL_DSP_SPEED, &m_channels) == -1) @@ -146,7 +144,7 @@ void OutputOSS::configure(quint32 freq, int chan, int prec) if (ioctl(m_audio_fd, SNDCTL_DSP_SPEED, &freq) == -1) qWarning("OutputOSS: can't set audio format"); } - Output::configure(freq, chan, prec); + Output::configure(freq, chan, format); } void OutputOSS::reset() @@ -226,7 +224,6 @@ void OutputOSS::uninitialize() m_inited = FALSE; m_frequency = -1; m_channels = -1; - m_precision = -1; resetDSP(); if (m_audio_fd > 0) { diff --git a/src/plugins/Output/oss/outputoss.h b/src/plugins/Output/oss/outputoss.h index cd9d919aa..7fb0e4c94 100644 --- a/src/plugins/Output/oss/outputoss.h +++ b/src/plugins/Output/oss/outputoss.h @@ -36,7 +36,7 @@ public: virtual ~OutputOSS(); bool initialize(); - void configure(quint32, int, int); + void configure(quint32, int, Qmmp::AudioFormat format); qint64 latency(); int audio_fd(); static OutputOSS* instance(); @@ -62,7 +62,7 @@ private: bool m_inited; quint32 m_frequency; - int m_channels, m_precision; + int m_channels; bool do_select; int m_audio_fd; diff --git a/src/plugins/Output/pulseaudio/CMakeLists.txt b/src/plugins/Output/pulseaudio/CMakeLists.txt index c3072e4d5..c1501e08d 100644 --- a/src/plugins/Output/pulseaudio/CMakeLists.txt +++ b/src/plugins/Output/pulseaudio/CMakeLists.txt @@ -26,7 +26,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../) link_directories(${CMAKE_CURRENT_BINARY_DIR}/../../../qmmp) # pulseaudio -pkg_check_modules(PULSE libpulse-simple) +pkg_check_modules(PULSE libpulse-simple>=0.9.15) include_directories(${PULSE_INCLUDE_DIRS}) link_directories(${PULSE_LIBRARY_DIRS}) diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp index e122e0c64..1765444fd 100644 --- a/src/plugins/Output/pulseaudio/outputpulseaudio.cpp +++ b/src/plugins/Output/pulseaudio/outputpulseaudio.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -46,19 +46,24 @@ OutputPulseAudio::~OutputPulseAudio() uninitialize(); } -void OutputPulseAudio::configure(quint32 freq, int chan, int prec) +void OutputPulseAudio::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { pa_sample_spec ss; - switch (prec) + switch (format) { - case 8: + case Qmmp::PCM_S8: ss.format = PA_SAMPLE_U8; break; - case 32: + case Qmmp::PCM_S16LE: + ss.format = PA_SAMPLE_S16LE; + break; + case Qmmp::PCM_S24LE: + ss.format = PA_SAMPLE_S24_32LE; + break; + case Qmmp::PCM_S32LE: ss.format = PA_SAMPLE_S32LE; break; - case 16: default: ss.format = PA_SAMPLE_S16LE; } @@ -81,8 +86,7 @@ void OutputPulseAudio::configure(quint32 freq, int chan, int prec) qWarning("OutputPulseAudio: pa_simple_new() failed: %s", pa_strerror(error)); return; } - qDebug("OutputPulseAudio: frequency=%d, channels=%d, bits=%d", uint(freq), chan, prec); - Output::configure(freq, chan, prec); + Output::configure(freq, chan, format); } bool OutputPulseAudio::initialize() diff --git a/src/plugins/Output/pulseaudio/outputpulseaudio.h b/src/plugins/Output/pulseaudio/outputpulseaudio.h index 5cc0bd93f..1a85e557a 100644 --- a/src/plugins/Output/pulseaudio/outputpulseaudio.h +++ b/src/plugins/Output/pulseaudio/outputpulseaudio.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2006-2008 by Ilya Kotov * + * Copyright (C) 2006-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -40,7 +40,7 @@ public: ~OutputPulseAudio(); bool initialize(); - void configure(quint32, int, int); + void configure(quint32, int, Qmmp::AudioFormat format); qint64 latency(); private: diff --git a/src/plugins/Visual/analyzer/analyzer.cpp b/src/plugins/Visual/analyzer/analyzer.cpp index 215c70a8a..de17d214d 100644 --- a/src/plugins/Visual/analyzer/analyzer.cpp +++ b/src/plugins/Visual/analyzer/analyzer.cpp @@ -82,43 +82,35 @@ void Analyzer::clear() update(); } -void Analyzer::add (Buffer *b, unsigned long w, int c, int p) +void Analyzer::add (unsigned char *data, qint64 size, int chan) { if (!m_timer->isActive ()) return; - long len = b->nbytes, cnt; + long len = size, cnt; short *l = 0, *r = 0; - len /= c; - len /= (p / 8); + len /= chan; + len /= 2; if (len > 512) len = 512; cnt = len; - if (c == 2) + if (chan == 2) { l = new short[len]; r = new short[len]; - - if (p == 8) - stereo16_from_stereopcm8 (l, r, b->data, cnt); - else if (p == 16) - stereo16_from_stereopcm16 (l, r, (short *) b->data, cnt); + stereo16_from_stereopcm16 (l, r, (short *) data, cnt); } - else if (c == 1) + else if (chan == 1) { l = new short[len]; - - if (p == 8) - mono16_from_monopcm8 (l, b->data, cnt); - else if (p == 16) - mono16_from_monopcm16 (l, (short *) b->data, cnt); + mono16_from_monopcm16 (l, (short *) data, cnt); } else len = 0; if (len) - m_nodes.append (new VisualNode (l, r, len, w)); + m_nodes.append (new VisualNode (l, r, len)); } void Analyzer::timeout() diff --git a/src/plugins/Visual/analyzer/analyzer.h b/src/plugins/Visual/analyzer/analyzer.h index 9b0352dae..1c0e8974e 100644 --- a/src/plugins/Visual/analyzer/analyzer.h +++ b/src/plugins/Visual/analyzer/analyzer.h @@ -36,8 +36,8 @@ class Buffer; class VisualNode { public: - VisualNode(short *l, short *r, unsigned long n, unsigned long o) - : left(l), right(r), length(n), offset(o) + VisualNode(short *l, short *r, unsigned long n) + : left(l), right(r), length(n) { // left and right are allocated and then passed to this class // the code that allocated left and right should give up all ownership @@ -50,7 +50,7 @@ public: } short *left, *right; - long length, offset; + long length; }; class Analyzer : public Visual @@ -61,7 +61,7 @@ public: Analyzer( QWidget *parent = 0); virtual ~Analyzer(); - void add(Buffer *, unsigned long, int, int); + void add(unsigned char *data, qint64 size, int chan); void clear(); void paintEvent( QPaintEvent * ); diff --git a/src/plugins/Visual/projectm/projectmplugin.cpp b/src/plugins/Visual/projectm/projectmplugin.cpp index b29dfab1e..b7e1483a4 100644 --- a/src/plugins/Visual/projectm/projectmplugin.cpp +++ b/src/plugins/Visual/projectm/projectmplugin.cpp @@ -54,8 +54,10 @@ void ProjectMPlugin::clear() update(); } -void ProjectMPlugin::add ( Buffer *b, unsigned long, int, int) -{ //TODO 8 bit support +void ProjectMPlugin::add (unsigned char *data, qint64 size, int chan) +{ + Q_UNUSED(chan); + //TODO multichannel support if (m_projectMWidget->projectMInstance()) - m_projectMWidget->projectMInstance()->pcm()->addPCM16Data((short *)b->data, b->nbytes/4); + m_projectMWidget->projectMInstance()->pcm()->addPCM16Data((short *)data, size/4); } diff --git a/src/plugins/Visual/projectm/projectmplugin.h b/src/plugins/Visual/projectm/projectmplugin.h index db16ab110..5f201ef39 100644 --- a/src/plugins/Visual/projectm/projectmplugin.h +++ b/src/plugins/Visual/projectm/projectmplugin.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Ilya Kotov * + * Copyright (C) 2009-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -35,7 +35,7 @@ public: ProjectMPlugin(QWidget *parent = 0); virtual ~ProjectMPlugin(); - void add(Buffer *, unsigned long, int, int); + void add(unsigned char *data, qint64 size, int chan); void clear(); private: diff --git a/src/qmmp/audioparameters.cpp b/src/qmmp/audioparameters.cpp index 9e513d586..658ae688f 100644 --- a/src/qmmp/audioparameters.cpp +++ b/src/qmmp/audioparameters.cpp @@ -24,33 +24,33 @@ AudioParameters::AudioParameters() { m_srate = 0; m_chan = 0; - m_bps = 0; + m_format = Qmmp::PCM_S16LE; } AudioParameters::AudioParameters(const AudioParameters &other) { m_srate = other.sampleRate(); m_chan = other.channels(); - m_bps = other.bits(); + m_format = other.format(); } -AudioParameters::AudioParameters(quint32 srate, int chan, int bps) +AudioParameters::AudioParameters(quint32 srate, int chan, Qmmp::AudioFormat format) { m_srate = srate; m_chan = chan; - m_bps = bps; + m_format = format; } void AudioParameters::operator=(const AudioParameters &p) { m_srate = p.sampleRate(); m_chan = p.channels(); - m_bps = p.bits(); + m_format = p.format(); } bool AudioParameters::operator==(const AudioParameters &p) const { - return m_srate == p.sampleRate() && m_chan == p.channels() && m_bps == p.bits(); + return m_srate == p.sampleRate() && m_chan == p.channels() && m_format == p.format(); } bool AudioParameters::operator!=(const AudioParameters &p) const @@ -68,7 +68,29 @@ int AudioParameters::channels() const return m_chan; } -int AudioParameters::bits() const +Qmmp::AudioFormat AudioParameters::format() const { - return m_bps; + return m_format; } + +int AudioParameters::sampleSize() const +{ + return sampleSize(m_format); +} + +int AudioParameters::sampleSize(Qmmp::AudioFormat format) +{ + switch(format) + { + case Qmmp::PCM_S8: + return 1; + case Qmmp::PCM_S16LE: + case Qmmp::PCM_UNKNOWM: + return 2; + case Qmmp::PCM_S24LE: + case Qmmp::PCM_S32LE: + return 4; + } + return 2; +} + diff --git a/src/qmmp/audioparameters.h b/src/qmmp/audioparameters.h index 4710375bc..2a99305eb 100644 --- a/src/qmmp/audioparameters.h +++ b/src/qmmp/audioparameters.h @@ -22,6 +22,7 @@ #define AUDIOPARAMETERS_H #include <QtGlobal> +#include "qmmp.h" /*! * @author Ilya Kotov <forkotov02@hotmail.ru> @@ -30,7 +31,7 @@ class AudioParameters { public: AudioParameters(); - AudioParameters(quint32 srate, int chan, int bps); + AudioParameters(quint32 srate, int chan, Qmmp::AudioFormat format); AudioParameters(const AudioParameters &other); void operator=(const AudioParameters &p); @@ -39,12 +40,14 @@ public: quint32 sampleRate() const; int channels() const; - int bits() const; + Qmmp::AudioFormat format() const; + int sampleSize() const; + static int sampleSize(Qmmp::AudioFormat format); private: quint32 m_srate; int m_chan; - int m_bps; + Qmmp::AudioFormat m_format; }; #endif // AUDIOPARAMETERS_H diff --git a/src/qmmp/buffer.h b/src/qmmp/buffer.h index e0ab18a16..e8aac27a5 100644 --- a/src/qmmp/buffer.h +++ b/src/qmmp/buffer.h @@ -8,6 +8,7 @@ #define __buffer_h #define QMMP_BLOCK_SIZE 2048 +#define QMMP_BUFFER_SIZE (QMMP_BLOCK_SIZE*128) /*! @brief Audio buffer class. * @author Brad Hughes <bhughes@trolltech.com> @@ -23,31 +24,24 @@ public: data = new unsigned char[QMMP_BLOCK_SIZE]; nbytes = 0; rate = 0; - exceeding = 0; + size = QMMP_BLOCK_SIZE; } /*! * Destructor. */ ~Buffer() { - delete data; + delete[] data; data = 0; nbytes = 0; rate = 0; - exceeding = 0; + size = 0; } unsigned char *data; /*!< Audio data */ unsigned long nbytes; /*!< Audio data size */ unsigned long rate; /*!< Buffer bitrate */ - unsigned long exceeding; /*!< The number of bytes on which the size of buffer exceeds the size of the block */ - /*! - * Returns block size. - */ - static unsigned int size() - { - return QMMP_BLOCK_SIZE; - } + unsigned long size; /*!< Buffer size */ }; diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp index 369f1e769..d5046d6c0 100644 --- a/src/qmmp/decoder.cpp +++ b/src/qmmp/decoder.cpp @@ -37,9 +37,9 @@ void Decoder::setReplayGainInfo(const QMap<Qmmp::ReplayGainKey, double> &rg) m_rg = rg; } -void Decoder::configure(quint32 srate, int chan, int bps) +void Decoder::configure(quint32 srate, int chan, Qmmp::AudioFormat format) { - m_parameters = AudioParameters(srate, chan, bps); + m_parameters = AudioParameters(srate, chan, format); } void Decoder::next() diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h index 44a917ff8..764491a36 100644 --- a/src/qmmp/decoder.h +++ b/src/qmmp/decoder.h @@ -110,9 +110,9 @@ protected: * Use this function inside initialize() reimplementation to tell other plugins about audio parameters. * @param srate Sample rate. * @param chan Number of channels. - * @param bps Bits per sample. + * @param f Audio format. */ - void configure(quint32 srate, int chan, int bps); + void configure(quint32 srate = 44100, int chan = 2, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); private: static void checkFactories(); diff --git a/src/qmmp/effect.cpp b/src/qmmp/effect.cpp index eda224d84..27d6b98d1 100644 --- a/src/qmmp/effect.cpp +++ b/src/qmmp/effect.cpp @@ -30,18 +30,18 @@ Effect::Effect() { m_freq = 0; m_chan = 0; - m_res = 0; + m_format = Qmmp::PCM_UNKNOWM; m_factory = 0; } Effect::~Effect() {} -void Effect::configure(quint32 freq, int chan, int res) +void Effect::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { m_freq = freq; m_chan = chan; - m_res = res; + m_format = format; } quint32 Effect::sampleRate() @@ -54,14 +54,14 @@ int Effect::channels() return m_chan; } -int Effect::bitsPerSample() +Qmmp::AudioFormat Effect::format() { - return m_res; + return m_format; } const AudioParameters Effect::audioParameters() const { - return AudioParameters(m_freq, m_chan, m_res); + return AudioParameters(m_freq, m_chan, m_format); } EffectFactory* Effect::factory() const diff --git a/src/qmmp/effect.h b/src/qmmp/effect.h index 325db8e25..05873cda4 100644 --- a/src/qmmp/effect.h +++ b/src/qmmp/effect.h @@ -23,6 +23,7 @@ #include <QList> #include <QStringList> #include "audioparameters.h" +#include "buffer.h" class EffectFactory; @@ -41,20 +42,18 @@ public: */ virtual ~Effect(); /*! - * Adds effect to the input data pointer \b in_data with the size \b size. - * Result is stored in the output data \b out_data. - * Return value is the size of the output data. + * Adds audio effect to the buffer \b b. * Subclass should implement this function. */ - virtual ulong process(char *in_data, const ulong size, char **out_data) = 0; + virtual void applyEffect(Buffer *b) = 0; /*! * Prepares object for usage. * Subclasses that reimplement this function must call the base implementation. * @param freq Sample rate. * @param chan Number of channels. - * @param res Bits per sample. + * @param f Audio format. */ - virtual void configure(quint32 freq, int chan, int res); + virtual void configure(quint32 srate = 44100, int chan = 2, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); /*! * Returns samplerate. */ @@ -64,9 +63,9 @@ public: */ int channels(); /*! - * Returns bits per sample. + * Returns audio format. */ - int bitsPerSample(); + Qmmp::AudioFormat format(); const AudioParameters audioParameters() const; EffectFactory* factory() const; @@ -99,7 +98,7 @@ private: EffectFactory *m_factory; quint32 m_freq; int m_chan; - int m_res; + Qmmp::AudioFormat m_format; static void checkFactories(); static QList<EffectFactory*> *m_factories; static QStringList m_files; diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp index feff9e11f..6468d4165 100644 --- a/src/qmmp/output.cpp +++ b/src/qmmp/output.cpp @@ -9,7 +9,7 @@ #include <QStringList> #include <QApplication> #include <QTimer> - +#include "audioparameters.h" #include "buffer.h" #include "output.h" #include "volumecontrol.h" @@ -17,26 +17,74 @@ #include <stdio.h> +//static functions +static inline void s8_to_s16(qint8 *in, qint16 *out, qint64 samples) +{ + for(qint64 i = 0; i < samples; ++i) + out[i] = in[i] << 8; + return; +} + +static inline void s24_to_s16(qint32 *in, qint16 *out, qint64 samples) +{ + for(qint64 i = 0; i < samples; ++i) + out[i] = in[i] >> 8; + return; +} + +static inline void s32_to_s16(qint32 *in, qint16 *out, qint64 samples) +{ + for(qint64 i = 0; i < samples; ++i) + out[i] = in[i] >> 16; + return; +} + Output::Output (QObject* parent) : QThread (parent), m_recycler (stackSize()) { m_handler = StateHandler::instance(); m_frequency = 0; m_channels = 0; - m_kbps = 0; + m_format = Qmmp::PCM_UNKNOWM; m_totalWritten = 0; m_currentMilliseconds = -1; m_bytesPerMillisecond = 0; m_userStop = FALSE; m_pause = FALSE; m_finish = FALSE; + m_visBuffer = 0; + m_visBufferSize = 0; + m_kbps = 0; } -void Output::configure(quint32 freq, int chan, int prec) +void Output::configure(quint32 freq, int chan, Qmmp::AudioFormat format) { m_frequency = freq; m_channels = chan; - m_precision = prec; - m_bytesPerMillisecond = freq * chan * (prec / 8) / 1000; + m_format = format; + QMap<Qmmp::AudioFormat, QString> formatNames; + formatNames.insert(Qmmp::PCM_S8, "s8"); + formatNames.insert(Qmmp::PCM_S16LE, "s16le"); + formatNames.insert(Qmmp::PCM_S24LE, "s24le"); + formatNames.insert(Qmmp::PCM_S32LE, "s32le"); + qDebug("Output: %d Hz, %d ch, %s", freq, chan, qPrintable(formatNames.value(format))); + m_bytesPerMillisecond = freq * chan * AudioParameters::sampleSize(format) / 1000; + //visual buffer + if(m_visBuffer) + { + delete [] m_visBuffer; + m_visBuffer = 0; + m_visBufferSize = 0; + } + if(format == Qmmp::PCM_S8) + { + m_visBufferSize = QMMP_BLOCK_SIZE * 2; + m_visBuffer = new unsigned char [m_visBufferSize]; + } + else if(format == Qmmp::PCM_S24LE || format == Qmmp::PCM_S32LE) + { + m_visBufferSize = QMMP_BLOCK_SIZE / 2; + m_visBuffer = new unsigned char [m_visBufferSize]; + } } void Output::pause() @@ -92,25 +140,59 @@ int Output::numChannels() return m_channels; } -int Output::sampleSize() +Qmmp::AudioFormat Output::format() const +{ + return m_format; +} + +int Output::sampleSize() const { - return m_precision; + return AudioParameters::sampleSize(m_format); } Output::~Output() {} -void Output::dispatchVisual (Buffer *buffer, unsigned long written, - int chan, int prec) +void Output::dispatchVisual (Buffer *buffer) { if (!buffer) return; + + int sampleSize = AudioParameters::sampleSize(m_format); + int samples = buffer->nbytes/sampleSize; + int outSize = samples*2; + if((m_format != Qmmp::PCM_S16LE) && outSize > m_visBufferSize) //increase buffer size + { + delete[] m_visBuffer; + m_visBufferSize = outSize; + m_visBuffer = new unsigned char [m_visBufferSize]; + } + switch(m_format) + { + case Qmmp::PCM_S8: + s8_to_s16((qint8 *)buffer->data, (qint16 *) m_visBuffer, samples); + break; + case Qmmp::PCM_S16LE: + m_visBuffer = buffer->data; + outSize = buffer->nbytes; + break; + case Qmmp::PCM_S24LE: + s24_to_s16((qint32 *)buffer->data, (qint16 *) m_visBuffer, samples); + break; + case Qmmp::PCM_S32LE: + s32_to_s16((qint32 *)buffer->data, (qint16 *) m_visBuffer, samples); + break; + default: + return; + } foreach (Visual *visual, *Visual::visuals()) { visual->mutex()->lock (); - visual->add ( buffer, written, chan, prec ); + visual->add (m_visBuffer, outSize, m_channels); visual->mutex()->unlock(); } + if(m_format == Qmmp::PCM_S16LE) + m_visBuffer = 0; } @@ -186,9 +268,9 @@ void Output::run() mutex()->unlock(); if (b) { - dispatchVisual(b, m_totalWritten, m_channels, m_precision); - if (SoftwareVolume::instance()) - SoftwareVolume::instance()->changeVolume(b->data, b->nbytes, m_channels, m_precision); + dispatchVisual(b); + /*if (SoftwareVolume::instance()) + SoftwareVolume::instance()->changeVolume(b->data, b->nbytes, m_channels, m_precision);*/ l = 0; m = 0; while (l < b->nbytes) @@ -235,7 +317,7 @@ void Output::status() { m_currentMilliseconds = ct; dispatch(m_currentMilliseconds, m_kbps, - m_frequency, m_precision, m_channels); + m_frequency, AudioParameters::sampleSize(m_format)*8, m_channels); } } diff --git a/src/qmmp/output.h b/src/qmmp/output.h index 853ec1b8f..c5a4d704b 100644 --- a/src/qmmp/output.h +++ b/src/qmmp/output.h @@ -55,9 +55,9 @@ public: * Setups audio parameters of output interface. * @param freq Sample rate. * @param chan Number of channels. - * @param bits Bits per sample + * @param format Audio format */ - virtual void configure(quint32 freq, int chan, int bits); + virtual void configure(quint32 freq, int chan, Qmmp::AudioFormat format); /*! * Requests playback to pause. If it was paused already, playback should resume. * Subclasses that reimplement this function must call the base implementation. @@ -101,9 +101,11 @@ public: */ int numChannels(); /*! - * Returns bits per sample. + * Returns selected audio format. */ - int sampleSize(); + Qmmp::AudioFormat format() const; + + int sampleSize() const; /*! * Creates selected output. * @param parent Parent object. @@ -146,20 +148,24 @@ private: void dispatch(qint64 elapsed, int bitrate, int frequency, - int precision, + int bits, int channels); void dispatch(const Qmmp::State &state); - void dispatchVisual(Buffer *, unsigned long, int, int); + void dispatchVisual(Buffer *buffer); void clearVisuals(); QMutex m_mutex; Recycler m_recycler; StateHandler *m_handler; quint32 m_frequency; - int m_channels, m_precision, m_kbps; + int m_channels, m_kbps; + Qmmp::AudioFormat m_format; qint64 m_bytesPerMillisecond; bool m_userStop, m_pause; bool m_finish; qint64 m_totalWritten, m_currentMilliseconds; + unsigned char *m_visBuffer; + qint64 m_visBufferSize; + static void checkFactories(); static void registerFactory(OutputFactory *); diff --git a/src/qmmp/qmmp.cpp b/src/qmmp/qmmp.cpp index 4fe71cf9d..5be4dbe1e 100644 --- a/src/qmmp/qmmp.cpp +++ b/src/qmmp/qmmp.cpp @@ -32,7 +32,6 @@ #define LIB_DIR "/lib" #endif -#include "buffer.h" #include "qmmp.h" QString Qmmp::m_configFile; @@ -123,9 +122,3 @@ QString Qmmp::systemLanguageID() #endif return QLocale::system().name(); } - -unsigned int Qmmp::globalBufferSize() -{ - return Buffer::size() * 128; -} - diff --git a/src/qmmp/qmmp.h b/src/qmmp/qmmp.h index 360dd81b1..62cf446bf 100644 --- a/src/qmmp/qmmp.h +++ b/src/qmmp/qmmp.h @@ -64,6 +64,17 @@ public: REPLAYGAIN_ALBUM_PEAK }; /*! + * Audio formats + */ + enum AudioFormat + { + PCM_UNKNOWM = -1, /*!< Unknown format */ + PCM_S8 = 0, /*!< Signed 8 bit */ + PCM_S16LE, /*!< Signed 16 bit Little Endian */ + PCM_S24LE, /*!< Signed 24 bit Little Endian using low three bytes in 32-bit word */ + PCM_S32LE /*!< Signed 32 bit Little Endian */ + }; + /*! * Returns configuration file path. */ static const QString configFile(); @@ -109,11 +120,6 @@ public: * Returns system language */ static QString systemLanguageID(); - /*! - * Returns global buffer size in bytes - */ - static unsigned int globalBufferSize(); - private: static QString m_configFile; diff --git a/src/qmmp/qmmpaudioengine.cpp b/src/qmmp/qmmpaudioengine.cpp index aa99cea58..7f385897b 100644 --- a/src/qmmp/qmmpaudioengine.cpp +++ b/src/qmmp/qmmpaudioengine.cpp @@ -41,13 +41,12 @@ QmmpAudioEngine::QmmpAudioEngine(QObject *parent) : AbstractEngine(parent), m_factory(0), m_output(0), m_eqInited(FALSE), m_useEQ(FALSE) { - m_output_buf = new unsigned char[Qmmp::globalBufferSize()]; + m_output_buf = new unsigned char[QMMP_BUFFER_SIZE]; double b[] = {0,0,0,0,0,0,0,0,0,0}; setEQ(b, 0); qRegisterMetaType<Qmmp::State>("Qmmp::State"); - _blksize = Buffer::size(); m_effects = Effect::create(); - m_bks = Buffer::size(); + m_bks = QMMP_BLOCK_SIZE; m_decoder = 0; m_output = 0; m_replayGain = new ReplayGain; @@ -174,7 +173,7 @@ void QmmpAudioEngine::addEffect(EffectFactory *factory) if(m_output && m_output->isRunning()) { Effect *effect = factory->create(); - effect->configure(m_ap.sampleRate(), m_ap.channels(), m_ap.bits()); + effect->configure(m_ap.sampleRate(), m_ap.channels(), m_ap.format()); if(effect->audioParameters() == m_ap) { mutex()->lock(); @@ -199,21 +198,11 @@ void QmmpAudioEngine::removeEffect(EffectFactory *factory) } if(!effect) return; - int index = m_effects.indexOf(effect); if(m_output && m_output->isRunning()) { - if(index == 0 && m_decoder->audioParameters() == effect->audioParameters()) - { - mutex()->lock(); - m_effects.removeAll(effect); - mutex()->unlock(); - } - else if(m_effects.at(index - 1)->audioParameters() == effect->audioParameters()) - { - mutex()->lock(); - m_effects.removeAll(effect); - mutex()->unlock(); - } + mutex()->lock(); + m_effects.removeAll(effect); + mutex()->unlock(); } } @@ -309,7 +298,7 @@ void QmmpAudioEngine::stop() qint64 QmmpAudioEngine::produceSound(char *data, qint64 size, quint32 brate, int chan) { - ulong sz = size < _blksize ? size : _blksize; + uint sz = size < m_bks ? size : m_bks; m_replayGain->applyReplayGain(data, sz); if (m_useEQ) { @@ -318,43 +307,19 @@ qint64 QmmpAudioEngine::produceSound(char *data, qint64 size, quint32 brate, int init_iir(); m_eqInited = TRUE; } - iir((void*) data, sz, chan > 2 ? 2 : chan); - } - char *out_data = data; - char *prev_data = data; - qint64 w = sz; - Effect* effect = 0; - foreach(effect, m_effects) - { - w = effect->process(prev_data, sz, &out_data); - - if (w <= 0) - { - // copy data if plugin can not process it - w = sz; - out_data = new char[w]; - memcpy(out_data, prev_data, w); - } - if (data != prev_data) - delete prev_data; - prev_data = out_data; + iir((void*) data, sz, chan); } - Buffer *b = m_output->recycler()->get(w); - - memcpy(b->data, out_data, w); - - if (data != out_data) - delete out_data; + Buffer *b = m_output->recycler()->get(); - if (w < _blksize + b->exceeding) - memset(b->data + w, 0, _blksize + b->exceeding - w); - - b->nbytes = w; + memcpy(b->data, data, sz); + b->nbytes = sz; b->rate = brate; - + foreach(Effect* effect, m_effects) + { + effect->applyEffect(b); + } m_output->recycler()->add(); - size -= sz; memmove(data, data + sz, size); return sz; @@ -406,7 +371,7 @@ void QmmpAudioEngine::run() } len = m_decoder->read((char *)(m_output_buf + m_output_at), - Qmmp::globalBufferSize() - m_output_at); + QMMP_BUFFER_SIZE - m_output_at); if (len > 0) { @@ -588,18 +553,18 @@ Output *QmmpAudioEngine::createOutput(Decoder *d) m_effects = Effect::create(); quint32 srate = m_ap.sampleRate(); int chan = m_ap.channels(); - int bps = m_ap.bits(); - m_replayGain->setSampleSize(bps); + Qmmp::AudioFormat format = m_ap.format(); + m_replayGain->setSampleSize(m_ap.sampleSize()); foreach(Effect *effect, m_effects) { - effect->configure(srate, chan, bps); + effect->configure(srate, chan, format); srate = effect->sampleRate(); chan = effect->channels(); - bps = effect->bitsPerSample(); + format = effect->format(); } m_chan = chan; - output->configure(srate, chan, bps); + output->configure(srate, chan, format); return output; } diff --git a/src/qmmp/qmmpaudioengine.h b/src/qmmp/qmmpaudioengine.h index 20372be8e..7d19e2917 100644 --- a/src/qmmp/qmmpaudioengine.h +++ b/src/qmmp/qmmpaudioengine.h @@ -73,11 +73,10 @@ private: QList <Effect*> m_effects; Output *m_output; - uint _blksize; bool m_eqInited; bool m_useEQ; bool m_done, m_finish, m_user_stop; - ulong m_bks; + uint m_bks; qint64 m_totalTime, m_seekTime; qint64 m_output_at; int m_bitrate, m_chan, m_bps; diff --git a/src/qmmp/recycler.cpp b/src/qmmp/recycler.cpp index fd8b03cff..a47b4f9c9 100644 --- a/src/qmmp/recycler.cpp +++ b/src/qmmp/recycler.cpp @@ -10,7 +10,7 @@ Recycler::Recycler ( unsigned int sz ) : add_index ( 0 ), done_index ( 0 ), current_count ( 0 ) { - buffer_count = sz / Buffer::size(); + buffer_count = sz / QMMP_BLOCK_SIZE; if (buffer_count < 4) { buffer_count = 4; @@ -60,18 +60,10 @@ int Recycler::used() const } -Buffer *Recycler::get(unsigned long size) +Buffer *Recycler::get() { if (full()) return 0; - if (size > Buffer::size() + buffers[add_index]->exceeding) - { - delete buffers[add_index]->data; - buffers[add_index]->data = new unsigned char[size]; - buffers[add_index]->exceeding = size - Buffer::size(); - //qDebug("new size = %d, index = %d", size, add_index); - } - return buffers[add_index]; } @@ -105,5 +97,5 @@ void Recycler::clear() unsigned int Recycler::size() const { - return buffer_count * Buffer::size(); + return buffer_count * QMMP_BLOCK_SIZE; } diff --git a/src/qmmp/recycler.h b/src/qmmp/recycler.h index 66ab6e147..82dcb30a9 100644 --- a/src/qmmp/recycler.h +++ b/src/qmmp/recycler.h @@ -49,9 +49,8 @@ public: Buffer *next(); /*! * Returns current buffer for writing. - * @param size Buffer size. */ - Buffer *get(unsigned long size); // get next in recycle + Buffer *get(); // get next in recycle /*! * Adds current buffer to queue. */ diff --git a/src/qmmp/replaygain.cpp b/src/qmmp/replaygain.cpp index 5d7db77ad..175dc24fd 100644 --- a/src/qmmp/replaygain.cpp +++ b/src/qmmp/replaygain.cpp @@ -23,13 +23,13 @@ ReplayGain::ReplayGain() { - m_bits = 0; + m_sampleSize = 2; m_scale = 1.0; } -void ReplayGain::setSampleSize(int bits) +void ReplayGain::setSampleSize(int size) { - m_bits = bits; + m_sampleSize = size; updateScale(); } @@ -60,19 +60,19 @@ void ReplayGain::applyReplayGain(char *data, qint64 size) { if(m_settings.mode() == ReplayGainSettings::DISABLED || m_scale == 1.0) return; - size = size*8/m_bits; - if(m_bits == 16) + size = size/m_sampleSize; + if(m_sampleSize == 2) { for (qint64 i = 0; i < size; i++) ((short*)data)[i]*= m_scale; } - else if(m_bits == 8) + else if(m_sampleSize == 1) { for (qint64 i = 0; i < size; i++) ((char*)data)[i]*= m_scale; } - else if(m_bits == 32) + else if(m_sampleSize == 4) { for (qint64 i = 0; i < size; i++) ((qint32*)data)[i]*= m_scale; diff --git a/src/qmmp/replaygain.h b/src/qmmp/replaygain.h index c11679243..ed6ca25c1 100644 --- a/src/qmmp/replaygain.h +++ b/src/qmmp/replaygain.h @@ -34,14 +34,14 @@ class ReplayGain public: ReplayGain(); - void setSampleSize(int bits); + void setSampleSize(int size); void setReplayGainSettings(const ReplayGainSettings &settings); void setReplayGainInfo(const QMap<Qmmp::ReplayGainKey, double> &info); void applyReplayGain(char *data, qint64 size); private: void updateScale(); - int m_bits; + int m_sampleSize; QMap<Qmmp::ReplayGainKey, double> m_info; ReplayGainSettings m_settings; double m_scale; diff --git a/src/qmmp/visual.h b/src/qmmp/visual.h index 7f3739384..e45eac657 100644 --- a/src/qmmp/visual.h +++ b/src/qmmp/visual.h @@ -49,12 +49,11 @@ public: /*! * Adds data for visualization. * Subclass should reimplement this function. - * @param b Buffer object pointer. - * @param freq Samplerate. - * @param chan Number of channels - * @param bits Bits per sample. + * @param data Audio data. + * @param size Size of audio data. + * @param chan Number of channels. */ - virtual void add(Buffer *b, unsigned long freq, int chan, int bits) = 0; + virtual void add(unsigned char *data, qint64 size, int chan) = 0; /*! * Resets visual plugin buffers and widgets. * Subclass should reimplement this function. diff --git a/src/ui/mainvisual.cpp b/src/ui/mainvisual.cpp index 77c1f3acc..ada7291df 100644 --- a/src/ui/mainvisual.cpp +++ b/src/ui/mainvisual.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007-2009 by Ilya Kotov * + * Copyright (C) 2007-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -52,6 +52,7 @@ MainVisual::MainVisual (QWidget *parent) m_nodes.clear(); createMenu(); readSettings(); + m_buf_at = 0; m_instance = this; } @@ -97,42 +98,40 @@ void MainVisual::clear() update(); } -void MainVisual::add (Buffer *b, unsigned long w, int c, int p) +void MainVisual::add (unsigned char *data, qint64 size, int chan) { if (!m_timer->isActive () || !m_vis) return; - long len = b->nbytes, cnt; + long len = size, cnt; short *l = 0, *r = 0; - len /= c; - len /= (p / 8); + + memcpy(m_buf + m_buf_at, data, qMin(qint64(2048 - m_buf_at), size)); + m_buf_at += qMin(qint64(2048 - m_buf_at), size); + if(m_buf_at < 2048) + return; + len = m_buf_at; + len /= chan; + len /= 2; if (len > 512) len = 512; cnt = len; - if (c >= 2) + if (chan >= 2) { l = new short[len]; r = new short[len]; - - if (p == 8) - stereo16_from_stereopcm8 (l, r, b->data, cnt); - else if (p == 16) - stereo16_from_stereopcm16 (l, r, (short *) b->data, cnt); + stereo16_from_stereopcm16 (l, r, (short *) m_buf, cnt); } - else if (c == 1) + else if (chan == 1) { l = new short[len]; - - if (p == 8) - mono16_from_monopcm8 (l, b->data, cnt); - else if (p == 16) - mono16_from_monopcm16 (l, (short *) b->data, cnt); + mono16_from_monopcm16 (l, (short *) m_buf, cnt); } else len = 0; - - m_nodes.append (new VisualNode (l, r, len, w)); + m_buf_at = 0; + m_nodes.append (new VisualNode (l, r, len)); } void MainVisual::timeout() diff --git a/src/ui/mainvisual.h b/src/ui/mainvisual.h index 02fbc7fba..30fcd67ab 100644 --- a/src/ui/mainvisual.h +++ b/src/ui/mainvisual.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007-2009 by Ilya Kotov * + * Copyright (C) 2007-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -34,8 +34,8 @@ class Buffer; class VisualNode { public: - VisualNode(short *l, short *r, unsigned long n, unsigned long o) - : left(l), right(r), length(n), offset(o) + VisualNode(short *l, short *r, unsigned long n) + : left(l), right(r), length(n) { // left and right are allocated and then passed to this class // the code that allocated left and right should give up all ownership @@ -48,7 +48,7 @@ public: } short *left, *right; - long length, offset; + long length; }; class VisualBase @@ -73,7 +73,7 @@ public: static MainVisual *instance(); void setVisual(VisualBase *newvis); - void add(Buffer *, unsigned long, int, int); + void add(unsigned char *data, qint64 size, int chan); void clear(); void paintEvent(QPaintEvent *); @@ -111,6 +111,8 @@ private: QActionGroup *m_analyzerTypeGroup; QAction *m_peaksAction; QAction *m_transparentAction; + unsigned char m_buf[2048]; + int m_buf_at; int m_ratio; }; diff --git a/src/ui/shadedvisual.cpp b/src/ui/shadedvisual.cpp index d58f96fa1..fdc487c7c 100644 --- a/src/ui/shadedvisual.cpp +++ b/src/ui/shadedvisual.cpp @@ -42,43 +42,35 @@ ShadedVisual::ShadedVisual(QWidget *parent) : Visual(parent) ShadedVisual::~ShadedVisual() {} -void ShadedVisual::add(Buffer *b, unsigned long w, int c, int p) +void ShadedVisual::add(unsigned char *data, qint64 size, int chan) { if (!m_timer->isActive ()) return; - long len = b->nbytes, cnt; + long len = size, cnt; short *l = 0, *r = 0; - len /= c; - len /= ( p / 8 ); + len /= chan; + len /= 2; if ( len > 512 ) len = 512; cnt = len; - if ( c == 2 ) + if (chan == 2) { l = new short[len]; r = new short[len]; - - if ( p == 8 ) - stereo16_from_stereopcm8 ( l, r, b->data, cnt ); - else if ( p == 16 ) - stereo16_from_stereopcm16 ( l, r, ( short * ) b->data, cnt ); + stereo16_from_stereopcm16 ( l, r, (short *) data, cnt); } - else if ( c == 1 ) + else if (chan == 1) { l = new short[len]; - - if ( p == 8 ) - mono16_from_monopcm8 ( l, b->data, cnt ); - else if ( p == 16 ) - mono16_from_monopcm16 ( l, ( short * ) b->data, cnt ); + mono16_from_monopcm16 (l, (short *) data, cnt); } else len = 0; if (len) - m_nodes.append (new VisualNode (l, r, len, w)); + m_nodes.append (new VisualNode (l, r, len)); } void ShadedVisual::clear() diff --git a/src/ui/shadedvisual.h b/src/ui/shadedvisual.h index 3c1cb30db..e276b8b24 100644 --- a/src/ui/shadedvisual.h +++ b/src/ui/shadedvisual.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007-2009 by Ilya Kotov * + * Copyright (C) 2007-2010 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -40,7 +40,7 @@ public: ~ShadedVisual(); - void add(Buffer *, unsigned long, int, int); + void add(unsigned char *data, qint64 size, int chan); void clear(); void paintEvent (QPaintEvent *); diff --git a/src/ui/translations/qmmp_cs.ts b/src/ui/translations/qmmp_cs.ts index 696fbec6e..17466ae39 100644 --- a/src/ui/translations/qmmp_cs.ts +++ b/src/ui/translations/qmmp_cs.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Režim vizualizace</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Frekvenční analýza</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Osciloskop</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Vypnuto</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Režim analýzy</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Normální</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Oheň</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Sloupce</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Úzké</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Široké</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Špičky</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Obnovovací frekvence</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 Hz</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 Hz</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 Hz</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 Hz</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Pokles analyzátoru</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Nejpomalejší</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Pomalý</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Střední</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Rychlý</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Nejrychlejší</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Pokles špiček</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Pozadí</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Průhledné</translation> </message> diff --git a/src/ui/translations/qmmp_de.ts b/src/ui/translations/qmmp_de.ts index e48d2987f..419aa4b70 100644 --- a/src/ui/translations/qmmp_de.ts +++ b/src/ui/translations/qmmp_de.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Visualisierungsmodus</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Analyzer</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Oszilloskop</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Aus</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Analyzer-Modus</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Feuer</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Vertikale Linien</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Linien</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Balken</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Spitzen</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Wiederholfrequenz</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Analyzer-Abfall</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Sehr langsam</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Langsam</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Mittel</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Schnell</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Sehr schnell</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation type="unfinished">Peaks-Abfall</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Hintergrund</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Transparent</translation> </message> diff --git a/src/ui/translations/qmmp_it.ts b/src/ui/translations/qmmp_it.ts index e68285d9e..d255464aa 100644 --- a/src/ui/translations/qmmp_it.ts +++ b/src/ui/translations/qmmp_it.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Modo visualizzazione</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Analizzatore</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Oscilloscopio</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Chiudi</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Modo analizzatore</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Normale</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Fuoco</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Linee verticali</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Linee</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Barre</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Picchi</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Velocità di aggiornamento</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Ricaduta analizzatore</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Molto lenta</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Lenta</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Media</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Rapida</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Molto veloce</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Ricadua picchi</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Sfondo</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Transparente</translation> </message> diff --git a/src/ui/translations/qmmp_lt.ts b/src/ui/translations/qmmp_lt.ts index 0af708ad1..424f99be7 100644 --- a/src/ui/translations/qmmp_lt.ts +++ b/src/ui/translations/qmmp_lt.ts @@ -822,132 +822,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Vizualizacijos metodas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Analizatorius</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Scope</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Išjungta</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Analizatoriaus metodas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Įprastinis</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Ugnis</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Vertikalios linijos</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Linijos</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Bangos</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Pikai</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Atnaujinimo dažnumas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 kps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 kps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 kps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 kps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Analyzer Falloff</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Lėčiausias</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Lėtas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Vidutinis</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Greitas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Greičiausias</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Peaks Falloff</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Fonas</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Permatomumas</translation> </message> diff --git a/src/ui/translations/qmmp_pl_PL.ts b/src/ui/translations/qmmp_pl_PL.ts index 24fdcaf8d..85c7b2cb4 100644 --- a/src/ui/translations/qmmp_pl_PL.ts +++ b/src/ui/translations/qmmp_pl_PL.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Tryb wizualizacji</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Analizator</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation></translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Wyłączone</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Tryb Analizatora</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Normalny</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Ogień</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Pionowe Linie</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Linie</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Słupki</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Piki</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Odświeżanie</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation></translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation></translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation></translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation></translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Prędkość Analizatora</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Najwolniej</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Wolno</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Średnio</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Szybko</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Najszybciej</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Opadanie Pików</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Tło</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Przezroczystość</translation> </message> diff --git a/src/ui/translations/qmmp_pt_BR.ts b/src/ui/translations/qmmp_pt_BR.ts index 90bb1ba03..c730dd312 100644 --- a/src/ui/translations/qmmp_pt_BR.ts +++ b/src/ui/translations/qmmp_pt_BR.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation type="unfinished"></translation> </message> <message> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> + <source>Slowest</source> + <translation type="unfinished"></translation> + </message> + <message> <location filename="../mainvisual.cpp" line="345"/> <location filename="../mainvisual.cpp" line="359"/> - <source>Slowest</source> + <source>Slow</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainvisual.cpp" line="346"/> <location filename="../mainvisual.cpp" line="360"/> - <source>Slow</source> + <source>Medium</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainvisual.cpp" line="347"/> <location filename="../mainvisual.cpp" line="361"/> - <source>Medium</source> + <source>Fast</source> <translation type="unfinished"></translation> </message> <message> <location filename="../mainvisual.cpp" line="348"/> <location filename="../mainvisual.cpp" line="362"/> - <source>Fast</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> <source>Fastest</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation type="unfinished"></translation> </message> diff --git a/src/ui/translations/qmmp_ru.ts b/src/ui/translations/qmmp_ru.ts index d5e9fdb5f..67e7cc15c 100644 --- a/src/ui/translations/qmmp_ru.ts +++ b/src/ui/translations/qmmp_ru.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Режим визуализации</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Анализатор</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Осциллограф</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Выключено</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Режим анализатора</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Обычный</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Огонь</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Вертикальные линии</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Линии</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Полоски</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Пики</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Частота обновления</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation type="unfinished"></translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Падение анализатора</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Самое медленное</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Медленное</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Среднее</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Быстрое</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Самое быстрое</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Падение пиков</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Фон</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Прозрачность</translation> </message> diff --git a/src/ui/translations/qmmp_tr.ts b/src/ui/translations/qmmp_tr.ts index 827ea76d4..d4758b244 100644 --- a/src/ui/translations/qmmp_tr.ts +++ b/src/ui/translations/qmmp_tr.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Görselleştirme Modu</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Çözümleyici</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Kapsam</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Kapat</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Çözümleyici Modu</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Normal</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Ateş</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Dikey Satırlar</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Satırlar</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Çubuklar</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Tepeler</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Tazeleme Oranı</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Çözümleyici Düşüşü</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>En yavaş</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Yavaş</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Orta</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Hızlı</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>En hızlı</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Tepe Düşüşü</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Arkaplan</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Transparan</translation> </message> diff --git a/src/ui/translations/qmmp_uk_UA.ts b/src/ui/translations/qmmp_uk_UA.ts index 5022c1f2c..d87cb079f 100644 --- a/src/ui/translations/qmmp_uk_UA.ts +++ b/src/ui/translations/qmmp_uk_UA.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>Режим візуалізації</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>Аналізатор</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>Осцилограф</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>Вимкнено</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>Режим аналізатора</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>Звичайний</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>Вогонь</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>Вертикальні лінії</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>Лінії</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>Смужки</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>Піки</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>Частота оновлення</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 ф/с</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 ф/с</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 ф/с</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 ф/с</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>Падіння аналізатора</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>Найповільніше</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>Повільне</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>Середнє</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>Швидке</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>Найшвидше</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>Падіння піків</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>Тло</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>Прозорість</translation> </message> diff --git a/src/ui/translations/qmmp_zh_CN.ts b/src/ui/translations/qmmp_zh_CN.ts index 27d0f1f25..de6287ef7 100644 --- a/src/ui/translations/qmmp_zh_CN.ts +++ b/src/ui/translations/qmmp_zh_CN.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>可视化模式</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>分析器</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>示波器</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>关闭</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>分析模式</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>标准</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>火花</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>垂直线</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>线形</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>条形</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>峰值</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>刷新率</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>分析器下降速度</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>最慢</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>慢</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>中</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>快</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>最快</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>峰值下降速度</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>背景</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>透明</translation> </message> diff --git a/src/ui/translations/qmmp_zh_TW.ts b/src/ui/translations/qmmp_zh_TW.ts index 753f474f4..39344f0c1 100644 --- a/src/ui/translations/qmmp_zh_TW.ts +++ b/src/ui/translations/qmmp_zh_TW.ts @@ -821,132 +821,132 @@ <context> <name>MainVisual</name> <message> - <location filename="../mainvisual.cpp" line="293"/> + <location filename="../mainvisual.cpp" line="292"/> <source>Visualization Mode</source> <translation>可視化型態</translation> </message> <message> - <location filename="../mainvisual.cpp" line="296"/> + <location filename="../mainvisual.cpp" line="295"/> <source>Analyzer</source> <translation>解析器</translation> </message> <message> - <location filename="../mainvisual.cpp" line="297"/> + <location filename="../mainvisual.cpp" line="296"/> <source>Scope</source> <translation>示波器</translation> </message> <message> - <location filename="../mainvisual.cpp" line="298"/> + <location filename="../mainvisual.cpp" line="297"/> <source>Off</source> <translation>關閉</translation> </message> <message> - <location filename="../mainvisual.cpp" line="305"/> + <location filename="../mainvisual.cpp" line="304"/> <source>Analyzer Mode</source> <translation>解析型態</translation> </message> <message> - <location filename="../mainvisual.cpp" line="308"/> + <location filename="../mainvisual.cpp" line="307"/> <source>Normal</source> <translation>標準</translation> </message> <message> - <location filename="../mainvisual.cpp" line="309"/> + <location filename="../mainvisual.cpp" line="308"/> <source>Fire</source> <translation>火花</translation> </message> <message> - <location filename="../mainvisual.cpp" line="310"/> + <location filename="../mainvisual.cpp" line="309"/> <source>Vertical Lines</source> <translation>垂直線</translation> </message> <message> - <location filename="../mainvisual.cpp" line="311"/> + <location filename="../mainvisual.cpp" line="310"/> <source>Lines</source> <translation>線形</translation> </message> <message> - <location filename="../mainvisual.cpp" line="312"/> + <location filename="../mainvisual.cpp" line="311"/> <source>Bars</source> <translation>條形</translation> </message> <message> - <location filename="../mainvisual.cpp" line="325"/> + <location filename="../mainvisual.cpp" line="324"/> <source>Peaks</source> <translation>峰值</translation> </message> <message> - <location filename="../mainvisual.cpp" line="329"/> + <location filename="../mainvisual.cpp" line="328"/> <source>Refresh Rate</source> <translation>刷新率</translation> </message> <message> - <location filename="../mainvisual.cpp" line="332"/> + <location filename="../mainvisual.cpp" line="331"/> <source>50 fps</source> <translation>50 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="333"/> + <location filename="../mainvisual.cpp" line="332"/> <source>25 fps</source> <translation>25 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="334"/> + <location filename="../mainvisual.cpp" line="333"/> <source>10 fps</source> <translation>10 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="335"/> + <location filename="../mainvisual.cpp" line="334"/> <source>5 fps</source> <translation>5 fps</translation> </message> <message> - <location filename="../mainvisual.cpp" line="342"/> + <location filename="../mainvisual.cpp" line="341"/> <source>Analyzer Falloff</source> <translation>解析器下降速度</translation> </message> <message> - <location filename="../mainvisual.cpp" line="345"/> - <location filename="../mainvisual.cpp" line="359"/> + <location filename="../mainvisual.cpp" line="344"/> + <location filename="../mainvisual.cpp" line="358"/> <source>Slowest</source> <translation>最慢</translation> </message> <message> - <location filename="../mainvisual.cpp" line="346"/> - <location filename="../mainvisual.cpp" line="360"/> + <location filename="../mainvisual.cpp" line="345"/> + <location filename="../mainvisual.cpp" line="359"/> <source>Slow</source> <translation>慢</translation> </message> <message> - <location filename="../mainvisual.cpp" line="347"/> - <location filename="../mainvisual.cpp" line="361"/> + <location filename="../mainvisual.cpp" line="346"/> + <location filename="../mainvisual.cpp" line="360"/> <source>Medium</source> <translation>中</translation> </message> <message> - <location filename="../mainvisual.cpp" line="348"/> - <location filename="../mainvisual.cpp" line="362"/> + <location filename="../mainvisual.cpp" line="347"/> + <location filename="../mainvisual.cpp" line="361"/> <source>Fast</source> <translation>快</translation> </message> <message> - <location filename="../mainvisual.cpp" line="349"/> - <location filename="../mainvisual.cpp" line="363"/> + <location filename="../mainvisual.cpp" line="348"/> + <location filename="../mainvisual.cpp" line="362"/> <source>Fastest</source> <translation>最快</translation> </message> <message> - <location filename="../mainvisual.cpp" line="356"/> + <location filename="../mainvisual.cpp" line="355"/> <source>Peaks Falloff</source> <translation>峰值下降速度</translation> </message> <message> - <location filename="../mainvisual.cpp" line="369"/> + <location filename="../mainvisual.cpp" line="368"/> <source>Background</source> <translation>背景</translation> </message> <message> - <location filename="../mainvisual.cpp" line="370"/> + <location filename="../mainvisual.cpp" line="369"/> <source>Transparent</source> <translation>透明</translation> </message> |
