From 435f1da1de18bafe57e43e47fd8a6fc69fd8bab7 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Sat, 16 Jan 2010 15:33:17 +0000 Subject: updated audio engine git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@1503 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/Effect/bs2b/bs2bplugin.cpp | 29 ++++++----- src/plugins/Effect/bs2b/bs2bplugin.h | 7 +-- src/plugins/Effect/ladspa/ladspahelper.cpp | 12 ++--- src/plugins/Effect/ladspa/ladspahelper.h | 4 +- src/plugins/Effect/ladspa/ladspahost.cpp | 5 +- src/plugins/Effect/ladspa/ladspahost.h | 3 +- src/plugins/Effect/srconverter/srconverter.cpp | 39 ++++++++------- src/plugins/Effect/srconverter/srconverter.h | 6 +-- src/plugins/Input/aac/decoder_aac.cpp | 2 +- src/plugins/Input/cdaudio/decoder_cdaudio.cpp | 2 +- .../Input/cdaudio/decodercdaudiofactory.cpp | 5 +- .../cdaudio/translations/cdaudio_plugin_cs.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_de.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_it.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_lt.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_pl.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_ru.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_tr.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_uk_UA.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_zh_CN.ts | 10 ++-- .../cdaudio/translations/cdaudio_plugin_zh_TW.ts | 10 ++-- src/plugins/Input/cue/decoder_cue.cpp | 10 ++-- src/plugins/Input/ffmpeg/decoder_ffmpeg.cpp | 4 +- src/plugins/Input/flac/decoder_flac.cpp | 58 +++++++++++++--------- src/plugins/Input/mad/decoder_mad.cpp | 2 +- src/plugins/Input/mad/settingsdialog.h | 4 +- src/plugins/Input/modplug/decoder_modplug.cpp | 4 +- src/plugins/Input/mpc/decoder_mpc.cpp | 2 +- src/plugins/Input/sndfile/decoder_sndfile.cpp | 2 +- src/plugins/Input/vorbis/decoder_vorbis.cpp | 2 +- src/plugins/Input/wavpack/decoder_wavpack.cpp | 25 +++++++--- src/plugins/Output/alsa/outputalsa.cpp | 36 +++++++------- src/plugins/Output/alsa/outputalsa.h | 5 +- src/plugins/Output/alsa/settingsdialog.ui | 9 ++++ .../Output/alsa/translations/alsa_plugin_cs.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_de.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_it.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_lt.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_pl.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_ru.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_tr.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_uk_UA.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_zh_CN.ts | 22 ++++---- .../Output/alsa/translations/alsa_plugin_zh_TW.ts | 22 ++++---- src/plugins/Output/jack/outputjack.cpp | 10 ++-- src/plugins/Output/jack/outputjack.h | 2 +- src/plugins/Output/oss/outputoss.cpp | 21 ++++---- src/plugins/Output/oss/outputoss.h | 4 +- src/plugins/Output/pulseaudio/CMakeLists.txt | 2 +- src/plugins/Output/pulseaudio/outputpulseaudio.cpp | 20 +++++--- src/plugins/Output/pulseaudio/outputpulseaudio.h | 4 +- src/plugins/Visual/analyzer/analyzer.cpp | 26 ++++------ src/plugins/Visual/analyzer/analyzer.h | 8 +-- src/plugins/Visual/projectm/projectmplugin.cpp | 8 +-- src/plugins/Visual/projectm/projectmplugin.h | 4 +- 55 files changed, 369 insertions(+), 337 deletions(-) (limited to 'src/plugins') 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(*out_data); \ + dataType * data = reinterpret_cast(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 #include #include +#include #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 #include #include +#include #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 plugins(); QList 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 DecoderCDAudioFactory::createPlayList(const QString &fileName, bool useMetaData) { + qDebug("create!!"); Q_UNUSED(useMetaData); QList list; QList 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 @@ Modul pro zvuková CD - + About CD Audio Plugin O modulu pro zvuková CD - + Qmmp CD Audio Plugin Modul Qmmp pro zvuková CD - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Autor: Ilja Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Použití: otevřete cdda:/// v dialogu Přidat URL nebo z příkazové řádky - + Compiled against libcdio version: Přeloženo s libcdio verze: 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 @@ CD-Audio-Modul - + About CD Audio Plugin Über CD-Audio-Modul - + Qmmp CD Audio Plugin Qmmp CD-Audio-Modul - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Autor: Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Verwendung: Geben Sie cdda:/// in den „URL hinzufügen“-Dialog oder in die Befehlszeile ein - + Compiled against libcdio version: Kompiliert gegen libcdio-Version: 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 @@ Modulo CD-Audio - + About CD Audio Plugin Informazioni sul modulo CD-Audio - + Qmmp CD Audio Plugin Modulo CD-Audio per Qmmp - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Autore: Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Uso: aprire cdda:// nella finestra di dialgo degli URL, o via linea di comando - + Compiled against libcdio version: Compilato con libcdio, versione: 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 @@ CD Audio Įskiepis - + About CD Audio Plugin Apie CD Audio įskiepį - + Qmmp CD Audio Plugin Apie CD Audio Qmmp įskiepį - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Sukūrė: Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Naudojimas: atverti cdda:/// naudojant Prideti interneto adresą arba komandinė eilutę - + Compiled against libcdio version: Surinkta iš libcdio versijos : 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 @@ Wtyczka CD Audio - + About CD Audio Plugin O wtyczce CD Audio - + Qmmp CD Audio Plugin Wtyczka CD Audio dla Qmmp - + Compiled against libcdio version: Skompilowane przy użyciu biblioteki libcdio w wersji: - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Autor: Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Instrukcja: otwórz cdda:/// używając Dodaj URL lib z linii poleceń 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 @@ Модуль CD Audio - + About CD Audio Plugin О Модуле CD Audio - + Qmmp CD Audio Plugin Модуль CD Audio для Qmmp - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Разработчик: Илья Котов <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Использование: откройте cdda:/// с помощью диалога добавления URL или командной строки - + Compiled against libcdio version: Собрано с libcdio версии: 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 @@ CD Ses Eklentisi - + About CD Audio Plugin CD Ses Eklentisi Hakkında - + Qmmp CD Audio Plugin Qmmp CD Ses Eklentisi - + Compiled against libcdio version: Derlendiği libcdio sürümü: - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Yazan: Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Kullanımı: komut satırından veya URL Ekle diyaloğundan open cdda:/// şeklindedir 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 @@ Модуль AudioCD - + About CD Audio Plugin Про модуль AudioCD - + Qmmp CD Audio Plugin Модуль AudioCD для Qmmp - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> Розробник: Ілля Котов <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line Використання: відкрийте cdda:/// використовуючи діалог "Додати адресу" чи командний рядок - + Compiled against libcdio version: Зібрано з libcdio версії: 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 @@ CD 音频插件 - + About CD Audio Plugin 关于 CD 音频插件 - + Qmmp CD Audio Plugin Qmmp CD 音频插件 - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> 作者:Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line 用法:open cdda:/// 使用添加 URL 对话或命令行 - + Compiled against libcdio version: 编译依赖 libcdio 版本: 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 @@ CD 聲訊插件 - + About CD Audio Plugin 關於 CD 聲訊插件 - + Qmmp CD Audio Plugin Qmmp CD 聲訊插件 - + Writen by: Ilya Kotov <forkotov02@hotmail.ru> 作者:Ilya Kotov <forkotov02@hotmail.ru> - + Usage: open cdda:/// using Add URL dialog or command line 用法:open cdda:/// 使用添加 URL會話或命令行 - + Compiled against libcdio version: 編譯依賴 libcdio 版本: 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 #include #include - #include #include #include #include - #include #include #include #include - +#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 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 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 @@ ALSA Plugin Settings + + 6 + + + 6 + + + 6 + 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 @@ Nastavení pluginu ALSA - + Device Settings Nastavení zařízení - + Audio device Zvukové zařízení - + Mixer Mixér - + Mixer card: Zvuková karta: - + Mixer device: Ovládání hlasitosti: - + Advanced Settings Pokročilá nastavení - + Soundcard Zvuková karta - + Buffer time (ms): Velikost bufferu (ms): - + Period time (ms): Délka periody (ms): - + Use mmap access Použít mmap - + Use snd_pcm_pause function 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 @@ Einstellungen ALSA-Modul - + Device Settings Geräte-Einstellungen - + Audio device Audiogerät - + Mixer Mixer - + Mixer card: Mixerkarte: - + Mixer device: Mixergerät: - + Advanced Settings Erweiterte Einstellungen - + Soundcard Soundkarte - + Buffer time (ms): Pufferzeit (ms): - + Period time (ms): Zeitraster (ms): - + Use mmap access Mmap-Unterstützung aktivieren - + Use snd_pcm_pause function „snd_pcm_pause“-Funktion verwenden 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 @@ Impostazioni modulo ALSA - + Device Settings Impostazione del device - + Audio device Dispositivo audio - + Mixer Mixer - + Mixer card: Scheda Mixer: - + Mixer device: Dispositivo Mixer: - + Advanced Settings Impostazoni avanzate - + Soundcard Scheda audio - + Buffer time (ms): Tempo di buffering (ms): - + Period time (ms): Periodo (ms): - + Use mmap access Usa accesso Mmap - + Use snd_pcm_pause function Usa la funzione snd_pcm_pause 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 @@ SettingsDialog - + Device Settings Įrangos nustatymai - + Audio device Garso įranga - + Mixer Glotintuvas - + Mixer card: Glotintuvo plokštė : - + Mixer device: Glotintuvo įranga: - + Advanced Settings Papildomi nustatymai - + Soundcard Garso plokštė - + Buffer time (ms): Buferio laikas (ms): - + Period time (ms): Periodo laikas (ms): - + Use snd_pcm_pause function Naudoti snd_pcm_pause funciją @@ -82,7 +82,7 @@ ALSA įskiepio nustatymai - + Use mmap access Naudoti mmap prieigą 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 @@ Ustawienia wtyczki ALSA - + Device Settings Ustawienia urządzenia - + Audio device Urządzenie dźwiękowe - + Mixer Mikser - + Mixer card: Karta miksująca: - + Mixer device: Urządzenie miksujące: - + Advanced Settings Zaawansowane ustawienia - + Soundcard Karta dźwiękowa - + Buffer time (ms): Wielkość buforu (ms): - + Period time (ms): Czas cyklu (ms): - + Use mmap access Użyj dostępu mmap - + Use snd_pcm_pause function Użyj funkcji snd_pcm_pause 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 @@ SettingsDialog - + Device Settings Параметры устройства - + Audio device Аудио устройство - + Mixer Микшер - + Mixer card: Карта микшера: - + Mixer device: Устройство микшера: - + Advanced Settings Дополнительные настройки - + Soundcard Звуковая карта - + Buffer time (ms): Время буферизации (мс): - + Period time (ms): Время периода (мс): - + Use snd_pcm_pause function Использовать функцию snd_pcm_pause @@ -82,7 +82,7 @@ Настройки модуля ALSA - + Use mmap access Использовать доступ mmap 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 @@ ALSA Eklentisi Ayarları - + Device Settings Aygıt Ayarları - + Audio device Ses aygıtı - + Mixer Karıştırıcı - + Mixer card: Karıştırıcı kartı: - + Mixer device: Karıştırıcı aygıtı: - + Advanced Settings Gelişmiş Ayarlar - + Soundcard Ses kartı - + Buffer time (ms): Arabellek süresi (ms): - + Period time (ms): Periyot süresi (ms): - + Use mmap access mmap erişimi kullan - + Use snd_pcm_pause function 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 @@ SettingsDialog - + Device Settings Параметри пристроїв - + Audio device Аудіо пристрій - + Mixer Мікшер - + Mixer card: Карта мікшера: - + Mixer device: Пристрій мікшера: - + Advanced Settings Додаткові налаштування - + Soundcard Звукова карта - + Buffer time (ms): Час буферизації (мс): - + Period time (ms): Час періоду (мс): - + Use snd_pcm_pause function Використовувати функцію snd_pcm_pause @@ -82,7 +82,7 @@ Налаштування модуля ALSA - + Use mmap access Використовувати доступ mmap 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 @@ SettingsDialog - + Device Settings 设备设置 - + Audio device 音频设备 - + Mixer 混频 - + Mixer card: 混频卡: - + Mixer device: 混频设备: - + Advanced Settings 高级设置 - + Soundcard 声卡 - + Buffer time (ms): 缓冲时间(ms): - + Period time (ms): 周期时间(ms): - + Use snd_pcm_pause function @@ -82,7 +82,7 @@ ALSA 插件设置 - + Use mmap access 使用内存映射 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 @@ SettingsDialog - + Device Settings 裝置設定 - + Audio device 聲訊裝置 - + Mixer 混頻 - + Mixer card: 混頻卡: - + Mixer device: 混頻裝置: - + Advanced Settings 進階設定 - + Soundcard 音效卡 - + Buffer time (ms): 緩衝時間(ms): - + Period time (ms): 周期時間(ms): - + Use snd_pcm_pause function @@ -82,7 +82,7 @@ ALSA 插件設定 - + Use mmap access 使用內存對映 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 #include #include - #include "outputjack.h" +#include #include #include @@ -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: -- cgit v1.2.3-13-gbd6f