From c48cebd620d3f5330c104d85ac32f0aaffadaa14 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 18 Aug 2022 20:27:25 +0200 Subject: Replace everything with new "slxmix" (work in progress) --- .gitattributes | 18 - .github/ISSUE_TEMPLATE.md | 43 - .gitignore | 1 + .translation-update | 1 - AUTHORS | 9 - CHANGELOG | 556 ---------- CMakeLists.txt | 33 +- LICENSE | 339 ------ README.md | 56 - src/CMakeLists.txt | 66 +- src/PulseAudioQt/CMakeLists.txt | 49 + src/PulseAudioQt/Card | 1 + src/PulseAudioQt/CardPort | 1 + src/PulseAudioQt/Client | 1 + src/PulseAudioQt/Context | 1 + src/PulseAudioQt/Device | 1 + src/PulseAudioQt/IndexedPulseObject | 1 + src/PulseAudioQt/Messages.sh | 4 + src/PulseAudioQt/Models | 1 + src/PulseAudioQt/Module | 1 + src/PulseAudioQt/Port | 1 + src/PulseAudioQt/Profile | 1 + src/PulseAudioQt/PulseObject | 1 + src/PulseAudioQt/Server | 1 + src/PulseAudioQt/Sink | 1 + src/PulseAudioQt/SinkInput | 1 + src/PulseAudioQt/Source | 1 + src/PulseAudioQt/SourceOutput | 1 + src/PulseAudioQt/Stream | 1 + src/PulseAudioQt/StreamRestore | 1 + src/PulseAudioQt/VolumeObject | 1 + src/PulseAudioQt/card.cpp | 168 +++ src/PulseAudioQt/card.h | 59 + src/PulseAudioQt/card_p.h | 35 + src/PulseAudioQt/cardport.cpp | 26 + src/PulseAudioQt/cardport.h | 36 + src/PulseAudioQt/client.cpp | 37 + src/PulseAudioQt/client.h | 32 + src/PulseAudioQt/client_p.h | 26 + src/PulseAudioQt/context.cpp | 842 +++++++++++++++ src/PulseAudioQt/context.h | 238 +++++ src/PulseAudioQt/context_p.h | 85 ++ src/PulseAudioQt/debug.h | 1 + src/PulseAudioQt/device.cpp | 74 ++ src/PulseAudioQt/device.h | 119 +++ src/PulseAudioQt/device_p.h | 111 ++ src/PulseAudioQt/indexedpulseobject.cpp | 39 + src/PulseAudioQt/indexedpulseobject.h | 48 + src/PulseAudioQt/indexedpulseobject_p.h | 35 + src/PulseAudioQt/maps.cpp | 7 + src/PulseAudioQt/maps.h | 165 +++ src/PulseAudioQt/models.cpp | 396 +++++++ src/PulseAudioQt/models.h | 163 +++ src/PulseAudioQt/models_p.h | 33 + src/PulseAudioQt/module.cpp | 53 + src/PulseAudioQt/module.h | 39 + src/PulseAudioQt/module_p.h | 29 + src/PulseAudioQt/operation.cpp | 44 + src/PulseAudioQt/operation.h | 56 + src/PulseAudioQt/port.cpp | 35 + src/PulseAudioQt/port.h | 70 ++ src/PulseAudioQt/port_p.h | 47 + src/PulseAudioQt/profile.cpp | 56 + src/PulseAudioQt/profile.h | 81 ++ src/PulseAudioQt/profile_p.h | 59 + src/PulseAudioQt/pulseaudioqt_export.h | 192 ++++ src/PulseAudioQt/pulseobject.cpp | 86 ++ src/PulseAudioQt/pulseobject.h | 76 ++ src/PulseAudioQt/pulseobject_p.h | 57 + src/PulseAudioQt/server.cpp | 137 +++ src/PulseAudioQt/server.h | 57 + src/PulseAudioQt/server_p.h | 28 + src/PulseAudioQt/sink.cpp | 93 ++ src/PulseAudioQt/sink.h | 57 + src/PulseAudioQt/sink_p.h | 25 + src/PulseAudioQt/sinkinput.cpp | 66 ++ src/PulseAudioQt/sinkinput.h | 41 + src/PulseAudioQt/sinkinput_p.h | 25 + src/PulseAudioQt/source.cpp | 81 ++ src/PulseAudioQt/source.h | 44 + src/PulseAudioQt/source_p.h | 24 + src/PulseAudioQt/sourceoutput.cpp | 65 ++ src/PulseAudioQt/sourceoutput.h | 41 + src/PulseAudioQt/sourceoutput_p.h | 26 + src/PulseAudioQt/stream.cpp | 60 ++ src/PulseAudioQt/stream.h | 60 ++ src/PulseAudioQt/stream_p.h | 56 + src/PulseAudioQt/streamrestore.cpp | 214 ++++ src/PulseAudioQt/streamrestore.h | 74 ++ src/PulseAudioQt/streamrestore_p.h | 42 + src/PulseAudioQt/volumeobject.cpp | 70 ++ src/PulseAudioQt/volumeobject.h | 79 ++ src/PulseAudioQt/volumeobject_p.h | 67 ++ src/cardwidget.cc | 176 --- src/cardwidget.h | 58 - src/cardwidget.ui | 67 -- src/channel.cc | 169 --- src/channel.h | 62 -- src/channelwidget.ui | 42 - src/devicewidget.cc | 245 ----- src/devicewidget.h | 92 -- src/devicewidget.ui | 283 ----- src/elidinglabel.cc | 46 - src/elidinglabel.h | 38 - src/helper.cc | 75 -- src/helper.h | 61 -- src/icons/checkmark.svg | 21 + src/icons/mute-off.svg | 31 + src/icons/mute-on.svg | 49 + src/icons/none.svg | 17 + src/main.cpp | 306 ++++++ src/main.h | 16 + src/mainwindow.cc | 1124 -------------------- src/mainwindow.cpp | 73 ++ src/mainwindow.h | 109 +- src/mainwindow.ui | 358 +------ src/minimalstreamwidget.cc | 89 -- src/minimalstreamwidget.h | 56 - src/pavucontrol-qt.desktop.in | 7 - src/pavucontrol.cc | 869 --------------- src/pavucontrol.h | 69 -- src/resources.qrc | 8 + src/rolewidget.cc | 65 -- src/rolewidget.h | 40 - src/sinkinputwidget.cc | 125 --- src/sinkinputwidget.h | 77 -- src/sinkwidget.cc | 175 --- src/sinkwidget.h | 64 -- src/slxoutput.cpp | 82 ++ src/slxoutput.h | 33 + src/slxoutput.ui | 103 ++ src/sourceoutputwidget.cc | 136 --- src/sourceoutputwidget.h | 80 -- src/sourcewidget.cc | 87 -- src/sourcewidget.h | 45 - src/streamwidget.cc | 134 --- src/streamwidget.h | 68 -- src/streamwidget.ui | 115 -- src/translations/CMakeLists.txt | 3 - src/translations/pavucontrol-qt.desktop.yaml | 3 - src/translations/pavucontrol-qt.ts | 733 ------------- src/translations/pavucontrol-qt_arn.ts | 733 ------------- src/translations/pavucontrol-qt_as.ts | 733 ------------- src/translations/pavucontrol-qt_ast.ts | 733 ------------- src/translations/pavucontrol-qt_bg.desktop.yaml | 4 - src/translations/pavucontrol-qt_bg.ts | 739 ------------- src/translations/pavucontrol-qt_bn_IN.ts | 733 ------------- src/translations/pavucontrol-qt_ca.desktop.yaml | 3 - src/translations/pavucontrol-qt_ca.ts | 739 ------------- src/translations/pavucontrol-qt_cs.desktop.yaml | 3 - src/translations/pavucontrol-qt_cs.ts | 739 ------------- src/translations/pavucontrol-qt_cy.ts | 733 ------------- src/translations/pavucontrol-qt_da.desktop.yaml | 3 - src/translations/pavucontrol-qt_da.ts | 739 ------------- src/translations/pavucontrol-qt_de.ts | 738 ------------- src/translations/pavucontrol-qt_el.ts | 738 ------------- src/translations/pavucontrol-qt_es.desktop.yaml | 3 - src/translations/pavucontrol-qt_es.ts | 739 ------------- src/translations/pavucontrol-qt_et.desktop.yaml | 3 - src/translations/pavucontrol-qt_et.ts | 739 ------------- src/translations/pavucontrol-qt_fi.ts | 739 ------------- src/translations/pavucontrol-qt_fr.desktop.yaml | 3 - src/translations/pavucontrol-qt_fr.ts | 739 ------------- src/translations/pavucontrol-qt_gl.desktop.yaml | 3 - src/translations/pavucontrol-qt_gl.ts | 739 ------------- src/translations/pavucontrol-qt_gu.ts | 733 ------------- src/translations/pavucontrol-qt_he.desktop.yaml | 3 - src/translations/pavucontrol-qt_he.ts | 739 ------------- src/translations/pavucontrol-qt_hi.ts | 737 ------------- src/translations/pavucontrol-qt_hr.desktop.yaml | 3 - src/translations/pavucontrol-qt_hr.ts | 739 ------------- src/translations/pavucontrol-qt_hu.desktop.yaml | 3 - src/translations/pavucontrol-qt_hu.ts | 739 ------------- src/translations/pavucontrol-qt_id.ts | 739 ------------- src/translations/pavucontrol-qt_it.desktop.yaml | 3 - src/translations/pavucontrol-qt_it.ts | 734 ------------- src/translations/pavucontrol-qt_ja.desktop.yaml | 3 - src/translations/pavucontrol-qt_ja.ts | 738 ------------- src/translations/pavucontrol-qt_kn.ts | 733 ------------- src/translations/pavucontrol-qt_ko.desktop.yaml | 3 - src/translations/pavucontrol-qt_ko.ts | 739 ------------- src/translations/pavucontrol-qt_lt.desktop.yaml | 3 - src/translations/pavucontrol-qt_lt.ts | 740 ------------- src/translations/pavucontrol-qt_ml.ts | 733 ------------- src/translations/pavucontrol-qt_mr.ts | 733 ------------- src/translations/pavucontrol-qt_nb_NO.desktop.yaml | 3 - src/translations/pavucontrol-qt_nb_NO.ts | 739 ------------- src/translations/pavucontrol-qt_nl.desktop.yaml | 3 - src/translations/pavucontrol-qt_nl.ts | 736 ------------- src/translations/pavucontrol-qt_oc.desktop.yaml | 3 - src/translations/pavucontrol-qt_or.ts | 733 ------------- src/translations/pavucontrol-qt_pa.ts | 733 ------------- src/translations/pavucontrol-qt_pl.desktop.yaml | 3 - src/translations/pavucontrol-qt_pl.ts | 739 ------------- src/translations/pavucontrol-qt_pt.desktop.yaml | 3 - src/translations/pavucontrol-qt_pt.ts | 739 ------------- src/translations/pavucontrol-qt_pt_BR.ts | 739 ------------- src/translations/pavucontrol-qt_ro.desktop.yaml | 3 - src/translations/pavucontrol-qt_ro.ts | 740 ------------- src/translations/pavucontrol-qt_ru.desktop.yaml | 3 - src/translations/pavucontrol-qt_ru.ts | 740 ------------- src/translations/pavucontrol-qt_si.desktop.yaml | 3 - src/translations/pavucontrol-qt_si.ts | 733 ------------- src/translations/pavucontrol-qt_sk.desktop.yaml | 3 - src/translations/pavucontrol-qt_sk.ts | 736 ------------- src/translations/pavucontrol-qt_sr.ts | 733 ------------- src/translations/pavucontrol-qt_sr@latin.ts | 733 ------------- src/translations/pavucontrol-qt_sv.ts | 733 ------------- src/translations/pavucontrol-qt_ta.ts | 733 ------------- src/translations/pavucontrol-qt_te.ts | 733 ------------- src/translations/pavucontrol-qt_th.ts | 733 ------------- src/translations/pavucontrol-qt_tr.desktop.yaml | 3 - src/translations/pavucontrol-qt_tr.ts | 740 ------------- src/translations/pavucontrol-qt_uk.desktop.yaml | 3 - src/translations/pavucontrol-qt_uk.ts | 739 ------------- src/translations/pavucontrol-qt_vi.desktop.yaml | 3 - src/translations/pavucontrol-qt_zh_CN.desktop.yaml | 3 - src/translations/pavucontrol-qt_zh_CN.ts | 737 ------------- src/translations/pavucontrol-qt_zh_TW.ts | 739 ------------- 219 files changed, 6157 insertions(+), 44021 deletions(-) delete mode 100644 .gitattributes delete mode 100644 .github/ISSUE_TEMPLATE.md delete mode 100644 .translation-update delete mode 100644 AUTHORS delete mode 100644 CHANGELOG delete mode 100644 LICENSE delete mode 100644 README.md create mode 100644 src/PulseAudioQt/CMakeLists.txt create mode 100644 src/PulseAudioQt/Card create mode 100644 src/PulseAudioQt/CardPort create mode 100644 src/PulseAudioQt/Client create mode 100644 src/PulseAudioQt/Context create mode 100644 src/PulseAudioQt/Device create mode 100644 src/PulseAudioQt/IndexedPulseObject create mode 100644 src/PulseAudioQt/Messages.sh create mode 100644 src/PulseAudioQt/Models create mode 100644 src/PulseAudioQt/Module create mode 100644 src/PulseAudioQt/Port create mode 100644 src/PulseAudioQt/Profile create mode 100644 src/PulseAudioQt/PulseObject create mode 100644 src/PulseAudioQt/Server create mode 100644 src/PulseAudioQt/Sink create mode 100644 src/PulseAudioQt/SinkInput create mode 100644 src/PulseAudioQt/Source create mode 100644 src/PulseAudioQt/SourceOutput create mode 100644 src/PulseAudioQt/Stream create mode 100644 src/PulseAudioQt/StreamRestore create mode 100644 src/PulseAudioQt/VolumeObject create mode 100644 src/PulseAudioQt/card.cpp create mode 100644 src/PulseAudioQt/card.h create mode 100644 src/PulseAudioQt/card_p.h create mode 100644 src/PulseAudioQt/cardport.cpp create mode 100644 src/PulseAudioQt/cardport.h create mode 100644 src/PulseAudioQt/client.cpp create mode 100644 src/PulseAudioQt/client.h create mode 100644 src/PulseAudioQt/client_p.h create mode 100644 src/PulseAudioQt/context.cpp create mode 100644 src/PulseAudioQt/context.h create mode 100644 src/PulseAudioQt/context_p.h create mode 100644 src/PulseAudioQt/debug.h create mode 100644 src/PulseAudioQt/device.cpp create mode 100644 src/PulseAudioQt/device.h create mode 100644 src/PulseAudioQt/device_p.h create mode 100644 src/PulseAudioQt/indexedpulseobject.cpp create mode 100644 src/PulseAudioQt/indexedpulseobject.h create mode 100644 src/PulseAudioQt/indexedpulseobject_p.h create mode 100644 src/PulseAudioQt/maps.cpp create mode 100644 src/PulseAudioQt/maps.h create mode 100644 src/PulseAudioQt/models.cpp create mode 100644 src/PulseAudioQt/models.h create mode 100644 src/PulseAudioQt/models_p.h create mode 100644 src/PulseAudioQt/module.cpp create mode 100644 src/PulseAudioQt/module.h create mode 100644 src/PulseAudioQt/module_p.h create mode 100644 src/PulseAudioQt/operation.cpp create mode 100644 src/PulseAudioQt/operation.h create mode 100644 src/PulseAudioQt/port.cpp create mode 100644 src/PulseAudioQt/port.h create mode 100644 src/PulseAudioQt/port_p.h create mode 100644 src/PulseAudioQt/profile.cpp create mode 100644 src/PulseAudioQt/profile.h create mode 100644 src/PulseAudioQt/profile_p.h create mode 100644 src/PulseAudioQt/pulseaudioqt_export.h create mode 100644 src/PulseAudioQt/pulseobject.cpp create mode 100644 src/PulseAudioQt/pulseobject.h create mode 100644 src/PulseAudioQt/pulseobject_p.h create mode 100644 src/PulseAudioQt/server.cpp create mode 100644 src/PulseAudioQt/server.h create mode 100644 src/PulseAudioQt/server_p.h create mode 100644 src/PulseAudioQt/sink.cpp create mode 100644 src/PulseAudioQt/sink.h create mode 100644 src/PulseAudioQt/sink_p.h create mode 100644 src/PulseAudioQt/sinkinput.cpp create mode 100644 src/PulseAudioQt/sinkinput.h create mode 100644 src/PulseAudioQt/sinkinput_p.h create mode 100644 src/PulseAudioQt/source.cpp create mode 100644 src/PulseAudioQt/source.h create mode 100644 src/PulseAudioQt/source_p.h create mode 100644 src/PulseAudioQt/sourceoutput.cpp create mode 100644 src/PulseAudioQt/sourceoutput.h create mode 100644 src/PulseAudioQt/sourceoutput_p.h create mode 100644 src/PulseAudioQt/stream.cpp create mode 100644 src/PulseAudioQt/stream.h create mode 100644 src/PulseAudioQt/stream_p.h create mode 100644 src/PulseAudioQt/streamrestore.cpp create mode 100644 src/PulseAudioQt/streamrestore.h create mode 100644 src/PulseAudioQt/streamrestore_p.h create mode 100644 src/PulseAudioQt/volumeobject.cpp create mode 100644 src/PulseAudioQt/volumeobject.h create mode 100644 src/PulseAudioQt/volumeobject_p.h delete mode 100644 src/cardwidget.cc delete mode 100644 src/cardwidget.h delete mode 100644 src/cardwidget.ui delete mode 100644 src/channel.cc delete mode 100644 src/channel.h delete mode 100644 src/channelwidget.ui delete mode 100644 src/devicewidget.cc delete mode 100644 src/devicewidget.h delete mode 100644 src/devicewidget.ui delete mode 100644 src/elidinglabel.cc delete mode 100644 src/elidinglabel.h delete mode 100644 src/helper.cc delete mode 100644 src/helper.h create mode 100644 src/icons/checkmark.svg create mode 100644 src/icons/mute-off.svg create mode 100644 src/icons/mute-on.svg create mode 100644 src/icons/none.svg create mode 100644 src/main.cpp create mode 100644 src/main.h delete mode 100644 src/mainwindow.cc create mode 100644 src/mainwindow.cpp delete mode 100644 src/minimalstreamwidget.cc delete mode 100644 src/minimalstreamwidget.h delete mode 100644 src/pavucontrol-qt.desktop.in delete mode 100644 src/pavucontrol.cc delete mode 100644 src/pavucontrol.h create mode 100644 src/resources.qrc delete mode 100644 src/rolewidget.cc delete mode 100644 src/rolewidget.h delete mode 100644 src/sinkinputwidget.cc delete mode 100644 src/sinkinputwidget.h delete mode 100644 src/sinkwidget.cc delete mode 100644 src/sinkwidget.h create mode 100644 src/slxoutput.cpp create mode 100644 src/slxoutput.h create mode 100644 src/slxoutput.ui delete mode 100644 src/sourceoutputwidget.cc delete mode 100644 src/sourceoutputwidget.h delete mode 100644 src/sourcewidget.cc delete mode 100644 src/sourcewidget.h delete mode 100644 src/streamwidget.cc delete mode 100644 src/streamwidget.h delete mode 100644 src/streamwidget.ui delete mode 100644 src/translations/CMakeLists.txt delete mode 100644 src/translations/pavucontrol-qt.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt.ts delete mode 100644 src/translations/pavucontrol-qt_arn.ts delete mode 100644 src/translations/pavucontrol-qt_as.ts delete mode 100644 src/translations/pavucontrol-qt_ast.ts delete mode 100644 src/translations/pavucontrol-qt_bg.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_bg.ts delete mode 100644 src/translations/pavucontrol-qt_bn_IN.ts delete mode 100644 src/translations/pavucontrol-qt_ca.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_ca.ts delete mode 100644 src/translations/pavucontrol-qt_cs.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_cs.ts delete mode 100644 src/translations/pavucontrol-qt_cy.ts delete mode 100644 src/translations/pavucontrol-qt_da.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_da.ts delete mode 100644 src/translations/pavucontrol-qt_de.ts delete mode 100644 src/translations/pavucontrol-qt_el.ts delete mode 100644 src/translations/pavucontrol-qt_es.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_es.ts delete mode 100644 src/translations/pavucontrol-qt_et.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_et.ts delete mode 100644 src/translations/pavucontrol-qt_fi.ts delete mode 100644 src/translations/pavucontrol-qt_fr.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_fr.ts delete mode 100644 src/translations/pavucontrol-qt_gl.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_gl.ts delete mode 100644 src/translations/pavucontrol-qt_gu.ts delete mode 100644 src/translations/pavucontrol-qt_he.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_he.ts delete mode 100644 src/translations/pavucontrol-qt_hi.ts delete mode 100644 src/translations/pavucontrol-qt_hr.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_hr.ts delete mode 100644 src/translations/pavucontrol-qt_hu.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_hu.ts delete mode 100644 src/translations/pavucontrol-qt_id.ts delete mode 100644 src/translations/pavucontrol-qt_it.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_it.ts delete mode 100644 src/translations/pavucontrol-qt_ja.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_ja.ts delete mode 100644 src/translations/pavucontrol-qt_kn.ts delete mode 100644 src/translations/pavucontrol-qt_ko.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_ko.ts delete mode 100644 src/translations/pavucontrol-qt_lt.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_lt.ts delete mode 100644 src/translations/pavucontrol-qt_ml.ts delete mode 100644 src/translations/pavucontrol-qt_mr.ts delete mode 100644 src/translations/pavucontrol-qt_nb_NO.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_nb_NO.ts delete mode 100644 src/translations/pavucontrol-qt_nl.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_nl.ts delete mode 100644 src/translations/pavucontrol-qt_oc.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_or.ts delete mode 100644 src/translations/pavucontrol-qt_pa.ts delete mode 100644 src/translations/pavucontrol-qt_pl.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_pl.ts delete mode 100644 src/translations/pavucontrol-qt_pt.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_pt.ts delete mode 100644 src/translations/pavucontrol-qt_pt_BR.ts delete mode 100644 src/translations/pavucontrol-qt_ro.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_ro.ts delete mode 100644 src/translations/pavucontrol-qt_ru.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_ru.ts delete mode 100644 src/translations/pavucontrol-qt_si.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_si.ts delete mode 100644 src/translations/pavucontrol-qt_sk.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_sk.ts delete mode 100644 src/translations/pavucontrol-qt_sr.ts delete mode 100644 src/translations/pavucontrol-qt_sr@latin.ts delete mode 100644 src/translations/pavucontrol-qt_sv.ts delete mode 100644 src/translations/pavucontrol-qt_ta.ts delete mode 100644 src/translations/pavucontrol-qt_te.ts delete mode 100644 src/translations/pavucontrol-qt_th.ts delete mode 100644 src/translations/pavucontrol-qt_tr.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_tr.ts delete mode 100644 src/translations/pavucontrol-qt_uk.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_uk.ts delete mode 100644 src/translations/pavucontrol-qt_vi.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_zh_CN.desktop.yaml delete mode 100644 src/translations/pavucontrol-qt_zh_CN.ts delete mode 100644 src/translations/pavucontrol-qt_zh_TW.ts diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 75726e7..0000000 --- a/.gitattributes +++ /dev/null @@ -1,18 +0,0 @@ -# remove files from deployment using `git archive` - -# git files -.gitattributes export-ignore -.github export-ignore -.gitignore export-ignore - -# several files and directories we never want to export -# a little bit belt and braces as the most of these files -# should never ever be in the repository - -.*~ export-ignore -.kdev4 export-ignore -.translation-update export-ignore - -/build export-ignore -/temp export-ignore -/tmp export-ignore diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 9e10416..0000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - -##### Expected Behavior - - - -##### Current Behavior - - - - -##### Possible Solution - - - -##### Steps to Reproduce (for bugs) - - -1. -2. -3. -4. - -##### Context - - - - -##### System Information - - -* Distribution & Version: -* Kernel: -* Qt Version: -* libqtxdg Version: -* lxqt-build-tools Version: -* Package version: diff --git a/.gitignore b/.gitignore index c5b6a53..7263800 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +CMakeLists.txt.user build *~ .deps diff --git a/.translation-update b/.translation-update deleted file mode 100644 index f25285c..0000000 --- a/.translation-update +++ /dev/null @@ -1 +0,0 @@ -translations='./src' diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 05c542b..0000000 --- a/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -This is the Qt port of pavucontrol . - -The original authors of the gtk+ version of pavucontrol are: -* Copyright 2006-2009 Lennart Poettering -* Copyright 2009-2011 Colin Guthrie - -The Qt port pavucontrol-qt is derived from the gtk+ version. -It's done by LXQt developers: -* Copyright 2016 Hong Jen-Yee (PCMan) diff --git a/CHANGELOG b/CHANGELOG deleted file mode 100644 index d7d0180..0000000 --- a/CHANGELOG +++ /dev/null @@ -1,556 +0,0 @@ -pavucontrol-qt-0.17.0 / 2021-04-15 -================================== - * Removed the unused dbus dependency. - -pavucontrol-qt-0.16.0 / 2020-11-01 -================================== - * Safely iterate over card profile info array. - * Fall back to default icon when no candidate is found. - * Elide playback name label if needed - * Don't force a height on progressbars. - * Remove warnings about unused function parameters. - * Wrapped the text of connecting error label. - -pavucontrol-qt-0.15.0 / 2020-04-23 -================================== - * Bumped version to 0.15.0. - * Avoid char raw strings literals memory allocations. - * Don't use automatic string conversions. - * Removed (duplicated) string casts definitions. - -pavucontrol-qt-0.14.1 / 2019-02-25 -================================== - - * Bumped version to 0.14.1 - * Only translations was changed. - -pavucontrol-qt-0.14.0 / 2019-01-25 -================================== - - * Bumped version to 0.14.0 - * Added FreeBSD installation instructions - * Implementation fixed: - - Some code modernizations like range based loops, - auto declared iterators and use of nullptr - - Don't use automatic string conversions - - Remove unused Makefile.am - - Treat the 'off' card profile specifically - - Mainwindow: Don't use deprecated libpulse members - * Improved cmake scripting - - Set cmake_minimum_required to 3.1.0 - - Removed locale compile definitons - * Moved translations from lxqt-l10n back to pavucontrol-qt - - Removed obsolete translation fuctionality - - Added translation promo in README.md - * Translation updates - -pavucontrol-qt-0.4.0 / 2018-05-21 -================================= - - * Bumped minor version to 4 - * Spanish translation update - * Qt5.11 beta: xxxwidget: include QAction explicitely - * CMake: Prevent in-source builds - * build: Use pkg-config's *_LDFLAGS - * fix http -> https - * Fixed mentions of LXDE - * pavucontrol: Remove unique application constraint - * Add Simplified Chinese desktop entry - -pavucontrol-qt-0.3.0 / 2017-09-24 -================================= - - * Release 0.3.0: Update changelog - * Bump version to 0.3.0 - * correct spelling mistake - * Added Lithuanian .desktop file - * liblxqt make no sense here - * Copied issue template - * set Qt::AA_UseHighDpiPixmaps to true - * Added version to cli options - * Added default CMAKE_BUILD_TYPE and versioning - * added pl.desktop - * ui: Use "changes-prevent-symbolic" icon - * MainWindow: Remove old GTK remnants - * Add Catalan translation - * Channel: Add slider snapping to 100% - * Channel: Address compiler warnings - * Channel: Align slider controls correclty - * Channel: Add ticks to volume slider - * Channel: Use percentage for volume scale - * devicewidgte: Re-add device renaming - * MainWindow: Force using the size from previous run - * MainWindow: Add quit shortcut - * Added pavucontrol-qt_da.desktop - -pavucontrol-qt-0.2.0 / 2016-12-11 -================================= - - * Release 0.2.0: Update changelog - * Release 0.2.0: Update changelog - * Use QSettings for storing configuration - * Create pavucontrol-qt_pt.desktop - * Use the new lxqt-build-tools package - * - Add a simple single instance controller to avoid run multiple simultaneous applications - * Use same approach as avidemux - * Simply differentiate the namnig to avoid menu duplication - * CMakeLists: Remove XdgUserDirs requirement - * mainwindow: Set icon for eventRoleWidget - -pavucontrol-qt-0.1.0 / 2016-09-24 -================================= - - * Release 0.1.0: Add changelog - * devicewidget: Remove debug - * Address compiler warnings - * streamwidget: Fix specific termination text - * Re-add support for changing source output - * streamwidget: Re-add "Terminate" context menu - * Re-add support for changing sink input - * ui: Lock channels by default - * ui: Enable sink's advanced options only if digital - * ui: Condense device advanced settings - * ui: Align titles left - * ui: Use "changes-prevent" icon for "Lock channels.." - * ui: Don't stretch content horizontaly - * ui: Simplify peak bar - * channels: Align channel sliders - * Add README.md - * devicewidget: Set the PCM encoding always enabled - * Properly install pavucontrol-qt.desktop file. - * Prevent recursive signal handler invocation. * Replace some push buttons with tool buttons. - * Add authors information. - * Remove glibmm dependency. - * Fix translations. - * Replace GNU gettext with Qt tr() in all places. - * Add missing ui files to CMakeLists.txt - * Trivial fix for Timeout handlers. - * Porting to Qt 5 - Finish the basic UI. - * Make all source code compile with Qt5. - * Port DeviceWidget and ChannelWidget to Qt5. - * Add missing file. - * Fix broken combo box in CardWidget. Remove unused code. - * Port the sound card configuration page to Qt. - -start-qt / 2016-08-31 -===================== - - * Start working on a Qt5 port. - * mainwindow: force icons to have sane size - * Add checkbutton for disabling volume meters - * .gitignore: add compile - * mainwindow: Don't add a border on the outermost vbox - * build-sys: Add m4 file for AX_CXX_COMPILE_STDCXX_11 - * doc: Update link to git repository - * build-sys: Use C++11 for building - * Remove Encoding key from .desktop file - * i18n: improve one Italian string - * i18n: Some fixes for the Italian translation - * Add --version command line option - * build-sys: Depend on libpulse >= 5.0 - * mainwindow: unavailable profiles are marked as such in their description - * i18n: Updated Polish translation - * build-sys: Release pavucontrol 3.0 - * doc: Adapt the sed expression for cleaning up links - * build-sys: Don't dist m4/ChangeLog - * build-sys: Fix README building - * mainwindow: Remember device visibility selections - * devicewidget, streamwidget: Show only one volume slider when channels are locked - * mainwindow: Catch Gdk::PixbufError - * Handle IO errors in icon setting code - * Don't crash if pa_stream_peek returns NULL - * Do not instantiate cardwidget, devicewidget and rolewidget with a type of EventBox - * Reference the widget before returning it from ::create methods - * Add horizontal scrollbars automatically - * Add TRANSLATORS_README.txt - * Add a --maximize command line option - * pavucontrol: ellipsize labels to fix window resizing - * build-sys: Use autoreconf in bootstrap.sh - * sinkwidget: add support for AAC pass-through - * added back support for gtkmm-2.4 builds - * build-sys: Drop ChangeLog generation from git - * build-sys: Prepare for a 2.0 release - * sinkwidget: Move format selection options to 'Advanced' expander - * devicewidget: Move latency offset into an expander - * mainwindow: Fix iterator dereferencing style. - * mainwindow: Show the availability of the ports and profiles. - * mainwindow: Don't clear the "updating" flag in updateCard() too early. - * Enable Automake's silent-rules option. - * Add a few known peak-detect stream clients to a source-output blacklist - * devicewidget: Add a latency offset spinbutton - * sink/sourcewidget: Move the index and card_index to the devicewidget - * cardwidget: Add a port class - * bootstrap: Enable the pre-commit hook. - * gitignore: Add *.swp. - * Add --retry command line option - * Fix theme under gtk3 - * build-sys: Prepare 1.0 - * build-sys: Switch to the tar-ustar format (as per a lot of GNOME stuff for 3.2) and distribute .xz files. - * i18n: Add devicewidget to POTFILES.in - * source: Only autosuspend network sources - * build-sys: Prepare 0.99.2 - * Update device format stuff for (pre-release) API changes. - * Check if PA_SINK_SET_FORMATS is defined before using it - * Use sink flags to figure out if we can set formats - * Add UI to select the formats supported by the receiver attached to a digitial sink - * build-sys: Prepare 0.99.1 - * Fix strange vertical alignment of sinks/source/cards - * Fix GTK Warnings under GTK3 due to combo box sizes - * source-output: We will officially support source output volumes in 0.99 - * source-output: Don't set the channel map for the SO if we do not support SO volumes. - * sink: Oops. I didn't mean to comment this out in the previous commit. - * stream-volumes: Support source-output volume controls now available in PA. - * i18n: Fix markup error in de translation. - * Handle simple key events. - * Deal more gracefully with disconnections. - * Add support for gtkmm-3.0 and prefer it over gtkmm-2.* by default. - * Ensure the marker for base volume is set on all channels. - * volume: Don't bother setting the steps. - * volume: Support volumes up to 11. - * ui: Remove ellipsize attribute from some labels (causes ellipsis to be displayed rather than real text) - * ui: Resave glade file without any changes to tidy it up - * Drop the need to use libglademm - * Add DONT_INHIBIT_AUTO_SUSPEND flag to monitor streams - * source-outputs: Source outputs do not support volume control, so hide the mute and lock channels buttons - * main: Format string fixes - * main: Add a --tab command line argument to force a given tab to be displayed. - * mainwindow: Fix clearing out of clients - * mainwindow: Save/restore window size - * mainwindow: Compact iterator decls - * main: Cleanup labels after connection rework - * source-outputs: Fix a bug where the 'no streams' label is sometimes shown along with the actual widget. - * connection: Show a nice label when connecting to PA. - * main: Automatically reconnect to PA upon disconnection - * mainwindow: Add a method to remove all widgets (e.g. on disconnect) - * streamwidget: Fix a compile warning. - * Split out the creation of the PA context a little. - * glade: ellipsize user supplied text strings - * Allow for the sink input peak detect to survive across sink moves. - * Update for the latest incarnation of module-device-manager - * Use the correct update mode for device-restore database write - * Add support for the device-manager module. - * build-sys: prepare 0.9.10 - * add ja to LINGUAS - * run make update-po - * Sending translation for Hungarian - * volume: Set the scale properly for delta changes via mouse/keyboard. - * events: Hide output streams with a stream restore designator for the event widget. - * Sending translation for Czech - * Sending translation for Kannada - * Sending translation for Japanese - * Sending translation for French - * Sending translation for Brazilian Portuguese - * Sending translation for Hindi - * Sending translation for Slovak - * Require at least PulseAudio 0.9.16. - * Sending translation for Danish - * Sending translation for Portuguese - * Sending translation for Serbian (Latin) - * Sending translation for Serbian - * Sending translation for Finnish - * Sending translation for German - * Sending translation for Ukrainian - * build-sys: require at least gtkmn 2.16 - * Add missing source file to POTFILES.in. - * Sending translation for Catalan - * Sending translation for Polish - * Sending translation for Spanish - * Sending translation for Oriya - * Sending translation for Dutch - * Sending translation for po/ja.po - * Sending translation for Telugu - * Sending translation for Bengali (India) - * Sending translation for Hindi - * Sending translation for Marathi - * Sending translation for Tamil - * Sending translation for Malayalam - * Sending translation for Gujarati - * Sending translation for Malayalam - * Sending translation for Punjabi - * i18n: run make update-po - * i18n: drop ko.po since it does not include a single translated string - * Prepare 0.9.9 relase - * drop reference to beepDevice - * Sending translation for Tamil - * Sending translation for Finnish - * Sending translation for po/LINGUAS - * fix event sound generation for volume changes - * only assume that the minimal volume is silence for devices that can do dB volumes - * use fallback icon scheme for stream icons, too - * Sending translation for po/uk.po - * Sending translation for po/ko.po - * Sending translation for Swedish - * Sending translation for Hungarian - * glade: minor alignment fixes - * Restructure the class inheritance a bit. - * Rename event method to be more indicative of what it does. - * Rename a variable to make it more generic - * Add support for changing ports. - * Don't use a hyperlink to display the device, just use a regular button. - * Do not disable the default button when it's set. - * Hide the terminate button. - * More changes in the UI to try and make things neater. - * Create the event role widget early so that it's always top of the list. - * Change 'Default' to 'Use as fallback' - * Move the setBaseVolume()/setSteps() methods to devicewidget (problem found after rebasing) - * Include config.h in the cc file (after rebase) - * Add a tooltip - * Wire up all the new UI code. - * Wire up the default toggle button (replaces the old menu) - * Hook up the device combo box on change event - * Remove the 'Default [Out|In]put' option from the combo for now. - * Set the correct combo index for display purposes - * Record in a map the combobox indexes vs. the sink/source indexes - * Add setter/getter methods for sink/source indexes so we can update our combo boxes current item - * Remove the kill menu item now we have a dedicated button - * Wire up the terminate button - * Set the pack_start on the deviceCombo - * Set the mainwindow pointer via an init() method rather than directly via public member variable. - * Adapt to new UI - * Rebase the sink/source widgets on the device widget - * Create a devicewidget based on streamwidget. - * Glade UI changes. Code still needs to be updated - * update po/ - * make sure that two card profiles with the same priority don't collide with each other - * don't abort when icon is missing from the theme - * Fix my name. - * Sending translation for Punjabi - * Sending translation for po/hi.po - * Sending translation for Punjabi - * Sending translation for Punjabi - * Sending translation for Bengali (India) - * Sending translation for Malayalam - * Sending translation for Slovak - * Sending translation for po/sr@latin.po - * Sending translation for Serbian - * Sending translation for French - * Sending translation for French - * Sending translation for Portuguese - * Sending translation for Czech - * Sending translation for Assamese - * Sending translation for po/ru.po - * Sending translation for Italian - * Sending translation for Brazilian Portuguese - * Sending translation for French - * Sending translation for German - * Sending translation for Danish - * Sending translation for Dutch - * Sending translation for Polish - * Sending translation for Telugu - * Sending translation for Marathi - * Sending translation for Gujarati - * Sending translation for Oriya - * Sending translation for Kannada - * Sending translation for Spanish - * fix year - * update screenshot - * fix POTFILES.in - * update README - * bump version - * don't show failure msgbox twice - * reenable monitor streams - * sort LINGUAS - * add missing languages to LINGUAS - * run make update-po - * Sending translation for Portuguese - * Sending translation for Portuguese - * Sending translation for Polish - * Sending translation for Assamese - * don't show wait cursor forever if stream_restore extension is not available - * Sending translation for po/LINGUAS - * Sending translation for Portuguese - * Sending translation for po/bn_IN.po - * Sending translation for po/ta.po - * Sending translation for po/as.po - * Sending translation for po/te.po - * Sending translation for po/kn.po - * Sending translation for po/gu.po - * Sending translation for po/sr@latin.po - * Sending translation for Serbian - * Sending translation for Portuguese - * Sending translation for Serbian - * Sending translation for Finnish - * Sending translation for po/da.po - * Sending translation for Dutch - * Sending translation for po/mr.po - * Sending translation for Portuguese - * Sending translation for Portuguese - * Sending translation for po/pt.po - * Sending translation for po/or.po - * Sending translation for Slovak - * Sending translation for po/ml.po - * Sending translation for po/it.po - * Sending translation for Chinese (Simplified) - * Order the card profiles by their priority - * Silence a warning - * Sending translation for Hungarian - * configure steps for scales - * visualize base volume - * Updated catalan po - * Shuffle some headers around a bit so that some systems don't have build errors - * Use C style comments as per Lennart's fetish :p - * Move config.h inclusion to the .cc files - * Split mainwindow into it's own files. - * Split rolewidget into it's own files. - * Split sourceoutputwidget out into it's own files. - * Split sinkinputwidget into it's own files. - * Split sourcewidget into it's own files. - * Split sinkwidget into it's own files. - * Split cardwidget out into it's own files. - * Move common setup into a shared header - * Split out streamwidget into it's own files. - * Split channelwidget into separate files. Also separate out the definition of streamwidget into it's own header - * Include config.h in minimalstreamwidget.h - * Split the minimalstreamwidget into it's own file - * Updated Thai translation - * Adding Punjabi (pa) Language to LINGUAS - * updated Spanish translation - * Remove the minimalStreamWindow. It's no longer used - * Updated Polish translation - * use the server provided icons - * Initialise our dropdown at contruction and just repopulate it when the cardinfo callback is received - * various small glade updates - * fix version of libcanberra dependency, fixes PA bug #494 - * Fix the number of outstanding operations. - * Typo: spell configuration right - * Add a new widget for the card configuration and use it. - * Create a new 'Configuration' tab - * Silence some warnings - * Initial support for changing card profiles. - * run make update-po - * Add 'Mixer' categorization to .desktop file - * deal with non-initialized data from m-s-r - * Punjabi translation for Module: A S Alam - * Add fi (Finnish) to LINGUAS. - * Add Finnish (fi) translation by Timo Jyrinki. - * Added zh_CN to LINGUAS - * Add zh_CN.po - * Added sr and sr@latin to LINGUAS - * Initial Serbian Latin translation - * Initial Serbian translation - * Updated LINGUAS - * LINGUAS: Added cs. - * Added Czech translation. - * updated spanish translation - * Added tr to LINGUAS - * Added Turkish Translation - * remove debug output - * Added ca locale - * Add sk to LINGUAS - * First Slovak translation. - * Updated Greek translation - * Added catalan po - * Add pt_BR to LINGUAS - * Initial Brazilian Portuguese translation - * Add nl to LINGUAS - * Initial Dutch translation by Reinout van Schouwen - * Updated de translation with input from gnome-de (thanks Hendrik Richter). - * prepare release 0.9.7 - * initialize maximum buffer length to automatic value (uint32_t) -1 instead of smallest value 0 - * Updated de translation with input from gnome-de (thanks andre klapper). - * Added sv to LINGUAS. - * Added Swedish translation. - * Updated Polish translation - * Added el, fr, hu, pl to LINGUAS - * Initial German translation - * Added Hungarian translation - * Updated French translation - * Initial Polish translation - * Started Greek translation - * beep when changing volume - * Install README files in doc/html directories. - * Make use of common ZP_LYNX_DOC macro. - * Create m4 directory, and set it up. - * Bump autoconf requirement to 2.62 (latest released version). - * Remove gettext macro, the package uses intltool instead. - * improve german translation - * add basic german translation - * internationalize pavucontrol.cc - * hide .desktop file from git - * add i18n - * generate changelog from git history - * use system installed glade file - * update license headers for GPL 2.0+ - * update bootstrap.sh a bit - * add a special track for controlling event sound volume - * bump required version - * fix glade widget name case - * hide tarballs from git - * change 'git' tag in tarball name to 'svn' - * bump revision - * bump deps - * remove $Id$ - * add gitignore - * fix a typo spotted by Romain Tartière - * Make icons work - * show stream icons, don't show our own monitor streams, initialize client proplist properly - * add volume meter support to each sink/source/record stream - * more intelligent initial page selection - * Also point the minimalStreamWindow downward - * move no_xxx labels in the middle of the dialogs - * properly initialize source output type dropdown; show string for record streams properly - * switch to sink page by default if no streams are active - * unclutter UI, remove redundant hint bar - * show volume in decibel - * Remove the white header, drop all references to PulseAudio to become a more normal program - * move the lock/mute buttons to the same spot as the menu buttons - * Merge patch from sjoerd that adds a new panel for listing recording streams, and makes the menu more visible by adding a button for it - * prepare next pavucontrol release - * don't crash if server has no default sink/source set - * show radio buttons for the the sink menu items - * prepare next release - * add changelog to tarball - * make stream title selectable, Closes #140 in pa trac - * add option to kill a stream to popup menu - * add popup menu to sink/source view to choose default device - * use pretty channel names - * add a combobox to the streams page, to filter application streams - * Don't pass the button index to popup() for the GtkMenu to avoid strange GTK behaviour in newer versions. Identified by coling - * add fedora-snapshot target - * bump deps - * support muting sink inputs, avoid duplicate events - * fix button tooltips - * fix lock icon - * minor tweaks - * Fix license mess: change everything to GPL - * fix typo - * update docs for 0.9.5 - * bump requirements - * add lightbulb - * - add new option "All Except Monitor Sources" to sources option menu - show a nice hint that one can right click on a stream - * use the sink descripion instead of the name for the stream popup menu - * In times where the sink/source names are generated from HAL UDIs don't show the cryptic device name any more - * optimize redraw a little - * add popup menu to stream list, allowing "hot" moving of playback streams between sinks - * add focus target - * show an watch cursor while loading device data - * add combobox to show only a subset of sinks/sources, replacing the old monitor expander - * prepare release 0.9.3 - * bump version - * Make jhbuild happy by adding a file autgen.sh - * show client name only if we have it - * prepare 0.9.2 release - * include config.h properly - * s/polyp/pulse/ in README - * s/polyp/pulse/g - * update docs for 0.9.1 - * bump version number to 0.9.1 - * actually ship the .desktop file - * use gtk_widget_queue_redraw() to try to workaround an issues that the sources are not shown - * Add .desktop file. - * set icon for the main window - * use some icons from the icon spec - * minor updates - * prepare release 0.9.0 - * Show client name for playback streams - * change scale behaviour to be more resposive * make "Streams" page the default - * bump version number for polypaudio 0.9.0 - * bump for polypadio 0.8.1 - * make SIGPIPE warning disappear - * fix glade file path - * add screenshot for website - * build system updates - * add coumentation and license - * show proper message boxes in case of error instead of printing just to STDERR - * initial commit - * Create trunk directory diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c83719..0a4d476 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.10.0 FATAL_ERROR) # CMP0000: Call the cmake_minimum_required() command at the beginning of the top-level # CMakeLists.txt file even before calling the project() command. # The cmake_minimum_required(VERSION) command implicitly invokes the cmake_policy(VERSION) @@ -6,8 +6,6 @@ cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) # versions. project(pavucontrol-qt) -option(UPDATE_TRANSLATIONS "Update source translation translations/*.ts files" OFF) - list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(CMAKE_INCLUDE_CURRENT_DIR ON) @@ -18,31 +16,24 @@ set(CMAKE_AUTOUIC ON) include(GNUInstallDirs) # Minimum Versions -set(GLIB_MINIMUM_VERSION "2.50.0") -set(LXQTBT_MINIMUM_VERSION "0.4.0") set(QT_MINIMUM_VERSION "5.9.5") -find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED) -find_package(Qt5LinguistTools ${QT_MINIMUM_VERSION} REQUIRED) -find_package(lxqt-build-tools ${LXQTBT_MINIMUM_VERSION} REQUIRED) +find_package(PkgConfig REQUIRED) -find_package(GLIB ${GLIB_MINIMUM_VERSION} REQUIRED) +pkg_check_modules(LIBPULSE libpulse REQUIRED IMPORTED_TARGET) +pkg_check_modules(LIBPULSE_MAINLOOP libpulse-mainloop-glib REQUIRED IMPORTED_TARGET) -set(PAVUCONTROLQT_MAJOR_VERSION 0) -set(PAVUCONTROLQT_MINOR_VERSION 17) +set(PAVUCONTROLQT_MAJOR_VERSION 1) +set(PAVUCONTROLQT_MINOR_VERSION 0) set(PAVUCONTROLQT_PATCH_VERSION 0) set(PAVUCONTROLQT_VERSION ${PAVUCONTROLQT_MAJOR_VERSION}.${PAVUCONTROLQT_MINOR_VERSION}.${PAVUCONTROLQT_PATCH_VERSION}) add_definitions("-DPAVUCONTROLQT_VERSION=\"${PAVUCONTROLQT_VERSION}\"") -include(LXQtPreventInSourceBuilds) -include(LXQtCompilerSettings NO_POLICY_SCOPE) -include(LXQtTranslate) - -find_package(PkgConfig REQUIRED) -pkg_check_modules( - PULSE REQUIRED - libpulse>=5.0 - libpulse-mainloop-glib>=0.9.16 -) +#find_package(PkgConfig REQUIRED) +#pkg_check_modules( +# PULSE REQUIRED +# libpulse>=5.0 +# libpulse-mainloop-glib>=0.9.16 +#) add_subdirectory(src) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d511905..0000000 --- a/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/README.md b/README.md deleted file mode 100644 index 11e3337..0000000 --- a/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# pavucontrol-qt - -## Overview - -pavucontrol-qt is the Qt port of volume control [pavucontrol](https://freedesktop.org/software/pulseaudio/pavucontrol/) of sound server [PulseAudio](https://www.freedesktop.org/wiki/Software/PulseAudio/). - -As such it can be used to adjust all controls provided by PulseAudio as well as some additional settings. - -The software belongs to the LXQt project but its usage isn't limited to this desktop environment. - -## Installation - -### Compiling source code - -Runtime dependencies are qtbase and PulseAudio client library libpulse. -Additional build dependencies are CMake and [liblxqt](https://github.com/lxqt/liblxqt) as well as optionally Git to pull latest VCS checkouts. The localization files were outsourced to repository [lxqt-l10n](https://github.com/lxqt/lxqt-l10n) so the corresponding dependencies are needed, too. Please refer to this repository's `README.md` for further information. - -Code configuration is handled by CMake. CMake variable `CMAKE_INSTALL_PREFIX` has to be set to `/usr` on most operating systems. - -To build run `make`, to install `make install` which accepts variable `DESTDIR` as usual. - -### Binary packages - -On Arch Linux the package [pavucontrol-qt](https://www.archlinux.org/packages/community/x86_64/pavucontrol-qt/) can be used and [pavucontrol-qt-git](https://aur.archlinux.org/packages/pavucontrol-qt-git/) is to build current checkouts of branch `master`. - -On FreeBSD the binary package is available as [pavucontrol-qt](https://www.freshports.org/audio/pavucontrol-qt/) and can be installed with `pkg install pavucontrol-qt`. - -#### Debian - -Package `pavucontrol-qt` is available in the official repositories as of Debian buster. - -#### Fedora - -Package `pavucontrol-qt` is available in the official repositories as of Fedora 31. - -#### OpenSuse - -Package `pavucontrol-qt` is available in the official repositories as of openSUSE Leap:15.2 - - - - -## Usage - -In LXQt sessions the binary is placed in sub-menu "Sound & Video" of the panel's main menu. - -The usage itself should be self-explanatory. - - -## Translations - -Translations can be done in [LXQt-Weblate](https://translate.lxqt-project.org/projects/lxqt-configuration/pavucontrol-qt/). - - -Translation status - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e4effe..d7ff79a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,67 +1,43 @@ -include_directories( - ${PULSE_INCLUDE_DIRS} - ${GLIB_INCLUDE_DIRS} -) +#include_directories( +# ${PULSE_INCLUDE_DIRS} +# ${GLIB_INCLUDE_DIRS} +#) + +add_subdirectory(PulseAudioQt) + +find_package(Qt5Widgets ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5Core ${QT_MINIMUM_VERSION} REQUIRED) +#find_package(Qt5LinguistTools ${QT_MINIMUM_VERSION} REQUIRED) set(pavucontrol-qt_HDRS - pavucontrol.h + main.h mainwindow.h - cardwidget.h - channel.h - devicewidget.h - minimalstreamwidget.h - rolewidget.h - sinkinputwidget.h - sinkwidget.h - sourceoutputwidget.h - sourcewidget.h - streamwidget.h - elidinglabel.h - helper.h + slxoutput.h ) set(pavucontrol-qt_SRCS - pavucontrol.cc - mainwindow.cc - cardwidget.cc - channel.cc - devicewidget.cc - minimalstreamwidget.cc - rolewidget.cc - sinkinputwidget.cc - sinkwidget.cc - sourceoutputwidget.cc - sourcewidget.cc - streamwidget.cc - elidinglabel.cc - helper.cc + main.cpp + mainwindow.cpp + slxoutput.cpp ) set(pavucontrol-qt_UI - cardwidget.ui - devicewidget.ui mainwindow.ui - streamwidget.ui + slxoutput.ui ) -# Translations +qt5_add_resources(pavucontrol-qt_RCS resources.qrc) add_executable(pavucontrol-qt ${pavucontrol-qt_SRCS} - ${pavucontrol-qt_QM_FILES} - ${pavucontrol-qt_QM_LOADER} - ${DESKTOP_FILES} -) -set_property( - TARGET pavucontrol-qt APPEND - PROPERTY COMPILE_DEFINITIONS - PAVUCONTROL_QT_DATA_DIR="${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}" + ${pavucontrol-qt_RCS} ) +# ${PULSE_LDFLAGS} +# ${GLIB_LDFLAGS} target_link_libraries(pavucontrol-qt Qt5::Widgets - ${PULSE_LDFLAGS} - ${GLIB_LDFLAGS} + KF5PulseAudioQt ) install(TARGETS diff --git a/src/PulseAudioQt/CMakeLists.txt b/src/PulseAudioQt/CMakeLists.txt new file mode 100644 index 0000000..7578983 --- /dev/null +++ b/src/PulseAudioQt/CMakeLists.txt @@ -0,0 +1,49 @@ +add_library(KF5PulseAudioQt STATIC) + +project(PulseAudioQt) + +find_package(Qt5DBus ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5Core ${QT_MINIMUM_VERSION} REQUIRED) +find_package(Qt5Gui ${QT_MINIMUM_VERSION} REQUIRED) + +target_sources(KF5PulseAudioQt PRIVATE + card.cpp + cardport.cpp + client.cpp + context.cpp + device.cpp + maps.cpp + operation.cpp + port.cpp + profile.cpp + models.cpp + pulseobject.cpp + sink.cpp + sinkinput.cpp + source.cpp + sourceoutput.cpp + stream.cpp + volumeobject.cpp + server.cpp + streamrestore.cpp + module.cpp + indexedpulseobject.cpp +) + +target_link_libraries(KF5PulseAudioQt + PUBLIC + Qt5::Core + PRIVATE + Qt5::Gui + Qt5::DBus + PkgConfig::LIBPULSE + PkgConfig::LIBPULSE_MAINLOOP +) + +#target_include_directories(KF5PulseAudioQt INTERFACE "$" ) + +#set_target_properties(KF5PulseAudioQt PROPERTIES VERSION ${PULSEAUDIOQT_VERSION} +# SOVERSION ${PULSEAUDIOQT_SOVERSION} +# EXPORT_NAME PulseAudioQt +#) + diff --git a/src/PulseAudioQt/Card b/src/PulseAudioQt/Card new file mode 100644 index 0000000..c618865 --- /dev/null +++ b/src/PulseAudioQt/Card @@ -0,0 +1 @@ +#include "card.h" diff --git a/src/PulseAudioQt/CardPort b/src/PulseAudioQt/CardPort new file mode 100644 index 0000000..71e4307 --- /dev/null +++ b/src/PulseAudioQt/CardPort @@ -0,0 +1 @@ +#include "cardport.h" diff --git a/src/PulseAudioQt/Client b/src/PulseAudioQt/Client new file mode 100644 index 0000000..f679c0d --- /dev/null +++ b/src/PulseAudioQt/Client @@ -0,0 +1 @@ +#include "client.h" diff --git a/src/PulseAudioQt/Context b/src/PulseAudioQt/Context new file mode 100644 index 0000000..7e33fb6 --- /dev/null +++ b/src/PulseAudioQt/Context @@ -0,0 +1 @@ +#include "context.h" diff --git a/src/PulseAudioQt/Device b/src/PulseAudioQt/Device new file mode 100644 index 0000000..155c911 --- /dev/null +++ b/src/PulseAudioQt/Device @@ -0,0 +1 @@ +#include "device.h" diff --git a/src/PulseAudioQt/IndexedPulseObject b/src/PulseAudioQt/IndexedPulseObject new file mode 100644 index 0000000..491cb42 --- /dev/null +++ b/src/PulseAudioQt/IndexedPulseObject @@ -0,0 +1 @@ +#include "indexedpulseobject.h" diff --git a/src/PulseAudioQt/Messages.sh b/src/PulseAudioQt/Messages.sh new file mode 100644 index 0000000..fd6430e --- /dev/null +++ b/src/PulseAudioQt/Messages.sh @@ -0,0 +1,4 @@ +#! /usr/bin/env bash +$EXTRACTRC *.ui >> rc.cpp +$XGETTEXT `find . -name \*.qml -o -name \*.cpp` -o $podir/kcm_pulseaudio.pot +rm -f rc.cpp diff --git a/src/PulseAudioQt/Models b/src/PulseAudioQt/Models new file mode 100644 index 0000000..4925970 --- /dev/null +++ b/src/PulseAudioQt/Models @@ -0,0 +1 @@ +#include "models.h" diff --git a/src/PulseAudioQt/Module b/src/PulseAudioQt/Module new file mode 100644 index 0000000..0275ca9 --- /dev/null +++ b/src/PulseAudioQt/Module @@ -0,0 +1 @@ +#include "module.h" diff --git a/src/PulseAudioQt/Port b/src/PulseAudioQt/Port new file mode 100644 index 0000000..877e571 --- /dev/null +++ b/src/PulseAudioQt/Port @@ -0,0 +1 @@ +#include "port.h" diff --git a/src/PulseAudioQt/Profile b/src/PulseAudioQt/Profile new file mode 100644 index 0000000..5b20bae --- /dev/null +++ b/src/PulseAudioQt/Profile @@ -0,0 +1 @@ +#include "profile.h" diff --git a/src/PulseAudioQt/PulseObject b/src/PulseAudioQt/PulseObject new file mode 100644 index 0000000..4189e21 --- /dev/null +++ b/src/PulseAudioQt/PulseObject @@ -0,0 +1 @@ +#include "pulseobject.h" diff --git a/src/PulseAudioQt/Server b/src/PulseAudioQt/Server new file mode 100644 index 0000000..bce425e --- /dev/null +++ b/src/PulseAudioQt/Server @@ -0,0 +1 @@ +#include "server.h" diff --git a/src/PulseAudioQt/Sink b/src/PulseAudioQt/Sink new file mode 100644 index 0000000..9d8afe8 --- /dev/null +++ b/src/PulseAudioQt/Sink @@ -0,0 +1 @@ +#include "sink.h" diff --git a/src/PulseAudioQt/SinkInput b/src/PulseAudioQt/SinkInput new file mode 100644 index 0000000..c6f8760 --- /dev/null +++ b/src/PulseAudioQt/SinkInput @@ -0,0 +1 @@ +#include "sinkinput.h" diff --git a/src/PulseAudioQt/Source b/src/PulseAudioQt/Source new file mode 100644 index 0000000..a5c5313 --- /dev/null +++ b/src/PulseAudioQt/Source @@ -0,0 +1 @@ +#include "source.h" diff --git a/src/PulseAudioQt/SourceOutput b/src/PulseAudioQt/SourceOutput new file mode 100644 index 0000000..7a9e223 --- /dev/null +++ b/src/PulseAudioQt/SourceOutput @@ -0,0 +1 @@ +#include "sourceoutput.h" diff --git a/src/PulseAudioQt/Stream b/src/PulseAudioQt/Stream new file mode 100644 index 0000000..65e61e9 --- /dev/null +++ b/src/PulseAudioQt/Stream @@ -0,0 +1 @@ +#include "stream.h" diff --git a/src/PulseAudioQt/StreamRestore b/src/PulseAudioQt/StreamRestore new file mode 100644 index 0000000..f775c8c --- /dev/null +++ b/src/PulseAudioQt/StreamRestore @@ -0,0 +1 @@ +#include "streamrestore.h" diff --git a/src/PulseAudioQt/VolumeObject b/src/PulseAudioQt/VolumeObject new file mode 100644 index 0000000..2f0c160 --- /dev/null +++ b/src/PulseAudioQt/VolumeObject @@ -0,0 +1 @@ +#include "volumeobject.h" diff --git a/src/PulseAudioQt/card.cpp b/src/PulseAudioQt/card.cpp new file mode 100644 index 0000000..122ce33 --- /dev/null +++ b/src/PulseAudioQt/card.cpp @@ -0,0 +1,168 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "card.h" +#include "card_p.h" +#include "debug.h" + +#include "context.h" +#include "indexedpulseobject_p.h" +#include "port_p.h" +#include "profile_p.h" + +namespace PulseAudioQt +{ +Card::Card(QObject *parent) + : IndexedPulseObject(parent) + , d(new CardPrivate(this)) +{ + connect(Context::instance(), &Context::sinkAdded, this, &Card::sinksChanged); + connect(Context::instance(), &Context::sinkRemoved, this, &Card::sinksChanged); + + connect(Context::instance(), &Context::sourceAdded, this, &Card::sourcesChanged); + connect(Context::instance(), &Context::sourceRemoved, this, &Card::sourcesChanged); +} + +Card::~Card() +{ + delete d; +} + +CardPrivate::CardPrivate(Card *q) + : q(q) +{ +} + +CardPrivate::~CardPrivate() +{ +} + +void CardPrivate::update(const pa_card_info *info) +{ + q->IndexedPulseObject::d->updatePulseObject(info); + q->PulseObject::d->updateProperties(info); + m_description = q->PulseObject::d->m_properties.value(QLatin1String(PA_PROP_DEVICE_DESCRIPTION), QString()).toString(); + + QStringList newProfiles; + QStringList existingProfiles; + + for (const Profile *profile : qAsConst(m_profiles)) { + existingProfiles << profile->name(); + } + + for (auto **it = info->profiles2; it && *it != nullptr; ++it) { + const QString name = QString::fromUtf8((*it)->name); + newProfiles << name; + Profile *profile = nullptr; + if (existingProfiles.contains(name)) { + profile = m_profiles[existingProfiles.indexOf(name)]; + } else { + profile = new Profile(q); + m_profiles << profile; + } + profile->d->setInfo(*it); + } + + for (Profile *profile : qAsConst(m_profiles)) { + if (!newProfiles.contains(profile->name())) { + m_profiles.removeOne(profile); + delete profile; + } + } + + for (Profile *profile : qAsConst(m_profiles)) { + if (info->active_profile2->name == profile->name()) { + m_activeProfileIndex = m_profiles.indexOf(profile); + } + } + + Q_EMIT q->profilesChanged(); + Q_EMIT q->activeProfileIndexChanged(); + + QStringList newPorts; + QStringList existingPorts; + + for (const Port *port : qAsConst(m_ports)) { + existingPorts << port->name(); + } + for (auto **it = info->ports; it && *it != nullptr; ++it) { + const QString name = QString::fromUtf8((*it)->name); + newPorts << name; + CardPort *port = nullptr; + if (existingPorts.contains(name)) { + port = m_ports[existingPorts.indexOf(name)]; + } else { + port = new CardPort(q); + m_ports << port; + } + port->d->setInfo(*it); + } + + for (CardPort *port : qAsConst(m_ports)) { + if (!newPorts.contains(port->name())) { + m_ports.removeOne(port); + delete port; + } + } + + Q_EMIT q->portsChanged(); +} + +QString Card::description() const +{ + return d->m_description; +} + +QList Card::profiles() const +{ + return d->m_profiles; +} + +quint32 Card::activeProfileIndex() const +{ + return d->m_activeProfileIndex; +} + +void Card::setActiveProfileIndex(quint32 profileIndex) +{ + const Profile *profile = qobject_cast(profiles().at(profileIndex)); + Context::instance()->setCardProfile(index(), profile->name()); +} + +QList Card::ports() const +{ + return d->m_ports; +} + +QList Card::sinks() const +{ + QList ret; + + const auto allSinks = Context::instance()->sinks(); + for (Sink *sink : allSinks) { + if (sink->cardIndex() == IndexedPulseObject::d->m_index) { + ret << sink; + } + } + + return ret; +} + +QList Card::sources() const +{ + QList ret; + + const auto allSources = Context::instance()->sources(); + for (Source *source : allSources) { + if (source->cardIndex() == IndexedPulseObject::d->m_index) { + ret << source; + } + } + + return ret; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/card.h b/src/PulseAudioQt/card.h new file mode 100644 index 0000000..2618ac7 --- /dev/null +++ b/src/PulseAudioQt/card.h @@ -0,0 +1,59 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef CARD_H +#define CARD_H + +#include "cardport.h" +#include "indexedpulseobject.h" +#include "profile.h" +#include "sink.h" +#include "source.h" + +struct pa_card_info; + +namespace PulseAudioQt +{ +class CardPort; +class Profile; + +class PULSEAUDIOQT_EXPORT Card : public IndexedPulseObject +{ + Q_OBJECT + Q_PROPERTY(QList profiles READ profiles NOTIFY profilesChanged) + Q_PROPERTY(quint32 activeProfileIndex READ activeProfileIndex WRITE setActiveProfileIndex NOTIFY activeProfileIndexChanged) + Q_PROPERTY(QList ports READ ports NOTIFY portsChanged) + Q_PROPERTY(QList sinks READ sinks NOTIFY sinksChanged) + Q_PROPERTY(QList sources READ sources NOTIFY sourcesChanged) + +public: + ~Card(); + + QString description() const; + QList profiles() const; + quint32 activeProfileIndex() const; + void setActiveProfileIndex(quint32 profileIndex); + QList ports() const; + QList sinks() const; + QList sources() const; + +Q_SIGNALS: + void profilesChanged(); + void activeProfileIndexChanged(); + void portsChanged(); + void sinksChanged(); + void sourcesChanged(); + +private: + explicit Card(QObject *parent); + + class CardPrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // CARD_H diff --git a/src/PulseAudioQt/card_p.h b/src/PulseAudioQt/card_p.h new file mode 100644 index 0000000..890ba8f --- /dev/null +++ b/src/PulseAudioQt/card_p.h @@ -0,0 +1,35 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef CARD_P_H +#define CARD_P_H + +#include "card.h" +#include "cardport.h" +#include "profile.h" +#include +#include +#include + +namespace PulseAudioQt +{ +class CardPrivate +{ +public: + explicit CardPrivate(Card *q); + virtual ~CardPrivate(); + + Card *q; + + void update(const pa_card_info *info); + + QString m_description; + QList m_profiles; + quint32 m_activeProfileIndex; + QList m_ports; +}; +} + +#endif diff --git a/src/PulseAudioQt/cardport.cpp b/src/PulseAudioQt/cardport.cpp new file mode 100644 index 0000000..863e247 --- /dev/null +++ b/src/PulseAudioQt/cardport.cpp @@ -0,0 +1,26 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#include "cardport.h" +#include "port_p.h" + +namespace PulseAudioQt +{ +CardPort::CardPort(QObject *parent) + : Port(parent) +{ +} + +CardPort::~CardPort() +{ +} + +void CardPort::update(const pa_card_port_info *info) +{ + Port::d->setInfo(info); + PulseObject::d->updateProperties(info); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/cardport.h b/src/PulseAudioQt/cardport.h new file mode 100644 index 0000000..77d2c90 --- /dev/null +++ b/src/PulseAudioQt/cardport.h @@ -0,0 +1,36 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef CARDPORT_H +#define CARDPORT_H + +#include "port.h" + +#include +#include + +namespace PulseAudioQt +{ +/** + * A Port associated with a Card. + */ +class PULSEAUDIOQT_EXPORT CardPort : public Port +{ + Q_OBJECT + +public: + ~CardPort(); + + void update(const pa_card_port_info *info); + +private: + explicit CardPort(QObject *parent); + + friend class CardPrivate; +}; + +} // PulseAudioQt + +#endif diff --git a/src/PulseAudioQt/client.cpp b/src/PulseAudioQt/client.cpp new file mode 100644 index 0000000..427e34e --- /dev/null +++ b/src/PulseAudioQt/client.cpp @@ -0,0 +1,37 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "client.h" +#include "client_p.h" + +#include "debug.h" +#include "indexedpulseobject_p.h" + +namespace PulseAudioQt +{ +Client::Client(QObject *parent) + : IndexedPulseObject(parent) + , d(new ClientPrivate(this)) +{ +} + +ClientPrivate::ClientPrivate(Client *q) + : q(q) +{ +} + +Client::~Client() +{ + delete d; +} + +void ClientPrivate::update(const pa_client_info *info) +{ + q->IndexedPulseObject::d->updatePulseObject(info); + q->PulseObject::d->updateProperties(info); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/client.h b/src/PulseAudioQt/client.h new file mode 100644 index 0000000..dfa2cf3 --- /dev/null +++ b/src/PulseAudioQt/client.h @@ -0,0 +1,32 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef CLIENT_H +#define CLIENT_H + +#include "indexedpulseobject.h" +#include "pulseaudioqt_export.h" + +struct pa_client_info; + +namespace PulseAudioQt +{ +class PULSEAUDIOQT_EXPORT Client : public IndexedPulseObject +{ + Q_OBJECT +public: + ~Client(); + +private: + explicit Client(QObject *parent); + + class ClientPrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // CLIENT_H diff --git a/src/PulseAudioQt/client_p.h b/src/PulseAudioQt/client_p.h new file mode 100644 index 0000000..0f62616 --- /dev/null +++ b/src/PulseAudioQt/client_p.h @@ -0,0 +1,26 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef CLIENT_P_H +#define CLIENT_P_H + +#include "client.h" +#include + +namespace PulseAudioQt +{ +class ClientPrivate +{ +public: + ClientPrivate(Client *q); + + void update(const pa_client_info *info); + + Client *q; +}; + +} // PulseAudioQt + +#endif diff --git a/src/PulseAudioQt/context.cpp b/src/PulseAudioQt/context.cpp new file mode 100644 index 0000000..9967cea --- /dev/null +++ b/src/PulseAudioQt/context.cpp @@ -0,0 +1,842 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "context.h" +#include "server.h" + +#include "debug.h" +#include +#include +#include +#include +#include +#include + +#include + +#include "card.h" +#include "client.h" +#include "module.h" +#include "sink.h" +#include "sinkinput.h" +#include "source.h" +#include "sourceoutput.h" +#include "streamrestore.h" + +#include "context_p.h" +#include "server_p.h" +#include "streamrestore_p.h" + +namespace PulseAudioQt +{ +qint64 normalVolume() +{ + return PA_VOLUME_NORM; +} + +qint64 minimumVolume() +{ + return PA_VOLUME_MUTED; +} + +qint64 maximumVolume() +{ + return PA_VOLUME_MAX; +} + +qint64 maximumUIVolume() +{ + return PA_VOLUME_UI_MAX; +} + +QString ContextPrivate::s_applicationId; + +#ifndef K_DOXYGEN + +static bool isGoodState(int eol) +{ + if (eol < 0) { + // Error + return false; + } + + if (eol > 0) { + // End of callback chain + return false; + } + + return true; +} + +// -------------------------- + +static void sink_cb(pa_context *context, const pa_sink_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->sinkCallback(info); +} + +static void sink_input_callback(pa_context *context, const pa_sink_input_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + // pulsesink probe is used by gst-pulse only to query sink formats (not for playback) + if (qstrcmp(info->name, "pulsesink probe") == 0) { + return; + } + if (const char *id = pa_proplist_gets(info->proplist, "module-stream-restore.id")) { + if (qstrcmp(id, "sink-input-by-media-role:event") == 0) { + qDebug() << "Ignoring event role sink input."; + return; + } + } + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->sinkInputCallback(info); +} + +static void source_cb(pa_context *context, const pa_source_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + // FIXME: This forces excluding monitors + if (info->monitor_of_sink != PA_INVALID_INDEX) + return; + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->sourceCallback(info); +} + +static void source_output_cb(pa_context *context, const pa_source_output_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + // FIXME: This forces excluding these apps + if (const char *app = pa_proplist_gets(info->proplist, PA_PROP_APPLICATION_ID)) { + if (strcmp(app, "org.PulseAudio.pavucontrol") == 0 // + || strcmp(app, "org.gnome.VolumeControl") == 0 // + || strcmp(app, "org.kde.kmixd") == 0 // + || strcmp(app, "org.kde.plasma-pa") == 0) // + return; + } + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->sourceOutputCallback(info); +} + +static void client_cb(pa_context *context, const pa_client_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->clientCallback(info); +} + +static void card_cb(pa_context *context, const pa_card_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->cardCallback(info); +} + +static void module_info_list_cb(pa_context *context, const pa_module_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) + return; + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->moduleCallback(info); +} + +static void server_cb(pa_context *context, const pa_server_info *info, void *data) +{ + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->serverCallback(info); +} + +static void context_state_callback(pa_context *context, void *data) +{ + Q_ASSERT(data); + static_cast(data)->contextStateCallback(context); +} + +static void subscribe_cb(pa_context *context, pa_subscription_event_type_t type, uint32_t index, void *data) +{ + Q_ASSERT(data); + static_cast(data)->subscribeCallback(context, type, index); +} + +static void ext_stream_restore_read_cb(pa_context *context, const pa_ext_stream_restore_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) { + return; + } + Q_ASSERT(context); + Q_ASSERT(data); + static_cast(data)->streamRestoreCallback(info); +} + +static void ext_stream_restore_subscribe_cb(pa_context *context, void *data) +{ + Q_ASSERT(context); + Q_ASSERT(data); + if (!PAOperation(pa_ext_stream_restore_read(context, ext_stream_restore_read_cb, data))) { + qWarning() << "pa_ext_stream_restore_read() failed"; + } +} + +static void ext_stream_restore_change_sink_cb(pa_context *context, const pa_ext_stream_restore_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) { + return; + } + Q_ASSERT(context); + Q_ASSERT(data); + if (qstrncmp(info->name, "sink-input-by", 13) == 0) { + ContextPrivate *contextp = static_cast(data); + const QByteArray deviceData = contextp->m_newDefaultSink.toUtf8(); + pa_ext_stream_restore_info newinfo; + newinfo.name = info->name; + newinfo.channel_map = info->channel_map; + newinfo.volume = info->volume; + newinfo.mute = info->mute; + newinfo.device = deviceData.constData(); + contextp->streamRestoreWrite(&newinfo); + } +} + +static void ext_stream_restore_change_source_cb(pa_context *context, const pa_ext_stream_restore_info *info, int eol, void *data) +{ + if (!isGoodState(eol)) { + return; + } + Q_ASSERT(context); + Q_ASSERT(data); + if (qstrncmp(info->name, "source-output-by", 16) == 0) { + ContextPrivate *contextp = static_cast(data); + const QByteArray deviceData = contextp->m_newDefaultSource.toUtf8(); + pa_ext_stream_restore_info newinfo; + newinfo.name = info->name; + newinfo.channel_map = info->channel_map; + newinfo.volume = info->volume; + newinfo.mute = info->mute; + newinfo.device = deviceData.constData(); + contextp->streamRestoreWrite(&newinfo); + } +} + +#endif + +// -------------------------- + +Context::Context(QObject *parent) + : QObject(parent) + , d(new ContextPrivate(this)) +{ + d->m_server = new Server(this); + d->m_context = nullptr; + d->m_mainloop = nullptr; + d->m_references = 0; + + d->connectToDaemon(); + + QDBusServiceWatcher *watcher = + new QDBusServiceWatcher(QStringLiteral("org.pulseaudio.Server"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration, this); + connect(watcher, &QDBusServiceWatcher::serviceRegistered, this, [this] { + d->connectToDaemon(); + }); + + connect(&d->m_sinks, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT sinkAdded(static_cast(object)); + }); + connect(&d->m_sinks, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT sinkRemoved(static_cast(object)); + }); + + connect(&d->m_sinkInputs, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT sinkInputAdded(static_cast(object)); + }); + connect(&d->m_sinkInputs, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT sinkInputRemoved(static_cast(object)); + }); + + connect(&d->m_sources, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT sourceAdded(static_cast(object)); + }); + connect(&d->m_sources, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT sourceRemoved(static_cast(object)); + }); + + connect(&d->m_sourceOutputs, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT sourceOutputAdded(static_cast(object)); + }); + connect(&d->m_sourceOutputs, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT sourceOutputRemoved(static_cast(object)); + }); + + connect(&d->m_clients, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT clientAdded(static_cast(object)); + }); + connect(&d->m_clients, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT clientRemoved(static_cast(object)); + }); + + connect(&d->m_cards, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT cardAdded(static_cast(object)); + }); + connect(&d->m_cards, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT cardRemoved(static_cast(object)); + }); + + connect(&d->m_modules, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT moduleAdded(static_cast(object)); + }); + connect(&d->m_modules, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT moduleRemoved(static_cast(object)); + }); + + connect(&d->m_streamRestores, &MapBaseQObject::added, this, [this](int, QObject *object) { + Q_EMIT streamRestoreAdded(static_cast(object)); + }); + connect(&d->m_streamRestores, &MapBaseQObject::removed, this, [this](int, QObject *object) { + Q_EMIT streamRestoreRemoved(static_cast(object)); + }); +} + +ContextPrivate::ContextPrivate(Context *q) + : q(q) +{ +} + +Context::~Context() +{ + delete d; +} + +ContextPrivate::~ContextPrivate() +{ + if (m_context) { + pa_context_unref(m_context); + m_context = nullptr; + } + + if (m_mainloop) { + pa_glib_mainloop_free(m_mainloop); + m_mainloop = nullptr; + } + + reset(); +} + +Context *Context::instance() +{ + static std::unique_ptr context(new Context); + return context.get(); +} + +void ContextPrivate::subscribeCallback(pa_context *context, pa_subscription_event_type_t type, uint32_t index) +{ + Q_ASSERT(context == m_context); + + switch (type & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { + case PA_SUBSCRIPTION_EVENT_SINK: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_sinks.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_sink_info_by_index(context, index, sink_cb, this))) { + qWarning() << "pa_context_get_sink_info_by_index() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_SOURCE: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_sources.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_source_info_by_index(context, index, source_cb, this))) { + qWarning() << "pa_context_get_source_info_by_index() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_SINK_INPUT: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_sinkInputs.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_sink_input_info(context, index, sink_input_callback, this))) { + qWarning() << "pa_context_get_sink_input_info() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_sourceOutputs.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_source_output_info(context, index, source_output_cb, this))) { + qWarning() << "pa_context_get_sink_input_info() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_CLIENT: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_clients.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_client_info(context, index, client_cb, this))) { + qWarning() << "pa_context_get_client_info() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_CARD: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_cards.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_card_info_by_index(context, index, card_cb, this))) { + qWarning() << "pa_context_get_card_info_by_index() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_MODULE: + if ((type & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { + m_modules.removeEntry(index); + } else { + if (!PAOperation(pa_context_get_module_info_list(context, module_info_list_cb, this))) { + qWarning() << "pa_context_get_module_info_list() failed"; + return; + } + } + break; + + case PA_SUBSCRIPTION_EVENT_SERVER: + if (!PAOperation(pa_context_get_server_info(context, server_cb, this))) { + qWarning() << "pa_context_get_server_info() failed"; + return; + } + break; + } +} + +void ContextPrivate::contextStateCallback(pa_context *c) +{ + qDebug() << "state callback"; + pa_context_state_t state = pa_context_get_state(c); + if (state == PA_CONTEXT_READY) { + qDebug() << "ready"; + + // 1. Register for the stream changes (except during probe) + if (m_context == c) { + pa_context_set_subscribe_callback(c, subscribe_cb, this); + + if (!PAOperation( + pa_context_subscribe(c, + (pa_subscription_mask_t)(PA_SUBSCRIPTION_MASK_SINK | PA_SUBSCRIPTION_MASK_SOURCE | PA_SUBSCRIPTION_MASK_CLIENT + | PA_SUBSCRIPTION_MASK_SINK_INPUT | PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT + | PA_SUBSCRIPTION_MASK_CARD | PA_SUBSCRIPTION_MASK_MODULE | PA_SUBSCRIPTION_MASK_SERVER), + nullptr, + nullptr))) { + qWarning() << "pa_context_subscribe() failed"; + return; + } + } + + if (!PAOperation(pa_context_get_sink_info_list(c, sink_cb, this))) { + qWarning() << "pa_context_get_sink_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_source_info_list(c, source_cb, this))) { + qWarning() << "pa_context_get_source_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_client_info_list(c, client_cb, this))) { + qWarning() << "pa_context_client_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_card_info_list(c, card_cb, this))) { + qWarning() << "pa_context_get_card_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_sink_input_info_list(c, sink_input_callback, this))) { + qWarning() << "pa_context_get_sink_input_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_source_output_info_list(c, source_output_cb, this))) { + qWarning() << "pa_context_get_source_output_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_module_info_list(c, module_info_list_cb, this))) { + qWarning() << "pa_context_get_module_info_list() failed"; + return; + } + + if (!PAOperation(pa_context_get_server_info(c, server_cb, this))) { + qWarning() << "pa_context_get_server_info() failed"; + return; + } + + if (PAOperation(pa_ext_stream_restore_read(c, ext_stream_restore_read_cb, this))) { + pa_ext_stream_restore_set_subscribe_cb(c, ext_stream_restore_subscribe_cb, this); + PAOperation(pa_ext_stream_restore_subscribe(c, 1, nullptr, this)); + } else { + qWarning() << "Failed to initialize stream_restore extension"; + } + } else if (!PA_CONTEXT_IS_GOOD(state)) { + qWarning() << "context kaput"; + if (m_context) { + pa_context_unref(m_context); + m_context = nullptr; + } + reset(); + QTimer::singleShot(1000, q, [this] { + connectToDaemon(); + }); + } +} + +void ContextPrivate::sinkCallback(const pa_sink_info *info) +{ + // This parenting here is a bit weird + m_sinks.updateEntry(info, q); +} + +void ContextPrivate::sinkInputCallback(const pa_sink_input_info *info) +{ + m_sinkInputs.updateEntry(info, q); +} + +void ContextPrivate::sourceCallback(const pa_source_info *info) +{ + m_sources.updateEntry(info, q); +} + +void ContextPrivate::sourceOutputCallback(const pa_source_output_info *info) +{ + m_sourceOutputs.updateEntry(info, q); +} + +void ContextPrivate::clientCallback(const pa_client_info *info) +{ + m_clients.updateEntry(info, q); +} + +void ContextPrivate::cardCallback(const pa_card_info *info) +{ + m_cards.updateEntry(info, q); +} + +void ContextPrivate::moduleCallback(const pa_module_info *info) +{ + m_modules.updateEntry(info, q); +} + +void ContextPrivate::streamRestoreCallback(const pa_ext_stream_restore_info *info) +{ + if (qstrcmp(info->name, "sink-input-by-media-role:event") != 0) { + return; + } + + const int eventRoleIndex = 1; + StreamRestore *obj = qobject_cast(m_streamRestores.data().value(eventRoleIndex)); + + if (!obj) { + QVariantMap props; + props.insert(QStringLiteral("application.icon_name"), QStringLiteral("preferences-desktop-notification")); + obj = new StreamRestore(eventRoleIndex, props, q); + obj->d->update(info); + m_streamRestores.insert(obj); + } else { + obj->d->update(info); + } +} + +void ContextPrivate::serverCallback(const pa_server_info *info) +{ + m_server->d->update(info); +} + +void Context::setCardProfile(quint32 index, const QString &profile) +{ + if (!d->m_context) { + return; + } + qDebug() << index << profile; + if (!PAOperation(pa_context_set_card_profile_by_index(d->m_context, index, profile.toUtf8().constData(), nullptr, nullptr))) { + qWarning() << "pa_context_set_card_profile_by_index failed"; + return; + } +} + +void Context::setDefaultSink(const QString &name) +{ + if (!d->m_context) { + return; + } + const QByteArray nameData = name.toUtf8(); + if (!PAOperation(pa_context_set_default_sink(d->m_context, nameData.constData(), nullptr, nullptr))) { + qWarning() << "pa_context_set_default_sink failed"; + } + + // Change device for all entries in stream-restore database + d->m_newDefaultSink = name; + if (!PAOperation(pa_ext_stream_restore_read(d->m_context, ext_stream_restore_change_sink_cb, d))) { + qWarning() << "pa_ext_stream_restore_read failed"; + } +} + +void Context::setDefaultSource(const QString &name) +{ + if (!d->m_context) { + return; + } + const QByteArray nameData = name.toUtf8(); + if (!PAOperation(pa_context_set_default_source(d->m_context, nameData.constData(), nullptr, nullptr))) { + qWarning() << "pa_context_set_default_source failed"; + } + + // Change device for all entries in stream-restore database + d->m_newDefaultSource = name; + if (!PAOperation(pa_ext_stream_restore_read(d->m_context, ext_stream_restore_change_source_cb, d))) { + qWarning() << "pa_ext_stream_restore_read failed"; + } +} + +void ContextPrivate::streamRestoreWrite(const pa_ext_stream_restore_info *info) +{ + if (!m_context) { + return; + } + if (!PAOperation(pa_ext_stream_restore_write(m_context, PA_UPDATE_REPLACE, info, 1, true, nullptr, nullptr))) { + qWarning() << "pa_ext_stream_restore_write failed"; + } +} + +void ContextPrivate::connectToDaemon() +{ + if (m_context) { + return; + } + + // We require a glib event loop + if (!QByteArray(QAbstractEventDispatcher::instance()->metaObject()->className()).contains("Glib")) { + qWarning() << "Disabling PulseAudio integration for lack of GLib event loop"; + return; + } + + qDebug() << "Attempting connection to PulseAudio sound daemon"; + if (!m_mainloop) { + m_mainloop = pa_glib_mainloop_new(nullptr); + Q_ASSERT(m_mainloop); + } + + pa_mainloop_api *api = pa_glib_mainloop_get_api(m_mainloop); + Q_ASSERT(api); + + pa_proplist *proplist = pa_proplist_new(); + pa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, QGuiApplication::applicationDisplayName().toUtf8().constData()); + if (!s_applicationId.isEmpty()) { + pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, s_applicationId.toUtf8().constData()); + } else { + pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, QGuiApplication::desktopFileName().toUtf8().constData()); + } + pa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, QGuiApplication::windowIcon().name().toUtf8().constData()); + m_context = pa_context_new_with_proplist(api, nullptr, proplist); + pa_proplist_free(proplist); + Q_ASSERT(m_context); + + if (pa_context_connect(m_context, NULL, PA_CONTEXT_NOFAIL, nullptr) < 0) { + pa_context_unref(m_context); + pa_glib_mainloop_free(m_mainloop); + m_context = nullptr; + m_mainloop = nullptr; + return; + } + pa_context_set_state_callback(m_context, &context_state_callback, this); +} + +void ContextPrivate::reset() +{ + m_sinks.reset(); + m_sinkInputs.reset(); + m_sources.reset(); + m_sourceOutputs.reset(); + m_clients.reset(); + m_cards.reset(); + m_modules.reset(); + m_streamRestores.reset(); + m_server->reset(); +} + +bool Context::isValid() +{ + return d->m_context && d->m_mainloop; +} + +QVector Context::sinks() const +{ + return d->m_sinks.data(); +} + +QVector Context::sinkInputs() const +{ + return d->m_sinkInputs.data(); +} + +QVector Context::sources() const +{ + return d->m_sources.data(); +} + +QVector Context::sourceOutputs() const +{ + return d->m_sourceOutputs.data(); +} + +QVector Context::clients() const +{ + return d->m_clients.data(); +} + +QVector Context::cards() const +{ + return d->m_cards.data(); +} + +QVector Context::modules() const +{ + return d->m_modules.data(); +} + +QVector Context::streamRestores() const +{ + return d->m_streamRestores.data(); +} + +Server *Context::server() const +{ + return d->m_server; +} + +void ContextPrivate::setGenericVolume( + quint32 index, + int channel, + qint64 newVolume, + pa_cvolume cVolume, + const std::function &pa_set_volume) +{ + if (!m_context) { + return; + } + newVolume = qBound(0, newVolume, PA_VOLUME_MAX); + pa_cvolume newCVolume = cVolume; + if (channel == -1) { // -1 all channels + const qint64 diff = newVolume - pa_cvolume_max(&cVolume); + for (int i = 0; i < newCVolume.channels; ++i) { + newCVolume.values[i] = qBound(0, newCVolume.values[i] + diff, PA_VOLUME_MAX); + } + } else { + Q_ASSERT(newCVolume.channels > channel); + newCVolume.values[channel] = newVolume; + } + if (!pa_set_volume(m_context, index, &newCVolume, nullptr, nullptr)) { + qWarning() << "pa_set_volume failed"; + return; + } +} + +void ContextPrivate::setGenericMute(quint32 index, + bool mute, + const std::function &pa_set_mute) +{ + if (!m_context) { + return; + } + if (!PAOperation(pa_set_mute(m_context, index, mute, nullptr, nullptr))) { + qWarning() << "pa_set_mute failed"; + return; + } +} + +void ContextPrivate::setGenericPort(quint32 index, + const QString &portName, + const std::function &pa_set_port) +{ + if (!m_context) { + return; + } + if (!PAOperation(pa_set_port(m_context, index, portName.toUtf8().constData(), nullptr, nullptr))) { + qWarning() << "pa_set_port failed"; + return; + } +} + +void ContextPrivate::setGenericDeviceForStream( + quint32 streamIndex, + quint32 deviceIndex, + const std::function &pa_move_stream_to_device) +{ + if (!m_context) { + return; + } + if (!PAOperation(pa_move_stream_to_device(m_context, streamIndex, deviceIndex, nullptr, nullptr))) { + qWarning() << "pa_move_stream_to_device failed"; + return; + } +} + +void ContextPrivate::setGenericVolumes( + quint32 index, + QVector channelVolumes, + pa_cvolume cVolume, + const std::function &pa_set_volume) +{ + if (!m_context) { + return; + } + Q_ASSERT(channelVolumes.count() == cVolume.channels); + + pa_cvolume newCVolume = cVolume; + for (int i = 0; i < channelVolumes.count(); ++i) { + newCVolume.values[i] = qBound(0, channelVolumes.at(i), PA_VOLUME_MAX); + } + + if (!PAOperation(pa_set_volume(m_context, index, &newCVolume, nullptr, nullptr))) { + qWarning() << "pa_set_volume failed"; + return; + } +} + +void Context::setApplicationId(const QString &applicationId) +{ + ContextPrivate::s_applicationId = applicationId; +} + +pa_context *Context::context() const +{ + return d->m_context; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/context.h b/src/PulseAudioQt/context.h new file mode 100644 index 0000000..f9cc9cf --- /dev/null +++ b/src/PulseAudioQt/context.h @@ -0,0 +1,238 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef CONTEXT_H +#define CONTEXT_H + +#include "pulseaudioqt_export.h" +#include + +struct pa_context; + +/** + * The primary namespace of PulseAudioQt. + */ +namespace PulseAudioQt +{ +class Card; +class Client; +class Sink; +class SinkInput; +class Source; +class SourceOutput; +class StreamRestore; +class Module; +class Server; + +/** + * The normal volume (100%, 0 dB). Equivalent to PA_VOLUME_NORM. + */ +PULSEAUDIOQT_EXPORT qint64 normalVolume(); +/** + * The minimum volume (0%). Equivalent to PA_VOLUME_MUTED. + */ +PULSEAUDIOQT_EXPORT qint64 minimumVolume(); +/** + * The maximum volume PulseAudio can store. Equivalent to PA_VOLUME_MAX. + * \warning For UI elements like volume sliders use maximumUIVolume instead. + */ +PULSEAUDIOQT_EXPORT qint64 maximumVolume(); + +/** + * The maximum volume suitable to display in a UI. Equivalent to PA_VOLUME_UI_MAX. + */ +PULSEAUDIOQT_EXPORT qint64 maximumUIVolume(); + +class PULSEAUDIOQT_EXPORT Context : public QObject +{ + Q_OBJECT + +public: + ~Context(); + + static Context *instance(); + + /** + * Set the application id that is reported to PulseAudio. + * This needs to be called before accessing the context singleton the first time. + * If not set QGuiApplication::desktopFileName() is used. + */ + static void setApplicationId(const QString &applicationId); + + bool isValid(); + + /** + * Returns a list of all sinks. + * + * @return list of sinks + */ + QVector sinks() const; + + /** + * Returns a list of all sink inputs. + * + * @return list of sink inputs + */ + QVector sinkInputs() const; + + /** + * Returns a list of all sources. + * + * @return list of sources + */ + QVector sources() const; + + /** + * Returns a list of all source outputs. + * + * @return list of source outputs + */ + QVector sourceOutputs() const; + + /** + * Returns a list of all clients. + * + * @return list of clients + */ + QVector clients() const; + + /** + * Returns a list of all cards. + * + * @return list of cards + */ + QVector cards() const; + + /** + * Returns a list of all modules. + * + * @return list of modules + */ + QVector modules() const; + + /** + * Returns a list of all stream restores. + * + * @return list of stream restores + */ + QVector streamRestores() const; + + Server *server() const; + + /** + * Returns a pointer to the raw PulseAudio context. + */ + pa_context *context() const; + + void setCardProfile(quint32 index, const QString &profile); + void setDefaultSink(const QString &name); + void setDefaultSource(const QString &name); + +Q_SIGNALS: + /** + * Indicates that sink was added. + */ + void sinkAdded(PulseAudioQt::Sink *sink); + + /** + * Indicates that sink was removed. + */ + void sinkRemoved(PulseAudioQt::Sink *sink); + + /** + * Indicates that sink input was added. + */ + void sinkInputAdded(PulseAudioQt::SinkInput *sinkInput); + + /** + * Indicates that sink input was removed. + */ + void sinkInputRemoved(PulseAudioQt::SinkInput *sinkInput); + + /** + * Indicates that source was added. + */ + void sourceAdded(PulseAudioQt::Source *source); + + /** + * Indicates that source was removed. + */ + void sourceRemoved(PulseAudioQt::Source *source); + + /** + * Indicates that source output was added. + */ + void sourceOutputAdded(PulseAudioQt::SourceOutput *sourceOutput); + + /** + * Indicates that source output was removed. + */ + void sourceOutputRemoved(PulseAudioQt::SourceOutput *sourceOutput); + + /** + * Indicates that client was added. + */ + void clientAdded(PulseAudioQt::Client *client); + + /** + * Indicates that client was removed. + */ + void clientRemoved(PulseAudioQt::Client *client); + + /** + * Indicates that card was added. + */ + void cardAdded(PulseAudioQt::Card *card); + + /** + * Indicates that card was removed. + */ + void cardRemoved(PulseAudioQt::Card *card); + + /** + * Indicates that module was added. + */ + void moduleAdded(PulseAudioQt::Module *module); + + /** + * Indicates that module was removed. + */ + void moduleRemoved(PulseAudioQt::Module *module); + + /** + * Indicates that stream restore was added. + */ + void streamRestoreAdded(PulseAudioQt::StreamRestore *streamRestore); + + /** + * Indicates that streamRestore was removed. + */ + void streamRestoreRemoved(PulseAudioQt::StreamRestore *streamRestore); + +private: + explicit Context(QObject *parent = nullptr); + + class ContextPrivate *const d; + + friend class Sink; + friend class SinkInput; + friend class Source; + friend class SourceOutput; + friend class Stream; + friend class StreamRestorePrivate; + friend class Server; + friend class SinkModel; + friend class SinkInputModel; + friend class SourceModel; + friend class SourceOutputModel; + friend class StreamRestoreModel; + friend class CardModel; + friend class ModuleModel; +}; + +} // PulseAudioQt + +#endif // CONTEXT_H diff --git a/src/PulseAudioQt/context_p.h b/src/PulseAudioQt/context_p.h new file mode 100644 index 0000000..5b163a1 --- /dev/null +++ b/src/PulseAudioQt/context_p.h @@ -0,0 +1,85 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef CONTEXT_P_H +#define CONTEXT_P_H + +#include "maps.h" +#include "operation.h" +#include +#include +#include +#include +#include +#include + +namespace PulseAudioQt +{ +class Server; + +class ContextPrivate +{ +public: + explicit ContextPrivate(Context *q); + virtual ~ContextPrivate(); + + // Don't forget to add things to reset(). + SinkMap m_sinks; + SinkInputMap m_sinkInputs; + SourceMap m_sources; + SourceOutputMap m_sourceOutputs; + ClientMap m_clients; + CardMap m_cards; + ModuleMap m_modules; + StreamRestoreMap m_streamRestores; + Server *m_server; + + pa_context *m_context; + pa_glib_mainloop *m_mainloop; + + QString m_newDefaultSink; + QString m_newDefaultSource; + + int m_references; + + static QString s_applicationId; + + void subscribeCallback(pa_context *context, pa_subscription_event_type_t type, uint32_t index); + void contextStateCallback(pa_context *context); + void sinkCallback(const pa_sink_info *info); + void sinkInputCallback(const pa_sink_input_info *info); + void sourceCallback(const pa_source_info *info); + void sourceOutputCallback(const pa_source_output_info *info); + void clientCallback(const pa_client_info *info); + void cardCallback(const pa_card_info *info); + void moduleCallback(const pa_module_info *info); + void streamRestoreCallback(const pa_ext_stream_restore_info *info); + void serverCallback(const pa_server_info *info); + void streamRestoreWrite(const pa_ext_stream_restore_info *info); + void setGenericVolume(quint32 index, + int channel, + qint64 newVolume, + pa_cvolume cVolume, + const std::function &); + void setGenericMute(quint32 index, bool mute, const std::function &); + void setGenericPort(quint32 index, + const QString &portName, + const std::function &); + void setGenericDeviceForStream(quint32 streamIndex, + quint32 deviceIndex, + const std::function &); + void setGenericVolumes(quint32 index, + QVector channelVolumes, + pa_cvolume cVolume, + const std::function &); + + void reset(); + void connectToDaemon(); + + Context *q; +}; + +} +#endif diff --git a/src/PulseAudioQt/debug.h b/src/PulseAudioQt/debug.h new file mode 100644 index 0000000..d3e83bc --- /dev/null +++ b/src/PulseAudioQt/debug.h @@ -0,0 +1 @@ +#include diff --git a/src/PulseAudioQt/device.cpp b/src/PulseAudioQt/device.cpp new file mode 100644 index 0000000..c30df8b --- /dev/null +++ b/src/PulseAudioQt/device.cpp @@ -0,0 +1,74 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "device.h" +#include "device_p.h" + +namespace PulseAudioQt +{ +Device::State Device::state() const +{ + return d->m_state; +} + +QString Device::description() const +{ + return d->m_description; +} + +QString Device::formFactor() const +{ + return d->m_formFactor; +} + +quint32 Device::cardIndex() const +{ + return d->m_cardIndex; +} + +QList Device::ports() const +{ + return d->m_ports; +} + +quint32 Device::activePortIndex() const +{ + return d->m_activePortIndex; +} + +Device::Device(QObject *parent) + : VolumeObject(parent) + , d(new DevicePrivate(this)) +{ +} + +DevicePrivate::DevicePrivate(Device *q) + : q(q) +{ +} + +Device::State DevicePrivate::stateFromPaState(int value) const +{ + switch (value) { + case -1: // PA_X_INVALID_STATE + return Device::InvalidState; + case 0: // PA_X_RUNNING + return Device::RunningState; + case 1: // PA_X_IDLE + return Device::IdleState; + case 2: // PA_X_SUSPENDED + return Device::SuspendedState; + default: + return Device::UnknownState; + } +} + +Device::~Device() +{ + delete d; +} + +} // namespace PulseAudioQt diff --git a/src/PulseAudioQt/device.h b/src/PulseAudioQt/device.h new file mode 100644 index 0000000..450ae6b --- /dev/null +++ b/src/PulseAudioQt/device.h @@ -0,0 +1,119 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef PA_DEVICE_H +#define PA_DEVICE_H + +#include + +#include "port.h" +#include "volumeobject.h" + +namespace PulseAudioQt +{ +class Port; +class DevicePrivate; + +/** + * A PulseAudio device. Can be either a Sink or Source. + */ +class PULSEAUDIOQT_EXPORT Device : public VolumeObject +{ + Q_OBJECT + Q_PROPERTY(State state READ state NOTIFY stateChanged) + Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) + Q_PROPERTY(QString formFactor READ formFactor NOTIFY formFactorChanged) + Q_PROPERTY(quint32 cardIndex READ cardIndex NOTIFY cardIndexChanged) + Q_PROPERTY(QList ports READ ports NOTIFY portsChanged) + Q_PROPERTY(quint32 activePortIndex READ activePortIndex WRITE setActivePortIndex NOTIFY activePortIndexChanged) + Q_PROPERTY(bool default READ isDefault WRITE setDefault NOTIFY defaultChanged) + +public: + enum State { + /** This state is used when the server does not support sink/source state introspection. */ + InvalidState = 0, + /** Running, sink/source is playing/recording and used by at least one non-corked sink-input/source-output. */ + RunningState, + /** When idle, the sink/source is playing/recording but there is no non-corked sink-input/source-output attached to it. */ + IdleState, + /** When suspended, actual sink/source access can be closed, for instance. */ + SuspendedState, + UnknownState, + }; + Q_ENUM(State); + + ~Device(); + + /** + * The state of this device. + */ + State state() const; + + /** + * A human readable description of this device. + */ + QString description() const; + + /** + * The device's form factor. + * One of "internal", "speaker", "handset", "tv", "webcam", "microphone", "headset", "headphone", "hands-free", "car", "hifi", "computer", "portable". + * This is based on PA_PROP_DEVICE_FORM_FACTOR. + */ + QString formFactor() const; + + /** + * Index of the card that owns this device. + */ + quint32 cardIndex() const; + + /** + * The ports associated with this device. + */ + QList ports() const; + + /** + * The currently active port, by index. + */ + quint32 activePortIndex() const; + + /** + * Set the currently active port, by index. + */ + virtual void setActivePortIndex(quint32 port_index) = 0; + + /** + * Whether this is the default device. + */ + virtual bool isDefault() const = 0; + + /** + * Set whether this is the default device. + */ + virtual void setDefault(bool enable) = 0; + +Q_SIGNALS: + void stateChanged(); + void descriptionChanged(); + void formFactorChanged(); + void cardIndexChanged(); + void portsChanged(); + void activePortIndexChanged(); + void defaultChanged(); + +protected: + /** @private */ + explicit Device(QObject *parent); + /** @private */ + DevicePrivate *d; + +private: + friend class SinkPrivate; + friend class SourcePrivate; +}; + +} // PulseAudioQt + +#endif // DEVICE_H diff --git a/src/PulseAudioQt/device_p.h b/src/PulseAudioQt/device_p.h new file mode 100644 index 0000000..462862e --- /dev/null +++ b/src/PulseAudioQt/device_p.h @@ -0,0 +1,111 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef DEVICE_P_H +#define DEVICE_P_H + +#include + +#include +#include + +#include "device.h" +#include "port.h" +#include "port_p.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +class DevicePrivate +{ +public: + explicit DevicePrivate(Device *q); + + Device *q; + + QString m_description; + QString m_formFactor; + quint32 m_cardIndex = -1; + QList m_ports; + quint32 m_activePortIndex = -1; + Device::State m_state = Device::UnknownState; + + Device::State stateFromPaState(int value) const; + + template + void updateDevice(const PAInfo *info) + { + q->VolumeObject::d->updateVolumeObject(info); + + if (m_description != info->description) { + m_description = info->description; + Q_EMIT q->descriptionChanged(); + } + const char *form_factor = pa_proplist_gets(info->proplist, PA_PROP_DEVICE_FORM_FACTOR); + if (form_factor) { + QString formFactor = QString::fromUtf8(form_factor); + if (m_formFactor != formFactor) { + m_formFactor = formFactor; + Q_EMIT q->formFactorChanged(); + } + } + + m_cardIndex = info->card; + Q_EMIT q->cardIndexChanged(); + + QStringList newPorts; + QStringList existingPorts; + + // Build list of existing ports + for (const Port *port : qAsConst(m_ports)) { + existingPorts << port->name(); + } + + // Add new ports from the updated port list and re/set port info + for (auto **it = info->ports; it && *it != nullptr; ++it) { + const QString name = QString::fromUtf8((*it)->name); + newPorts << name; + + Port *port = nullptr; + + if (existingPorts.contains(name)) { + port = m_ports[existingPorts.indexOf(name)]; + } else { + port = new Port(q); + m_ports << port; + } + + port->d->setInfo(*it); + } + + // Remove ports that are not in the updated port list + for (Port *port : qAsConst(m_ports)) { + if (!newPorts.contains(port->name())) { + m_ports.removeOne(port); + delete port; + } + } + + // Set active port + for (Port *port : qAsConst(m_ports)) { + if (info->active_port->name == port->name()) { + m_activePortIndex = m_ports.indexOf(port); + } + } + + Q_EMIT q->portsChanged(); + Q_EMIT q->activePortIndexChanged(); + + Device::State infoState = stateFromPaState(info->state); + if (infoState != m_state) { + m_state = infoState; + Q_EMIT q->stateChanged(); + } + } +}; + +} // namespace PulseAudioQt + +#endif diff --git a/src/PulseAudioQt/indexedpulseobject.cpp b/src/PulseAudioQt/indexedpulseobject.cpp new file mode 100644 index 0000000..d8177b0 --- /dev/null +++ b/src/PulseAudioQt/indexedpulseobject.cpp @@ -0,0 +1,39 @@ +/* + SPDX-FileCopyrightText: 2021 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "indexedpulseobject.h" +#include "indexedpulseobject_p.h" + +#include "context.h" + +namespace PulseAudioQt +{ +IndexedPulseObject::IndexedPulseObject(QObject *parent) + : PulseObject(parent) + , d(new IndexedPulseObjectPrivate(this)) +{ +} + +IndexedPulseObject::~IndexedPulseObject() +{ + delete d; +} + +IndexedPulseObjectPrivate::IndexedPulseObjectPrivate(IndexedPulseObject *q) + : q(q) +{ +} + +IndexedPulseObjectPrivate::~IndexedPulseObjectPrivate() +{ +} + +quint32 IndexedPulseObject::index() const +{ + return d->m_index; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/indexedpulseobject.h b/src/PulseAudioQt/indexedpulseobject.h new file mode 100644 index 0000000..135afb9 --- /dev/null +++ b/src/PulseAudioQt/indexedpulseobject.h @@ -0,0 +1,48 @@ +/* + SPDX-FileCopyrightText: 2021 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef INDEXEDPULSEOBJECT_H +#define INDEXEDPULSEOBJECT_H + +#include + +#include "pulseaudioqt_export.h" +#include "pulseobject.h" + +namespace PulseAudioQt +{ +class PULSEAUDIOQT_EXPORT IndexedPulseObject : public PulseObject +{ + Q_OBJECT + Q_PROPERTY(quint32 index READ index CONSTANT) + +public: + ~IndexedPulseObject(); + + /** + * Index of this object. + */ + quint32 index() const; + +protected: + /** @private */ + explicit IndexedPulseObject(QObject *parent); + /** @private */ + class IndexedPulseObjectPrivate *const d; + +private: + // Ensure that we get properly parented. + IndexedPulseObject(); + friend class ClientPrivate; + friend class CardPrivate; + friend class ModulePrivate; + friend class VolumeObjectPrivate; + friend class ProfilePrivate; +}; + +} // PulseAudioQt + +#endif // INDEXEDPULSEOBJECT_H diff --git a/src/PulseAudioQt/indexedpulseobject_p.h b/src/PulseAudioQt/indexedpulseobject_p.h new file mode 100644 index 0000000..d37fae9 --- /dev/null +++ b/src/PulseAudioQt/indexedpulseobject_p.h @@ -0,0 +1,35 @@ +/* + SPDX-FileCopyrightText: 2021 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef INDEXEDPULSEOBJECT_P_H +#define INDEXEDPULSEOBJECT_P_H + +#include "debug.h" + +#include "pulseobject_p.h" + +#include + +namespace PulseAudioQt +{ +class IndexedPulseObjectPrivate +{ +public: + explicit IndexedPulseObjectPrivate(IndexedPulseObject *q); + virtual ~IndexedPulseObjectPrivate(); + + PulseObject *q; + quint32 m_index = 0; + + template + void updatePulseObject(PAInfo *info) + { + m_index = info->index; + + q->PulseObject::d->updatePulseObject(info); + } +}; +} +#endif diff --git a/src/PulseAudioQt/maps.cpp b/src/PulseAudioQt/maps.cpp new file mode 100644 index 0000000..186c56a --- /dev/null +++ b/src/PulseAudioQt/maps.cpp @@ -0,0 +1,7 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "maps.h" diff --git a/src/PulseAudioQt/maps.h b/src/PulseAudioQt/maps.h new file mode 100644 index 0000000..206c5cd --- /dev/null +++ b/src/PulseAudioQt/maps.h @@ -0,0 +1,165 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + SPDX-FileCopyrightText: 2018 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#pragma once + +#include +#include +#include +#include + +#include +#include + +#include "card_p.h" +#include "client_p.h" +#include "module_p.h" +#include "sink_p.h" +#include "sinkinput_p.h" +#include "source_p.h" +#include "sourceoutput_p.h" +#include "streamrestore_p.h" + +namespace PulseAudioQt +{ +// Used for typedefs. +class Card; +class Client; +class Sink; +class SinkInput; +class Source; +class SourceOutput; +class StreamRestore; +class Module; + +/** + * @see MapBase + * This class is nothing more than the QObject base since moc cannot handle + * templates. + */ +class MapBaseQObject : public QObject +{ + Q_OBJECT + +public: + virtual int count() const = 0; + virtual QObject *objectAt(int index) const = 0; + virtual int indexOfObject(QObject *object) const = 0; + +Q_SIGNALS: + void aboutToBeAdded(int index); + void added(int index, QObject *object); + void aboutToBeRemoved(int index); + void removed(int index, QObject *object); +}; + +/** + * Maps a specific index to a specific object pointer. + * This is used to give the unique arbitrary PulseAudio index of a PulseObject a + * serialized list index. Namely it enables us to translate a discrete list + * index to a pulse index to an object, and any permutation thereof. + */ +template +class MapBase : public MapBaseQObject +{ +public: + virtual ~MapBase() + { + } + + const QVector &data() const + { + return m_data; + } + + int count() const override + { + return m_data.count(); + } + + int indexOfObject(QObject *object) const override + { + return m_data.indexOf(static_cast(object)); + } + + QObject *objectAt(int index) const override + { + return m_data.at(index); + } + + void reset() + { + while (!m_hash.isEmpty()) { + removeEntry(m_data.at(m_data.count() - 1)->index()); + } + m_pendingRemovals.clear(); + } + + void insert(Type *object) + { + Q_ASSERT(!m_data.contains(object)); + + const int modelIndex = m_data.count(); + + Q_EMIT aboutToBeAdded(modelIndex); + m_data.append(object); + m_hash[object->index()] = object; + Q_EMIT added(modelIndex, object); + } + + // Context is passed in as parent because context needs to include the maps + // so we'd cause a circular dep if we were to try to use the instance here. + // Plus that's weird separation anyway. + void updateEntry(const PAInfo *info, QObject *parent) + { + Q_ASSERT(info); + + if (m_pendingRemovals.remove(info->index)) { + // Was already removed again. + return; + } + + auto *obj = m_hash.value(info->index); + if (!obj) { + obj = new Type(parent); + obj->d->update(info); + insert(obj); + } else { + obj->d->update(info); + } + } + + void removeEntry(quint32 index) + { + if (!m_hash.contains(index)) { + m_pendingRemovals.insert(index); + } else { + const int modelIndex = m_data.indexOf(m_hash.value(index)); + Q_EMIT aboutToBeRemoved(modelIndex); + m_data.removeAt(modelIndex); + auto object = m_hash.take(index); + Q_EMIT removed(modelIndex, object); + delete object; + } + } + +protected: + QVector m_data; + QHash m_hash; + QSet m_pendingRemovals; +}; + +typedef MapBase CardMap; +typedef MapBase ClientMap; +typedef MapBase SinkInputMap; +typedef MapBase SinkMap; +typedef MapBase SourceMap; +typedef MapBase SourceOutputMap; +typedef MapBase StreamRestoreMap; +typedef MapBase ModuleMap; + +} // PulseAudioQt diff --git a/src/PulseAudioQt/models.cpp b/src/PulseAudioQt/models.cpp new file mode 100644 index 0000000..9fc3f32 --- /dev/null +++ b/src/PulseAudioQt/models.cpp @@ -0,0 +1,396 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "models.h" + +#include "card.h" +#include "context.h" +#include "context_p.h" +#include "debug.h" +#include "maps.h" +#include "module.h" +#include "server.h" +#include "sink.h" +#include "sinkinput.h" +#include "source.h" +#include "sourceoutput.h" +#include "streamrestore.h" + +#include "models_p.h" +#include + +namespace PulseAudioQt +{ +AbstractModel::AbstractModel(const MapBaseQObject *map, QObject *parent) + : QAbstractListModel(parent) + , d(new AbstractModelPrivate(this, map)) +{ + connect(d->m_map, &MapBaseQObject::aboutToBeAdded, this, [this](int index) { + beginInsertRows(QModelIndex(), index, index); + }); + connect(d->m_map, &MapBaseQObject::added, this, [this](int index) { + onDataAdded(index); + endInsertRows(); + Q_EMIT countChanged(); + }); + connect(d->m_map, &MapBaseQObject::aboutToBeRemoved, this, [this](int index) { + beginRemoveRows(QModelIndex(), index, index); + }); + connect(d->m_map, &MapBaseQObject::removed, this, [this](int index) { + Q_UNUSED(index); + endRemoveRows(); + Q_EMIT countChanged(); + }); +} + +AbstractModel::~AbstractModel() +{ + delete d; +} + +AbstractModelPrivate::AbstractModelPrivate(AbstractModel *q, const MapBaseQObject *map) + : q(q) + , m_map(map) +{ +} + +AbstractModelPrivate::~AbstractModelPrivate() +{ +} + +QHash AbstractModel::roleNames() const +{ + if (!d->m_roles.empty()) { + qDebug() << "returning roles" << d->m_roles; + return d->m_roles; + } + Q_UNREACHABLE(); + return QHash(); +} + +int AbstractModel::rowCount(const QModelIndex &parent) const +{ + if (parent.isValid()) { + return 0; + } + return d->m_map->count(); +} + +QVariant AbstractModel::data(const QModelIndex &index, int role) const +{ + if (!hasIndex(index.row(), index.column())) { + return QVariant(); + } + QObject *data = d->m_map->objectAt(index.row()); + Q_ASSERT(data); + if (role == PulseObjectRole) { + return QVariant::fromValue(data); + } else if (role == Qt::DisplayRole) { + return static_cast(data)->name(); + } + int property = d->m_objectProperties.value(role, -1); + if (property == -1) { + return QVariant(); + } + return data->metaObject()->property(property).read(data); +} + +bool AbstractModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + if (!hasIndex(index.row(), index.column())) { + return false; + } + int propertyIndex = d->m_objectProperties.value(role, -1); + if (propertyIndex == -1) { + return false; + } + QObject *data = d->m_map->objectAt(index.row()); + auto property = data->metaObject()->property(propertyIndex); + return property.write(data, value); +} + +int AbstractModel::role(const QByteArray &roleName) const +{ + qDebug() << roleName << d->m_roles.key(roleName, -1); + return d->m_roles.key(roleName, -1); +} + +Context *AbstractModel::context() const +{ + return Context::instance(); +} + +void AbstractModel::initRoleNames(const QMetaObject &qobjectMetaObject) +{ + d->m_roles[PulseObjectRole] = QByteArrayLiteral("PulseObject"); + + QMetaEnum enumerator; + for (int i = 0; i < metaObject()->enumeratorCount(); ++i) { + if (metaObject()->enumerator(i).name() == QLatin1String("ItemRole")) { + enumerator = metaObject()->enumerator(i); + break; + } + } + + for (int i = 0; i < enumerator.keyCount(); ++i) { + // Clip the Role suffix and glue it in the hash. + const int roleLength = 4; + QByteArray key(enumerator.key(i)); + // Enum values must end in Role or the enum is crap + Q_ASSERT(key.right(roleLength) == QByteArrayLiteral("Role")); + key.chop(roleLength); + d->m_roles[enumerator.value(i)] = key; + } + + int maxEnumValue = -1; + for (auto it = d->m_roles.constBegin(); it != d->m_roles.constEnd(); ++it) { + if (it.key() > maxEnumValue) { + maxEnumValue = it.key(); + } + } + Q_ASSERT(maxEnumValue != -1); + auto mo = qobjectMetaObject; + for (int i = 0; i < mo.propertyCount(); ++i) { + QMetaProperty property = mo.property(i); + QString name(property.name()); + name.replace(0, 1, name.at(0).toUpper()); + d->m_roles[++maxEnumValue] = name.toLatin1(); + d->m_objectProperties.insert(maxEnumValue, i); + if (!property.hasNotifySignal()) { + continue; + } + d->m_signalIndexToProperties.insert(property.notifySignalIndex(), i); + } + qDebug() << d->m_roles; + + // Connect to property changes also with objects already in model + for (int i = 0; i < d->m_map->count(); ++i) { + onDataAdded(i); + } +} + +void AbstractModel::propertyChanged() +{ + if (!sender() || senderSignalIndex() == -1) { + return; + } + int propertyIndex = d->m_signalIndexToProperties.value(senderSignalIndex(), -1); + if (propertyIndex == -1) { + return; + } + int role = d->m_objectProperties.key(propertyIndex, -1); + if (role == -1) { + return; + } + int index = d->m_map->indexOfObject(sender()); + qDebug() << "PROPERTY CHANGED (" << index << ") :: " << role << roleNames().value(role); + Q_EMIT dataChanged(createIndex(index, 0), createIndex(index, 0), {role}); +} + +void AbstractModel::onDataAdded(int index) +{ + QObject *data = d->m_map->objectAt(index); + const QMetaObject *mo = data->metaObject(); + // We have all the data changed notify signals already stored + auto keys = d->m_signalIndexToProperties.keys(); + foreach (int index, keys) { + QMetaMethod meth = mo->method(index); + connect(data, meth, this, propertyChangedMetaMethod()); + } +} + +QMetaMethod AbstractModel::propertyChangedMetaMethod() const +{ + auto mo = metaObject(); + int methodIndex = mo->indexOfMethod("propertyChanged()"); + if (methodIndex == -1) { + return QMetaMethod(); + } + return mo->method(methodIndex); +} + +SinkModel::SinkModel(QObject *parent) + : AbstractModel(&context()->d->m_sinks, parent) + , d(new SinkModelPrivate(this)) +{ + initRoleNames(Sink::staticMetaObject); + + for (int i = 0; i < context()->d->m_sinks.count(); ++i) { + sinkAdded(i); + } + + connect(&context()->d->m_sinks, &MapBaseQObject::added, this, &SinkModel::sinkAdded); + connect(&context()->d->m_sinks, &MapBaseQObject::removed, this, &SinkModel::sinkRemoved); + + connect(context()->server(), &Server::defaultSinkChanged, this, [this]() { + updatePreferredSink(); + Q_EMIT defaultSinkChanged(); + }); +} + +SinkModel::~SinkModel() +{ + delete d; +} + +SinkModelPrivate::SinkModelPrivate(SinkModel *q) + : q(q) + , m_preferredSink(nullptr) +{ +} + +SinkModelPrivate::~SinkModelPrivate() +{ +} + +Sink *SinkModel::defaultSink() const +{ + return context()->server()->defaultSink(); +} + +Sink *SinkModel::preferredSink() const +{ + return d->m_preferredSink; +} + +QVariant SinkModel::data(const QModelIndex &index, int role) const +{ + if (role == SortByDefaultRole) { + // Workaround QTBUG-1548 + const QString pulseIndex = data(index, AbstractModel::role(QByteArrayLiteral("Index"))).toString(); + const QString defaultDevice = data(index, AbstractModel::role(QByteArrayLiteral("Default"))).toString(); + return defaultDevice + pulseIndex; + } + return AbstractModel::data(index, role); +} + +void SinkModel::sinkAdded(int index) +{ + Q_ASSERT(qobject_cast(context()->d->m_sinks.objectAt(index))); + Sink *sink = static_cast(context()->d->m_sinks.objectAt(index)); + connect(sink, &Sink::stateChanged, this, &SinkModel::updatePreferredSink); + + updatePreferredSink(); +} + +void SinkModel::sinkRemoved(int index) +{ + Q_UNUSED(index); + + updatePreferredSink(); +} + +void SinkModel::updatePreferredSink() +{ + Sink *sink = findPreferredSink(); + + if (sink != d->m_preferredSink) { + qDebug() << "Changing preferred sink to" << sink << (sink ? sink->name() : ""); + d->m_preferredSink = sink; + Q_EMIT preferredSinkChanged(); + } +} + +Sink *SinkModel::findPreferredSink() const +{ + const auto &sinks = context()->d->m_sinks; + + // Only one sink is the preferred one + if (sinks.count() == 1) { + return static_cast(sinks.objectAt(0)); + } + + auto lookForState = [&](Device::State state) { + Sink *ret = nullptr; + const auto data = sinks.data(); + for (Sink *sink : data) { + if (sink->state() != state) { + continue; + } + if (!ret) { + ret = sink; + } else if (sink == defaultSink()) { + ret = sink; + break; + } + } + return ret; + }; + + Sink *preferred = nullptr; + + // Look for playing sinks + prefer default sink + preferred = lookForState(Device::RunningState); + if (preferred) { + return preferred; + } + + // Look for idle sinks + prefer default sink + preferred = lookForState(Device::IdleState); + if (preferred) { + return preferred; + } + + // Fallback to default sink + return defaultSink(); +} + +SourceModel::SourceModel(QObject *parent) + : AbstractModel(&context()->d->m_sources, parent) +{ + initRoleNames(Source::staticMetaObject); + + connect(context()->server(), &Server::defaultSourceChanged, this, &SourceModel::defaultSourceChanged); +} + +Source *SourceModel::defaultSource() const +{ + return context()->server()->defaultSource(); +} + +QVariant SourceModel::data(const QModelIndex &index, int role) const +{ + if (role == SortByDefaultRole) { + // Workaround QTBUG-1548 + const QString pulseIndex = data(index, AbstractModel::role(QByteArrayLiteral("Index"))).toString(); + const QString defaultDevice = data(index, AbstractModel::role(QByteArrayLiteral("Default"))).toString(); + return defaultDevice + pulseIndex; + } + return AbstractModel::data(index, role); +} + +SinkInputModel::SinkInputModel(QObject *parent) + : AbstractModel(&context()->d->m_sinkInputs, parent) +{ + initRoleNames(SinkInput::staticMetaObject); +} + +SourceOutputModel::SourceOutputModel(QObject *parent) + : AbstractModel(&context()->d->m_sourceOutputs, parent) +{ + initRoleNames(SourceOutput::staticMetaObject); +} + +CardModel::CardModel(QObject *parent) + : AbstractModel(&context()->d->m_cards, parent) +{ + initRoleNames(Card::staticMetaObject); +} + +StreamRestoreModel::StreamRestoreModel(QObject *parent) + : AbstractModel(&context()->d->m_streamRestores, parent) +{ + initRoleNames(StreamRestore::staticMetaObject); +} + +ModuleModel::ModuleModel(QObject *parent) + : AbstractModel(&context()->d->m_modules, parent) +{ + initRoleNames(Module::staticMetaObject); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/models.h b/src/PulseAudioQt/models.h new file mode 100644 index 0000000..733e9e4 --- /dev/null +++ b/src/PulseAudioQt/models.h @@ -0,0 +1,163 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef PULSEAUDIO_H +#define PULSEAUDIO_H + +#include + +#include "pulseaudioqt_export.h" + +namespace PulseAudioQt +{ +class Context; +class MapBaseQObject; +class Sink; +class Source; +class AbstractModelPrivate; +class SinkModelPrivate; + +class PULSEAUDIOQT_EXPORT AbstractModel : public QAbstractListModel +{ + Q_OBJECT +public: + enum ItemRole { PulseObjectRole = Qt::UserRole + 1 }; + + Q_PROPERTY(int count READ rowCount NOTIFY countChanged) + + ~AbstractModel() override; + QHash roleNames() const final override; + int rowCount(const QModelIndex &parent = QModelIndex()) const final override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + bool setData(const QModelIndex &index, const QVariant &value, int role) final override; + + Q_INVOKABLE int role(const QByteArray &roleName) const; + +Q_SIGNALS: + void countChanged(); + +protected: + AbstractModel(const MapBaseQObject *map, QObject *parent); + void initRoleNames(const QMetaObject &qobjectMetaObject); + Context *context() const; + +private Q_SLOTS: + void propertyChanged(); + +private: + void onDataAdded(int index); + void onDataRemoved(int index); + QMetaMethod propertyChangedMetaMethod() const; + + AbstractModelPrivate *d; + + // Prevent leaf-classes from default constructing as we want to enforce + // them passing us a context or explicit nullptrs. + AbstractModel() + { + } +}; + +class PULSEAUDIOQT_EXPORT CardModel : public AbstractModel +{ + Q_OBJECT +public: + CardModel(QObject *parent = nullptr); + +private: + void *d; +}; + +class PULSEAUDIOQT_EXPORT SinkModel : public AbstractModel +{ + Q_OBJECT + Q_PROPERTY(PulseAudioQt::Sink *defaultSink READ defaultSink NOTIFY defaultSinkChanged) + Q_PROPERTY(PulseAudioQt::Sink *preferredSink READ preferredSink NOTIFY preferredSinkChanged) +public: + enum ItemRole { SortByDefaultRole = PulseObjectRole + 1 }; + Q_ENUM(ItemRole) + + SinkModel(QObject *parent = nullptr); + virtual ~SinkModel(); + Sink *defaultSink() const; + Sink *preferredSink() const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + +Q_SIGNALS: + void defaultSinkChanged(); + void preferredSinkChanged(); + +private: + void sinkAdded(int index); + void sinkRemoved(int index); + void updatePreferredSink(); + Sink *findPreferredSink() const; + SinkModelPrivate *d; +}; + +class PULSEAUDIOQT_EXPORT SinkInputModel : public AbstractModel +{ + Q_OBJECT +public: + SinkInputModel(QObject *parent = nullptr); + +private: + void *d; +}; + +class PULSEAUDIOQT_EXPORT SourceModel : public AbstractModel +{ + Q_OBJECT + Q_PROPERTY(PulseAudioQt::Source *defaultSource READ defaultSource NOTIFY defaultSourceChanged) +public: + enum ItemRole { SortByDefaultRole = PulseObjectRole + 1 }; + Q_ENUM(ItemRole) + + SourceModel(QObject *parent = nullptr); + Source *defaultSource() const; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + +Q_SIGNALS: + void defaultSourceChanged(); + +private: + void *d; +}; + +class PULSEAUDIOQT_EXPORT SourceOutputModel : public AbstractModel +{ + Q_OBJECT +public: + SourceOutputModel(QObject *parent = nullptr); + +private: + void *d; +}; + +class PULSEAUDIOQT_EXPORT StreamRestoreModel : public AbstractModel +{ + Q_OBJECT +public: + StreamRestoreModel(QObject *parent = nullptr); + +private: + void *d; +}; + +class PULSEAUDIOQT_EXPORT ModuleModel : public AbstractModel +{ + Q_OBJECT +public: + ModuleModel(QObject *parent = nullptr); + +private: + void *d; +}; + +} // PulseAudioQt + +#endif // PULSEAUDIO_H diff --git a/src/PulseAudioQt/models_p.h b/src/PulseAudioQt/models_p.h new file mode 100644 index 0000000..d0c9a50 --- /dev/null +++ b/src/PulseAudioQt/models_p.h @@ -0,0 +1,33 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#pragma once +#include "maps.h" + +namespace PulseAudioQt +{ +class AbstractModelPrivate +{ +public: + explicit AbstractModelPrivate(AbstractModel *q, const MapBaseQObject *map); + virtual ~AbstractModelPrivate(); + + AbstractModel *q; + const MapBaseQObject *m_map; + QHash m_roles; + QHash m_objectProperties; + QHash m_signalIndexToProperties; +}; + +class SinkModelPrivate +{ +public: + explicit SinkModelPrivate(SinkModel *q); + virtual ~SinkModelPrivate(); + + SinkModel *q; + Sink *m_preferredSink; +}; +} diff --git a/src/PulseAudioQt/module.cpp b/src/PulseAudioQt/module.cpp new file mode 100644 index 0000000..af80fb7 --- /dev/null +++ b/src/PulseAudioQt/module.cpp @@ -0,0 +1,53 @@ +/* + SPDX-FileCopyrightText: 2017 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "module.h" +#include "debug.h" +#include "module_p.h" + +#include "context.h" +#include "indexedpulseobject_p.h" + +namespace PulseAudioQt +{ +Module::Module(QObject *parent) + : IndexedPulseObject(parent) + , d(new ModulePrivate(this)) +{ +} + +ModulePrivate::ModulePrivate(Module *q) + : q(q) +{ +} + +ModulePrivate::~ModulePrivate() +{ +} + +void ModulePrivate::update(const pa_module_info *info) +{ + q->IndexedPulseObject::d->updatePulseObject(info); + q->PulseObject::d->updateProperties(info); + + const QString infoArgument = QString::fromUtf8(info->argument); + if (m_argument != infoArgument) { + m_argument = infoArgument; + Q_EMIT q->argumentChanged(); + } +} + +Module::~Module() +{ + delete d; +} + +QString Module::argument() const +{ + return d->m_argument; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/module.h b/src/PulseAudioQt/module.h new file mode 100644 index 0000000..ef778d0 --- /dev/null +++ b/src/PulseAudioQt/module.h @@ -0,0 +1,39 @@ +/* + SPDX-FileCopyrightText: 2017 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef MODULE_H +#define MODULE_H + +#include "indexedpulseobject.h" +#include "pulseaudioqt_export.h" + +struct pa_module_info; + +namespace PulseAudioQt +{ +class PULSEAUDIOQT_EXPORT Module : public IndexedPulseObject +{ + Q_OBJECT + Q_PROPERTY(QString argument READ argument NOTIFY argumentChanged) + +public: + ~Module(); + + QString argument() const; + +Q_SIGNALS: + void argumentChanged(); + +private: + explicit Module(QObject *parent); + + class ModulePrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // MODULE_H diff --git a/src/PulseAudioQt/module_p.h b/src/PulseAudioQt/module_p.h new file mode 100644 index 0000000..36b7dab --- /dev/null +++ b/src/PulseAudioQt/module_p.h @@ -0,0 +1,29 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef MODULE_P_H +#define MODULE_P_H + +#include "module.h" +#include + +namespace PulseAudioQt +{ +class ModulePrivate +{ +public: + explicit ModulePrivate(Module *q); + virtual ~ModulePrivate(); + + void update(const pa_module_info *info); + + Module *q; + + QString m_argument; +}; + +} // PulseAudioQt + +#endif diff --git a/src/PulseAudioQt/operation.cpp b/src/PulseAudioQt/operation.cpp new file mode 100644 index 0000000..d3a0212 --- /dev/null +++ b/src/PulseAudioQt/operation.cpp @@ -0,0 +1,44 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "operation.h" + +namespace PulseAudioQt +{ +PAOperation::PAOperation(pa_operation *operation) + : m_operation(operation) +{ +} + +PAOperation::~PAOperation() +{ + if (m_operation) { + pa_operation_unref(m_operation); + } +} + +PAOperation &PAOperation::operator=(pa_operation *operation) +{ + m_operation = operation; + return *this; +} + +bool PAOperation::operator!() +{ + return !m_operation; +} + +pa_operation *&PAOperation::operator*() +{ + return m_operation; +} + +PAOperation::operator bool() +{ + return m_operation; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/operation.h b/src/PulseAudioQt/operation.h new file mode 100644 index 0000000..771a09c --- /dev/null +++ b/src/PulseAudioQt/operation.h @@ -0,0 +1,56 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef OPERATION_H +#define OPERATION_H + +#include + +namespace PulseAudioQt +{ +/** + * @brief The PAOperation class + * Helps with management of pa_operations. pa_operations need to be expicitly + * unref'd after use, so this class is essentially a fancy scoping helper where + * destruction of an instance would also unref the held operation (if there is + * one). + */ +class PAOperation +{ +public: + /** + * @brief PAOperation + * @param operation operation to manage the scope of + */ + PAOperation(pa_operation *operation = nullptr); + ~PAOperation(); + + PAOperation &operator=(pa_operation *operation); + + /** + * @brief operator ! + * @return whether or not there is an operation pointer + */ + bool operator!(); + + /** + * @brief operator bool representing whether there is an operation + */ + operator bool(); + + /** + * @brief operator * + * @return pointer to internal pa_operation object + */ + pa_operation *&operator*(); + +private: + pa_operation *m_operation; +}; + +} // PulseAudioQt + +#endif // OPERATION_H diff --git a/src/PulseAudioQt/port.cpp b/src/PulseAudioQt/port.cpp new file mode 100644 index 0000000..0fff169 --- /dev/null +++ b/src/PulseAudioQt/port.cpp @@ -0,0 +1,35 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "port.h" +#include "port_p.h" +namespace PulseAudioQt +{ +Port::Port(QObject *parent) + : Profile(parent) + , d(new PortPrivate(this)) +{ +} + +Port::~Port() +{ +} + +PortPrivate::PortPrivate(Port *q) + : q(q) +{ +} + +PortPrivate::~PortPrivate() +{ +} + +Port::Type Port::type() const +{ + return d->m_type; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/port.h b/src/PulseAudioQt/port.h new file mode 100644 index 0000000..8473d96 --- /dev/null +++ b/src/PulseAudioQt/port.h @@ -0,0 +1,70 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef PORT_H +#define PORT_H + +#include "profile.h" +#include "pulseaudioqt_export.h" + +namespace PulseAudioQt +{ +/** + * A PulseAudio port. + */ +class PULSEAUDIOQT_EXPORT Port : public Profile +{ + Q_OBJECT + Q_PROPERTY(Type type READ type NOTIFY typeChanged) + +public: + ~Port(); + + enum Type { + Unknown, + AUX, + Speaker, + Headphones, + Line, + Mic, + Headset, + Handset, + Earpiece, + SPDIF, + HDMI, + TV, + Radio, + Video, + USB, + Bluetooth, + Portable, + Handsfree, + Car, + HiFi, + Phone, + Network, + Analog, + }; + Q_ENUM(Type) + + Type type() const; + +Q_SIGNALS: + void typeChanged(); + +protected: + /** @private */ + explicit Port(QObject *parent); + /** @private */ + class PortPrivate *const d; + + friend class DevicePrivate; + friend class CardPrivate; +}; + +} // PulseAudioQt + +#endif // PORT_H diff --git a/src/PulseAudioQt/port_p.h b/src/PulseAudioQt/port_p.h new file mode 100644 index 0000000..7501c66 --- /dev/null +++ b/src/PulseAudioQt/port_p.h @@ -0,0 +1,47 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#pragma once + +#include "port.h" +#include "profile_p.h" +#include + +namespace PulseAudioQt +{ +class PortPrivate +{ +public: + explicit PortPrivate(Port *q); + virtual ~PortPrivate(); + + Port *q; + Port::Type m_type = Port::Type::Unknown; + + template + void setInfo(const PAInfo *info) + { + Profile::Availability newAvailability; + switch (info->available) { + case PA_PORT_AVAILABLE_NO: + newAvailability = Profile::Unavailable; + break; + case PA_PORT_AVAILABLE_YES: + newAvailability = Profile::Available; + break; + default: + newAvailability = Profile::Unknown; + } + +#if PA_CHECK_VERSION(14, 0, 0) + m_type = static_cast(info->type); +#endif + Q_EMIT q->typeChanged(); + + q->Profile::d->setCommonInfo(info, newAvailability); + } +}; +} diff --git a/src/PulseAudioQt/profile.cpp b/src/PulseAudioQt/profile.cpp new file mode 100644 index 0000000..6fb496a --- /dev/null +++ b/src/PulseAudioQt/profile.cpp @@ -0,0 +1,56 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "profile.h" +#include "profile_p.h" + +namespace PulseAudioQt +{ +Profile::Profile(QObject *parent) + : PulseObject(parent) + , d(new ProfilePrivate(this)) +{ +} + +Profile::~Profile() +{ +} + +ProfilePrivate::ProfilePrivate(Profile *q) + : q(q) +{ +} + +ProfilePrivate::~ProfilePrivate() +{ +} + +QString Profile::description() const +{ + return d->m_description; +} + +quint32 Profile::priority() const +{ + return d->m_priority; +} + +Profile::Availability Profile::availability() const +{ + return d->m_availability; +} + +quint32 Profile::sources() const +{ + return d->m_sources; +} + +quint32 Profile::sinks() const +{ + return d->m_sinks; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/profile.h b/src/PulseAudioQt/profile.h new file mode 100644 index 0000000..79fe26f --- /dev/null +++ b/src/PulseAudioQt/profile.h @@ -0,0 +1,81 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef PROFILE_H +#define PROFILE_H + +#include "pulseaudioqt_export.h" +#include "pulseobject.h" +#include +#include + +namespace PulseAudioQt +{ +/** + * A PulseAudio profile. + */ +class PULSEAUDIOQT_EXPORT Profile : public PulseObject +{ + Q_OBJECT + Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) + Q_PROPERTY(quint32 priority READ priority NOTIFY priorityChanged) + Q_PROPERTY(Availability availability READ availability NOTIFY availabilityChanged) + +public: + enum Availability { Unknown, Available, Unavailable }; + Q_ENUM(Availability) + + ~Profile(); + + /** + * A human readable description. + */ + QString description() const; + + /** + * This object's priority. A higher number means higher priority. + */ + quint32 priority() const; + + /** + * Whether this object is available. + */ + Availability availability() const; + + quint32 sources() const; + + quint32 sinks() const; + +Q_SIGNALS: + /** + * Emitted when the description changed. + */ + void descriptionChanged(); + + /** + * Emitted when the priority changed. + */ + void priorityChanged(); + + /** + * Emitted when the availability changed. + */ + void availabilityChanged(); + +protected: + /** @private */ + explicit Profile(QObject *parent); + /** @private */ + class ProfilePrivate *const d; + + friend class Device; + friend class CardPrivate; + friend class PortPrivate; +}; + +} // PulseAudioQt + +#endif // PROFILE_H diff --git a/src/PulseAudioQt/profile_p.h b/src/PulseAudioQt/profile_p.h new file mode 100644 index 0000000..7fa1f9d --- /dev/null +++ b/src/PulseAudioQt/profile_p.h @@ -0,0 +1,59 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#pragma once + +#include "profile.h" +#include "pulseobject_p.h" + +namespace PulseAudioQt +{ +class ProfilePrivate +{ +public: + explicit ProfilePrivate(Profile *q); + virtual ~ProfilePrivate(); + + Profile *q; + + QString m_description; + quint32 m_priority = 0; + quint32 m_sources = 0; + quint32 m_sinks = 0; + Profile::Availability m_availability = Profile::Unknown; + + template + void setInfo(const PAInfo *info) + { + setCommonInfo(info, info->available ? Profile::Available : Profile::Unavailable); + m_sources = info->n_sources; + m_sinks = info->n_sinks; + } + + template + void setCommonInfo(const PAInfo *info, Profile::Availability newAvailability) + { + if (info->description) { + QString infoDescription = QString::fromUtf8(info->description); + if (m_description != infoDescription) { + m_description = infoDescription; + Q_EMIT q->descriptionChanged(); + } + } + if (m_priority != info->priority) { + m_priority = info->priority; + Q_EMIT q->priorityChanged(); + } + + if (m_availability != newAvailability) { + m_availability = newAvailability; + Q_EMIT q->availabilityChanged(); + } + + q->PulseObject::d->updatePulseObject(info); + } +}; +} diff --git a/src/PulseAudioQt/pulseaudioqt_export.h b/src/PulseAudioQt/pulseaudioqt_export.h new file mode 100644 index 0000000..53a6a24 --- /dev/null +++ b/src/PulseAudioQt/pulseaudioqt_export.h @@ -0,0 +1,192 @@ + +#ifndef PULSEAUDIOQT_EXPORT_H +#define PULSEAUDIOQT_EXPORT_H + +#ifdef PULSEAUDIOQT_STATIC_DEFINE +# define PULSEAUDIOQT_EXPORT +# define PULSEAUDIOQT_NO_EXPORT +#else +# ifndef PULSEAUDIOQT_EXPORT +# ifdef KF5PulseAudioQt_EXPORTS + /* We are building this library */ +# define PULSEAUDIOQT_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define PULSEAUDIOQT_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef PULSEAUDIOQT_NO_EXPORT +# define PULSEAUDIOQT_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef PULSEAUDIOQT_DECL_DEPRECATED +# define PULSEAUDIOQT_DECL_DEPRECATED __attribute__ ((__deprecated__)) +#endif + +#ifndef PULSEAUDIOQT_DECL_DEPRECATED_EXPORT +# define PULSEAUDIOQT_DECL_DEPRECATED_EXPORT PULSEAUDIOQT_EXPORT PULSEAUDIOQT_DECL_DEPRECATED +#endif + +#ifndef PULSEAUDIOQT_DECL_DEPRECATED_NO_EXPORT +# define PULSEAUDIOQT_DECL_DEPRECATED_NO_EXPORT PULSEAUDIOQT_NO_EXPORT PULSEAUDIOQT_DECL_DEPRECATED +#endif + +#if 0 /* DEFINE_NO_DEPRECATED */ +# ifndef PULSEAUDIOQT_NO_DEPRECATED +# define PULSEAUDIOQT_NO_DEPRECATED +# endif +#endif + +#define PULSEAUDIOQT_DECL_DEPRECATED_TEXT(text) __attribute__ ((__deprecated__(text))) + +#define ECM_GENERATEEXPORTHEADER_VERSION_VALUE(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) + +/* Take any defaults from group settings */ +#if !defined(PULSEAUDIOQT_NO_DEPRECATED) && !defined(PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) +# ifdef KF_NO_DEPRECATED +# define PULSEAUDIOQT_NO_DEPRECATED +# elif defined(KF_DISABLE_DEPRECATED_BEFORE_AND_AT) +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT KF_DISABLE_DEPRECATED_BEFORE_AND_AT +# endif +#endif +#if !defined(PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) && defined(KF_DISABLE_DEPRECATED_BEFORE_AND_AT) +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT KF_DISABLE_DEPRECATED_BEFORE_AND_AT +#endif + +#if !defined(PULSEAUDIOQT_NO_DEPRECATED_WARNINGS) && !defined(PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE) +# ifdef KF_NO_DEPRECATED_WARNINGS +# define PULSEAUDIOQT_NO_DEPRECATED_WARNINGS +# elif defined(KF_DEPRECATED_WARNINGS_SINCE) +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE KF_DEPRECATED_WARNINGS_SINCE +# endif +#endif +#if !defined(PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE) && defined(KF_DEPRECATED_WARNINGS_SINCE) +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE KF_DEPRECATED_WARNINGS_SINCE +#endif + +#if defined(PULSEAUDIOQT_NO_DEPRECATED) +# undef PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_NO_EXPORT +#elif defined(PULSEAUDIOQT_NO_DEPRECATED_WARNINGS) +# define PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_NO_EXPORT +#else +# define PULSEAUDIOQT_DEPRECATED PULSEAUDIOQT_DECL_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_DECL_DEPRECATED_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_DECL_DEPRECATED_NO_EXPORT +#endif + +/* No deprecated API had been removed from build */ +#define PULSEAUDIOQT_EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 + +#define PULSEAUDIOQT_BUILD_DEPRECATED_SINCE(major, minor) 1 + +#ifdef PULSEAUDIOQT_NO_DEPRECATED +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT 0x10300 +#endif +#ifdef PULSEAUDIOQT_NO_DEPRECATED_WARNINGS +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE 0 +#endif + +#ifndef PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE +# ifdef PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# else +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE 0x10300 +# endif +#endif + +#ifndef PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT 0x10000 +#endif + +#ifdef PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_ENABLE_DEPRECATED_SINCE(major, minor) (ECM_GENERATEEXPORTHEADER_VERSION_VALUE(major, minor, 0) > PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) +#else +# define PULSEAUDIOQT_ENABLE_DEPRECATED_SINCE(major, minor) 0 +#endif + +#endif /* PULSEAUDIOQT_EXPORT_H */ + + +#ifndef ECM_GENERATEEXPORTHEADER_PULSEAUDIOQT_EXPORT_H +#define ECM_GENERATEEXPORTHEADER_PULSEAUDIOQT_EXPORT_H + + +#define PULSEAUDIOQT_DECL_DEPRECATED_TEXT(text) __attribute__ ((__deprecated__(text))) + +#define ECM_GENERATEEXPORTHEADER_VERSION_VALUE(major, minor, patch) ((major<<16)|(minor<<8)|(patch)) + +/* Take any defaults from group settings */ +#if !defined(PULSEAUDIOQT_NO_DEPRECATED) && !defined(PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) +# ifdef KF_NO_DEPRECATED +# define PULSEAUDIOQT_NO_DEPRECATED +# elif defined(KF_DISABLE_DEPRECATED_BEFORE_AND_AT) +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT KF_DISABLE_DEPRECATED_BEFORE_AND_AT +# endif +#endif +#if !defined(PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) && defined(KF_DISABLE_DEPRECATED_BEFORE_AND_AT) +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT KF_DISABLE_DEPRECATED_BEFORE_AND_AT +#endif + +#if !defined(PULSEAUDIOQT_NO_DEPRECATED_WARNINGS) && !defined(PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE) +# ifdef KF_NO_DEPRECATED_WARNINGS +# define PULSEAUDIOQT_NO_DEPRECATED_WARNINGS +# elif defined(KF_DEPRECATED_WARNINGS_SINCE) +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE KF_DEPRECATED_WARNINGS_SINCE +# endif +#endif +#if !defined(PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE) && defined(KF_DEPRECATED_WARNINGS_SINCE) +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE KF_DEPRECATED_WARNINGS_SINCE +#endif + +#if defined(PULSEAUDIOQT_NO_DEPRECATED) +# undef PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_NO_EXPORT +#elif defined(PULSEAUDIOQT_NO_DEPRECATED_WARNINGS) +# define PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_NO_EXPORT +#else +# define PULSEAUDIOQT_DEPRECATED PULSEAUDIOQT_DECL_DEPRECATED +# define PULSEAUDIOQT_DEPRECATED_EXPORT PULSEAUDIOQT_DECL_DEPRECATED_EXPORT +# define PULSEAUDIOQT_DEPRECATED_NO_EXPORT PULSEAUDIOQT_DECL_DEPRECATED_NO_EXPORT +#endif + +/* No deprecated API had been removed from build */ +#define PULSEAUDIOQT_EXCLUDE_DEPRECATED_BEFORE_AND_AT 0 + +#define PULSEAUDIOQT_BUILD_DEPRECATED_SINCE(major, minor) 1 + +#ifdef PULSEAUDIOQT_NO_DEPRECATED +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT 0x10300 +#endif +#ifdef PULSEAUDIOQT_NO_DEPRECATED_WARNINGS +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE 0 +#endif + +#ifndef PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE +# ifdef PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# else +# define PULSEAUDIOQT_DEPRECATED_WARNINGS_SINCE 0x10300 +# endif +#endif + +#ifndef PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT +# define PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT 0x10000 +#endif + +#ifdef PULSEAUDIOQT_DEPRECATED +# define PULSEAUDIOQT_ENABLE_DEPRECATED_SINCE(major, minor) (ECM_GENERATEEXPORTHEADER_VERSION_VALUE(major, minor, 0) > PULSEAUDIOQT_DISABLE_DEPRECATED_BEFORE_AND_AT) +#else +# define PULSEAUDIOQT_ENABLE_DEPRECATED_SINCE(major, minor) 0 +#endif + + +#endif /* ECM_GENERATEEXPORTHEADER_PULSEAUDIOQT_EXPORT_H */ diff --git a/src/PulseAudioQt/pulseobject.cpp b/src/PulseAudioQt/pulseobject.cpp new file mode 100644 index 0000000..ac9b975 --- /dev/null +++ b/src/PulseAudioQt/pulseobject.cpp @@ -0,0 +1,86 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "pulseobject.h" +#include "pulseobject_p.h" + +#include "context.h" + +#include + +namespace PulseAudioQt +{ +PulseObject::PulseObject(QObject *parent) + : QObject(parent) + , d(new PulseObjectPrivate(this)) +{ +} + +PulseObject::~PulseObject() +{ + delete d; +} + +PulseObjectPrivate::PulseObjectPrivate(PulseObject *q) + : q(q) +{ +} + +PulseObjectPrivate::~PulseObjectPrivate() +{ +} + +QString PulseObject::name() const +{ + return d->m_name; +} + +QString PulseObject::iconName() const +{ + QString name = d->m_properties.value(QStringLiteral("device.icon_name")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = d->m_properties.value(QStringLiteral("media.icon_name")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = d->m_properties.value(QStringLiteral("window.icon_name")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = d->m_properties.value(QStringLiteral("application.icon_name")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = d->m_properties.value(QStringLiteral("application.process.binary")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = d->m_properties.value(QStringLiteral("application.name")).toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + name = property("name").toString(); + if (!name.isEmpty() && QIcon::hasThemeIcon(name)) { + return name; + } + + return QString(); +} + +QVariantMap PulseObject::properties() const +{ + return d->m_properties; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/pulseobject.h b/src/PulseAudioQt/pulseobject.h new file mode 100644 index 0000000..4d5b494 --- /dev/null +++ b/src/PulseAudioQt/pulseobject.h @@ -0,0 +1,76 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef PULSEOBJECT_H +#define PULSEOBJECT_H + +#include + +#include "pulseaudioqt_export.h" + +namespace PulseAudioQt +{ +class Context; + +template +class MapBase; + +/** + * Base class for most PulseAudio objects. + */ +class PULSEAUDIOQT_EXPORT PulseObject : public QObject +{ + Q_OBJECT + Q_PROPERTY(QString name READ name NOTIFY nameChanged) + Q_PROPERTY(QString iconName READ iconName CONSTANT) + Q_PROPERTY(QVariantMap properties READ properties NOTIFY propertiesChanged) + +public: + ~PulseObject(); + + QString name() const; + + /** + * A freedesktop.org icon name that fits this object. + */ + QString iconName() const; + + /** + * A map of properties associated with this object. + * The set of available properties depends on the type of object. + */ + QVariantMap properties() const; + +Q_SIGNALS: + /** + * Emitted when any of the \ref properties changed. + */ + void propertiesChanged(); + + void nameChanged(); + +protected: + /** @private */ + explicit PulseObject(QObject *parent); + + /** @private */ + class PulseObjectPrivate *const d; + +private: + // Ensure that we get properly parented. + PulseObject(); + friend class IndexedPulseObjectPrivate; + friend class ClientPrivate; + friend class CardPrivate; + friend class ModulePrivate; + friend class VolumeObjectPrivate; + friend class ProfilePrivate; + friend class StreamRestorePrivate; +}; + +} // PulseAudioQt + +#endif // PULSEOBJECT_H diff --git a/src/PulseAudioQt/pulseobject_p.h b/src/PulseAudioQt/pulseobject_p.h new file mode 100644 index 0000000..946b66c --- /dev/null +++ b/src/PulseAudioQt/pulseobject_p.h @@ -0,0 +1,57 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef PULSEOBJECT_P_H +#define PULSEOBJECT_P_H + +#include "debug.h" + +#include + +#include + +#include "context.h" + +namespace PulseAudioQt +{ +class PulseObjectPrivate +{ +public: + explicit PulseObjectPrivate(PulseObject *q); + virtual ~PulseObjectPrivate(); + + PulseObject *q; + QVariantMap m_properties; + QString m_name; + + template + void updatePulseObject(PAInfo *info) + { + if (m_name != QString::fromUtf8(info->name)) { + m_name = QString::fromUtf8(info->name); + Q_EMIT q->nameChanged(); + } + } + + template + void updateProperties(PAInfo *info) + { + m_properties.clear(); + void *it = nullptr; + while (const char *key = pa_proplist_iterate(info->proplist, &it)) { + Q_ASSERT(key); + const char *value = pa_proplist_gets(info->proplist, key); + if (!value) { + qDebug() << "property" << key << "not a string"; + continue; + } + Q_ASSERT(value); + m_properties.insert(QString::fromUtf8(key), QString::fromUtf8(value)); + } + Q_EMIT q->propertiesChanged(); + } +}; +} +#endif diff --git a/src/PulseAudioQt/server.cpp b/src/PulseAudioQt/server.cpp new file mode 100644 index 0000000..c0b464b --- /dev/null +++ b/src/PulseAudioQt/server.cpp @@ -0,0 +1,137 @@ +/* + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "server.h" +#include "server_p.h" + +#include "context.h" +#include "context_p.h" +#include "debug.h" +#include "sink.h" +#include "source.h" + +namespace PulseAudioQt +{ +Server::Server(Context *context) + : QObject(context) + , d(new ServerPrivate(this)) +{ + Q_ASSERT(context); + + connect(&context->d->m_sinks, &MapBaseQObject::added, this, &Server::updateDefaultDevices); + connect(&context->d->m_sinks, &MapBaseQObject::removed, this, &Server::updateDefaultDevices); + connect(&context->d->m_sources, &MapBaseQObject::added, this, &Server::updateDefaultDevices); + connect(&context->d->m_sources, &MapBaseQObject::removed, this, &Server::updateDefaultDevices); +} + +Server::~Server() +{ +} + +ServerPrivate::ServerPrivate(Server *q) + : q(q) + , m_defaultSink(nullptr) + , m_defaultSource(nullptr) +{ +} + +ServerPrivate::~ServerPrivate() +{ +} + +Sink *Server::defaultSink() const +{ + return d->m_defaultSink; +} + +void Server::setDefaultSink(Sink *sink) +{ + Q_ASSERT(sink); + Context::instance()->setDefaultSink(sink->name()); +} + +Source *Server::defaultSource() const +{ + return d->m_defaultSource; +} + +void Server::setDefaultSource(Source *source) +{ + Q_ASSERT(source); + Context::instance()->setDefaultSource(source->name()); +} + +void Server::reset() +{ + if (d->m_defaultSink) { + d->m_defaultSink = nullptr; + Q_EMIT defaultSinkChanged(d->m_defaultSink); + } + + if (d->m_defaultSource) { + d->m_defaultSource = nullptr; + Q_EMIT defaultSourceChanged(d->m_defaultSource); + } +} + +void ServerPrivate::update(const pa_server_info *info) +{ + m_defaultSinkName = QString::fromUtf8(info->default_sink_name); + m_defaultSourceName = QString::fromUtf8(info->default_source_name); + + const bool isPw = QString::fromUtf8(info->server_name).contains("PipeWire"); + + if (isPw != m_isPipeWire) { + m_isPipeWire = isPw; + Q_EMIT q->isPipeWireChanged(); + } + + q->updateDefaultDevices(); +} + +/** @private */ +template +static Type *findByName(const Vector &vector, const QString &name) +{ + Type *out = nullptr; + if (name.isEmpty()) { + return out; + } + for (Type *t : vector) { + out = t; + if (out->name() == name) { + return out; + } + } + qWarning() << "No object for name" << name; + return out; +} + +void Server::updateDefaultDevices() +{ + Sink *sink = findByName(Context::instance()->d->m_sinks.data(), d->m_defaultSinkName); + Source *source = findByName(Context::instance()->d->m_sources.data(), d->m_defaultSourceName); + + if (d->m_defaultSink != sink) { + qDebug() << "Default sink changed" << sink; + d->m_defaultSink = sink; + Q_EMIT defaultSinkChanged(d->m_defaultSink); + } + + if (d->m_defaultSource != source) { + qDebug() << "Default source changed" << source; + d->m_defaultSource = source; + Q_EMIT defaultSourceChanged(d->m_defaultSource); + } +} + +bool Server::isPipeWire() const +{ + return d->m_isPipeWire; +} + + +} // PulseAudioQt diff --git a/src/PulseAudioQt/server.h b/src/PulseAudioQt/server.h new file mode 100644 index 0000000..f388f5c --- /dev/null +++ b/src/PulseAudioQt/server.h @@ -0,0 +1,57 @@ +/* + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef SERVER_H +#define SERVER_H + +#include "pulseaudioqt_export.h" +#include + +namespace PulseAudioQt +{ +class Sink; +class Source; +class Context; + +class PULSEAUDIOQT_EXPORT Server : public QObject +{ + Q_OBJECT + +public: + ~Server(); + + Sink *defaultSink() const; + void setDefaultSink(Sink *sink); + + Source *defaultSource() const; + void setDefaultSource(Source *source); + + /** + * Whether PulseAudio is provided via pipewire-pulse. + */ + bool isPipeWire() const; + +Q_SIGNALS: + void defaultSinkChanged(PulseAudioQt::Sink *sink); + void defaultSourceChanged(PulseAudioQt::Source *source); + void isPipeWireChanged(); + +private: + explicit Server(Context *context); + + void reset(); + void updateDefaultDevices(); + + class ServerPrivate *const d; + + friend class ServerPrivate; + friend class Context; + friend class ContextPrivate; +}; + +} // PulseAudioQt + +#endif // CONTEXT_H diff --git a/src/PulseAudioQt/server_p.h b/src/PulseAudioQt/server_p.h new file mode 100644 index 0000000..83550b4 --- /dev/null +++ b/src/PulseAudioQt/server_p.h @@ -0,0 +1,28 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#pragma once +#include "server.h" +#include + +namespace PulseAudioQt +{ +class ServerPrivate +{ +public: + explicit ServerPrivate(Server *q); + virtual ~ServerPrivate(); + + Server *q; + + QString m_defaultSinkName; + QString m_defaultSourceName; + Sink *m_defaultSink; + Source *m_defaultSource; + bool m_isPipeWire = false; + + void update(const pa_server_info *info); +}; +} diff --git a/src/PulseAudioQt/sink.cpp b/src/PulseAudioQt/sink.cpp new file mode 100644 index 0000000..6b36762 --- /dev/null +++ b/src/PulseAudioQt/sink.cpp @@ -0,0 +1,93 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "sink.h" +#include "sink_p.h" + +#include "context.h" +#include "context_p.h" +#include "server.h" + +#include "device_p.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +Sink::Sink(QObject *parent) + : Device(parent) + , d(new SinkPrivate(this)) +{ + connect(Context::instance()->server(), &Server::defaultSinkChanged, this, &Sink::defaultChanged); +} + +SinkPrivate::SinkPrivate(Sink *q) + : q(q) +{ +} + +Sink::~Sink() +{ + delete d; +} + +void SinkPrivate::update(const pa_sink_info *info) +{ + q->Device::d->updateDevice(info); + + if (m_monitorIndex != info->monitor_source) { + m_monitorIndex = info->monitor_source; + Q_EMIT q->monitorIndexChanged(); + } +} + +void Sink::setVolume(qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), -1, volume, VolumeObject::d->cvolume(), &pa_context_set_sink_volume_by_index); +} + +void Sink::setMuted(bool muted) +{ + Context::instance()->d->setGenericMute(index(), muted, &pa_context_set_sink_mute_by_index); +} + +void Sink::setActivePortIndex(quint32 port_index) +{ + Port *port = qobject_cast(ports().at(port_index)); + if (!port) { + qWarning() << "invalid port set request" << port_index; + return; + } + Context::instance()->d->setGenericPort(index(), port->name(), &pa_context_set_sink_port_by_index); +} + +void Sink::setChannelVolume(int channel, qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), channel, volume, VolumeObject::d->cvolume(), &pa_context_set_sink_volume_by_index); +} + +bool Sink::isDefault() const +{ + return Context::instance()->server()->defaultSink() == this; +} + +void Sink::setDefault(bool enable) +{ + if (!isDefault() && enable) { + Context::instance()->server()->setDefaultSink(this); + } +} + +quint32 Sink::monitorIndex() const +{ + return d->m_monitorIndex; +} + +void Sink::setChannelVolumes(const QVector &channelVolumes) +{ + Context::instance()->d->setGenericVolumes(index(), channelVolumes, VolumeObject::d->m_volume, &pa_context_set_sink_volume_by_index); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/sink.h b/src/PulseAudioQt/sink.h new file mode 100644 index 0000000..9551763 --- /dev/null +++ b/src/PulseAudioQt/sink.h @@ -0,0 +1,57 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef SINK_H +#define SINK_H + +#include "device.h" + +struct pa_sink_info; + +namespace PulseAudioQt +{ +/** + * A PulseAudio sink. This class is based on https://freedesktop.org/software/pulseaudio/doxygen/structpa__sink__info.html. + */ +class PULSEAUDIOQT_EXPORT Sink : public Device +{ + Q_OBJECT + +public: + ~Sink(); + + void setVolume(qint64 volume) override; + + void setMuted(bool muted) override; + + void setActivePortIndex(quint32 port_index) override; + + void setChannelVolume(int channel, qint64 volume) override; + + bool isDefault() const override; + + void setDefault(bool enable) override; + + void setChannelVolumes(const QVector &channelVolumes) override; + + /** + * Index of the monitor source for this sink. + */ + quint32 monitorIndex() const; + +Q_SIGNALS: + void monitorIndexChanged(); + +private: + explicit Sink(QObject *parent); + + class SinkPrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // SINK_H diff --git a/src/PulseAudioQt/sink_p.h b/src/PulseAudioQt/sink_p.h new file mode 100644 index 0000000..2b8efd2 --- /dev/null +++ b/src/PulseAudioQt/sink_p.h @@ -0,0 +1,25 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef SINK_P_H +#define SINK_P_H + +#include "pulse/introspect.h" +#include "sink.h" + +namespace PulseAudioQt +{ +class SinkPrivate +{ +public: + explicit SinkPrivate(Sink *q); + + void update(const pa_sink_info *info); + + Sink *q; + quint32 m_monitorIndex = -1; +}; +} +#endif diff --git a/src/PulseAudioQt/sinkinput.cpp b/src/PulseAudioQt/sinkinput.cpp new file mode 100644 index 0000000..235553f --- /dev/null +++ b/src/PulseAudioQt/sinkinput.cpp @@ -0,0 +1,66 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "sinkinput.h" +#include "sinkinput_p.h" + +#include "context.h" +#include "context_p.h" +#include "stream_p.h" + +namespace PulseAudioQt +{ +SinkInput::SinkInput(QObject *parent) + : Stream(parent) + , d(new SinkInputPrivate(this)) +{ +} + +SinkInputPrivate::SinkInputPrivate(SinkInput *q) + : q(q) +{ +} + +SinkInput::~SinkInput() +{ + delete d; +} + +void SinkInputPrivate::update(const pa_sink_input_info *info) +{ + q->Stream::d->updateStream(info); + if (q->Stream::d->m_deviceIndex != info->sink) { + q->Stream::d->m_deviceIndex = info->sink; + Q_EMIT q->deviceIndexChanged(); + } +} + +void SinkInput::setDeviceIndex(quint32 deviceIndex) +{ + Context::instance()->d->setGenericDeviceForStream(index(), deviceIndex, &pa_context_move_sink_input_by_index); +} + +void SinkInput::setVolume(qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), -1, volume, VolumeObject::d->cvolume(), &pa_context_set_sink_input_volume); +} + +void SinkInput::setMuted(bool muted) +{ + Context::instance()->d->setGenericMute(index(), muted, &pa_context_set_sink_input_mute); +} + +void SinkInput::setChannelVolume(int channel, qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), channel, volume, VolumeObject::d->cvolume(), &pa_context_set_sink_input_volume); +} + +void SinkInput::setChannelVolumes(const QVector &channelVolumes) +{ + Context::instance()->d->setGenericVolumes(index(), channelVolumes, VolumeObject::d->m_volume, &pa_context_set_sink_input_volume); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/sinkinput.h b/src/PulseAudioQt/sinkinput.h new file mode 100644 index 0000000..85dce4e --- /dev/null +++ b/src/PulseAudioQt/sinkinput.h @@ -0,0 +1,41 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef SINKINPUT_H +#define SINKINPUT_H + +#include "stream.h" + +struct pa_sink_input_info; + +namespace PulseAudioQt +{ +/** + * A SinkInput stream. + */ +class PULSEAUDIOQT_EXPORT SinkInput : public Stream +{ + Q_OBJECT + +public: + ~SinkInput(); + + void setVolume(qint64 volume) override; + void setMuted(bool muted) override; + void setChannelVolume(int channel, qint64 volume) override; + void setDeviceIndex(quint32 deviceIndex) override; + void setChannelVolumes(const QVector &channelVolumes) override; + +private: + SinkInput(QObject *parent); + + class SinkInputPrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // SINKINPUT_H diff --git a/src/PulseAudioQt/sinkinput_p.h b/src/PulseAudioQt/sinkinput_p.h new file mode 100644 index 0000000..f7748c9 --- /dev/null +++ b/src/PulseAudioQt/sinkinput_p.h @@ -0,0 +1,25 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef SINKINPUT_P_H +#define SINKINPUT_P_H + +#include "sinkinput.h" +#include + +namespace PulseAudioQt +{ +class SinkInputPrivate +{ +public: + explicit SinkInputPrivate(SinkInput *q); + + SinkInput *q; + + void update(const pa_sink_input_info *info); +}; +} + +#endif diff --git a/src/PulseAudioQt/source.cpp b/src/PulseAudioQt/source.cpp new file mode 100644 index 0000000..e6a34c8 --- /dev/null +++ b/src/PulseAudioQt/source.cpp @@ -0,0 +1,81 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "source.h" +#include "source_p.h" + +#include "context.h" +#include "context_p.h" +#include "device_p.h" +#include "server.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +Source::Source(QObject *parent) + : Device(parent) + , d(new SourcePrivate(this)) +{ + connect(Context::instance()->server(), &Server::defaultSourceChanged, this, &Source::defaultChanged); +} + +SourcePrivate::SourcePrivate(Source *q) + : q(q) +{ +} + +void SourcePrivate::update(const pa_source_info *info) +{ + q->Device::d->updateDevice(info); +} + +void Source::setVolume(qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), -1, volume, VolumeObject::d->cvolume(), &pa_context_set_source_volume_by_index); +} + +void Source::setMuted(bool muted) +{ + Context::instance()->d->setGenericMute(index(), muted, &pa_context_set_source_mute_by_index); +} + +void Source::setActivePortIndex(quint32 port_index) +{ + Port *port = qobject_cast(ports().at(port_index)); + if (!port) { + qWarning() << "invalid port set request" << port_index; + return; + } + Context::instance()->d->setGenericPort(index(), port->name(), &pa_context_set_source_port_by_index); +} + +void Source::setChannelVolume(int channel, qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), channel, volume, VolumeObject::d->cvolume(), &pa_context_set_source_volume_by_index); +} + +bool Source::isDefault() const +{ + return Context::instance()->server()->defaultSource() == this; +} + +void Source::setDefault(bool enable) +{ + if (!isDefault() && enable) { + Context::instance()->server()->setDefaultSource(this); + } +} + +void Source::setChannelVolumes(const QVector &volumes) +{ + Context::instance()->d->setGenericVolumes(index(), volumes, VolumeObject::d->m_volume, &pa_context_set_source_volume_by_index); +} + +Source::~Source() +{ + delete d; +} +} // PulseAudioQt diff --git a/src/PulseAudioQt/source.h b/src/PulseAudioQt/source.h new file mode 100644 index 0000000..17c4cb9 --- /dev/null +++ b/src/PulseAudioQt/source.h @@ -0,0 +1,44 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef SOURCE_H +#define SOURCE_H + +#include "device.h" + +struct pa_source_info; + +namespace PulseAudioQt +{ +/** + * A PulseAudio source. This class is based on https://freedesktop.org/software/pulseaudio/doxygen/structpa__source__info.html. + */ +class PULSEAUDIOQT_EXPORT Source : public Device +{ + Q_OBJECT + +public: + ~Source(); + + void setVolume(qint64 volume) override; + void setMuted(bool muted) override; + void setActivePortIndex(quint32 port_index) override; + void setChannelVolume(int channel, qint64 volume) override; + void setChannelVolumes(const QVector &volumes) override; + + bool isDefault() const override; + void setDefault(bool enable) override; + +private: + explicit Source(QObject *parent); + + class SourcePrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // SOURCE_H diff --git a/src/PulseAudioQt/source_p.h b/src/PulseAudioQt/source_p.h new file mode 100644 index 0000000..46becdf --- /dev/null +++ b/src/PulseAudioQt/source_p.h @@ -0,0 +1,24 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef SOURCE_P_H +#define SOURCE_P_H + +#include "source.h" +#include + +namespace PulseAudioQt +{ +class SourcePrivate +{ +public: + explicit SourcePrivate(Source *q); + + void update(const pa_source_info *info); + + Source *q; +}; +} +#endif diff --git a/src/PulseAudioQt/sourceoutput.cpp b/src/PulseAudioQt/sourceoutput.cpp new file mode 100644 index 0000000..1420da3 --- /dev/null +++ b/src/PulseAudioQt/sourceoutput.cpp @@ -0,0 +1,65 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "sourceoutput.h" +#include "sourceoutput_p.h" + +#include "context.h" +#include "context_p.h" +#include "stream_p.h" + +namespace PulseAudioQt +{ +SourceOutput::SourceOutput(QObject *parent) + : Stream(parent) + , d(new SourceOutputPrivate(this)) +{ +} + +SourceOutput::~SourceOutput() +{ +} + +SourceOutputPrivate::SourceOutputPrivate(SourceOutput *q) + : q(q) +{ +} + +void SourceOutputPrivate::update(const pa_source_output_info *info) +{ + q->Stream::d->updateStream(info); + if (q->Stream::d->m_deviceIndex != info->source) { + q->Stream::d->m_deviceIndex = info->source; + Q_EMIT q->deviceIndexChanged(); + } +} + +void SourceOutput::setDeviceIndex(quint32 deviceIndex) +{ + Context::instance()->d->setGenericDeviceForStream(index(), deviceIndex, &pa_context_move_source_output_by_index); +} + +void SourceOutput::setVolume(qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), -1, volume, VolumeObject::d->cvolume(), &pa_context_set_source_output_volume); +} + +void SourceOutput::setMuted(bool muted) +{ + Context::instance()->d->setGenericMute(index(), muted, &pa_context_set_source_output_mute); +} + +void SourceOutput::setChannelVolume(int channel, qint64 volume) +{ + Context::instance()->d->setGenericVolume(index(), channel, volume, VolumeObject::d->cvolume(), &pa_context_set_source_output_volume); +} + +void SourceOutput::setChannelVolumes(const QVector &channelVolumes) +{ + Context::instance()->d->setGenericVolumes(index(), channelVolumes, VolumeObject::d->m_volume, &pa_context_set_source_output_volume); +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/sourceoutput.h b/src/PulseAudioQt/sourceoutput.h new file mode 100644 index 0000000..758f80a --- /dev/null +++ b/src/PulseAudioQt/sourceoutput.h @@ -0,0 +1,41 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef SOURCEOUTPUT_H +#define SOURCEOUTPUT_H + +#include "stream.h" + +struct pa_source_output_info; + +namespace PulseAudioQt +{ +/** + * A SourceOutput Stream. + */ +class PULSEAUDIOQT_EXPORT SourceOutput : public Stream +{ + Q_OBJECT + +public: + ~SourceOutput(); + + void setVolume(qint64 volume) override; + void setMuted(bool muted) override; + void setChannelVolume(int channel, qint64 volume) override; + void setDeviceIndex(quint32 deviceIndex) override; + void setChannelVolumes(const QVector &channelVolumes) override; + +private: + explicit SourceOutput(QObject *parent); + + class SourceOutputPrivate *const d; + friend class MapBase; +}; + +} // PulseAudioQt + +#endif // SOURCEOUTPUT_H diff --git a/src/PulseAudioQt/sourceoutput_p.h b/src/PulseAudioQt/sourceoutput_p.h new file mode 100644 index 0000000..02d5d5a --- /dev/null +++ b/src/PulseAudioQt/sourceoutput_p.h @@ -0,0 +1,26 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef SOURCEOUTPUT_P_H +#define SOURCEOUTPUT_P_H + +#include "sourceoutput.h" +#include + +namespace PulseAudioQt +{ +class SourceOutputPrivate +{ +public: + explicit SourceOutputPrivate(SourceOutput *q); + + void update(const pa_source_output_info *info); + + SourceOutput *q; +}; + +} + +#endif diff --git a/src/PulseAudioQt/stream.cpp b/src/PulseAudioQt/stream.cpp new file mode 100644 index 0000000..8a392f0 --- /dev/null +++ b/src/PulseAudioQt/stream.cpp @@ -0,0 +1,60 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "stream.h" +#include "context_p.h" +#include "stream_p.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +Stream::Stream(QObject *parent) + : VolumeObject(parent) + , d(new StreamPrivate(this)) +{ + VolumeObject::d->m_volumeWritable = false; +} + +Stream::~Stream() +{ + delete d; +} + +StreamPrivate::StreamPrivate(Stream *q) + : q(q) +{ +} + +StreamPrivate::~StreamPrivate() +{ +} + +Client *Stream::client() const +{ + return Context::instance()->d->m_clients.data().value(d->m_clientIndex, nullptr); +} + +bool Stream::isVirtualStream() const +{ + return d->m_virtualStream; +} + +quint32 Stream::deviceIndex() const +{ + return d->m_deviceIndex; +} + +bool Stream::isCorked() const +{ + return d->m_corked; +} + +bool Stream::hasVolume() const +{ + return d->m_hasVolume; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/stream.h b/src/PulseAudioQt/stream.h new file mode 100644 index 0000000..c48a429 --- /dev/null +++ b/src/PulseAudioQt/stream.h @@ -0,0 +1,60 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef STREAM_H +#define STREAM_H + +#include + +#include "volumeobject.h" + +// Properties need fully qualified classes even with pointers. +#include "client.h" + +namespace PulseAudioQt +{ +class StreamPrivate; + +class PULSEAUDIOQT_EXPORT Stream : public VolumeObject +{ + Q_OBJECT + Q_PROPERTY(PulseAudioQt::Client *client READ client NOTIFY clientChanged) + Q_PROPERTY(bool virtualStream READ isVirtualStream NOTIFY virtualStreamChanged) + Q_PROPERTY(quint32 deviceIndex READ deviceIndex WRITE setDeviceIndex NOTIFY deviceIndexChanged) + Q_PROPERTY(bool corked READ isCorked NOTIFY corkedChanged) + Q_PROPERTY(bool hasVolume READ hasVolume NOTIFY hasVolumeChanged) + +public: + ~Stream(); + + Client *client() const; + bool isVirtualStream() const; + quint32 deviceIndex() const; + bool isCorked() const; + bool hasVolume() const; + + virtual void setDeviceIndex(quint32 deviceIndex) = 0; + +Q_SIGNALS: + void clientChanged(); + void virtualStreamChanged(); + void deviceIndexChanged(); + void corkedChanged(); + void hasVolumeChanged(); + +protected: + /** @private */ + explicit Stream(QObject *parent); + /** @private */ + class StreamPrivate *const d; + + friend class SinkInputPrivate; + friend class SourceOutputPrivate; +}; + +} // PulseAudioQt + +#endif // STREAM_H diff --git a/src/PulseAudioQt/stream_p.h b/src/PulseAudioQt/stream_p.h new file mode 100644 index 0000000..7d2f2e2 --- /dev/null +++ b/src/PulseAudioQt/stream_p.h @@ -0,0 +1,56 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef STREAM_P_H +#define STREAM_P_H + +#include "stream.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +class StreamPrivate +{ +public: + explicit StreamPrivate(Stream *q); + virtual ~StreamPrivate(); + + Stream *q; + + quint32 m_deviceIndex = PA_INVALID_INDEX; + quint32 m_clientIndex = PA_INVALID_INDEX; + bool m_virtualStream = false; + bool m_corked = false; + bool m_hasVolume = false; + + template + void updateStream(const PAInfo *info) + { + q->VolumeObject::d->updateVolumeObject(info); + + if (m_hasVolume != info->has_volume) { + m_hasVolume = info->has_volume; + Q_EMIT q->hasVolumeChanged(); + } + if (q->VolumeObject::d->m_volumeWritable != info->volume_writable) { + q->VolumeObject::d->m_volumeWritable = info->volume_writable; + Q_EMIT q->isVolumeWritableChanged(); + } + if (m_clientIndex != info->client) { + m_clientIndex = info->client; + Q_EMIT q->clientChanged(); + } + if (m_virtualStream != (info->client == PA_INVALID_INDEX)) { + m_virtualStream = info->client == PA_INVALID_INDEX; + Q_EMIT q->virtualStreamChanged(); + } + if (m_corked != info->corked) { + m_corked = info->corked; + Q_EMIT q->corkedChanged(); + } + } +}; +} +#endif diff --git a/src/PulseAudioQt/streamrestore.cpp b/src/PulseAudioQt/streamrestore.cpp new file mode 100644 index 0000000..fee9f88 --- /dev/null +++ b/src/PulseAudioQt/streamrestore.cpp @@ -0,0 +1,214 @@ +/* + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include "streamrestore.h" +#include "context.h" +#include "context_p.h" +#include "streamrestore_p.h" + +#include "debug.h" +#include "pulseobject_p.h" + +namespace PulseAudioQt +{ +StreamRestore::StreamRestore(quint32 index, const QVariantMap &properties, QObject *parent) + : PulseObject(parent) + , d(new StreamRestorePrivate(this)) +{ + memset(&d->m_volume, 0, sizeof(d->m_volume)); + memset(&d->m_channelMap, 0, sizeof(d->m_channelMap)); + + d->m_index = index; + PulseObject::d->m_properties = properties; +} + +StreamRestore::~StreamRestore() +{ +} + +StreamRestorePrivate::StreamRestorePrivate(StreamRestore *q) + : q(q) +{ +} + +StreamRestorePrivate::~StreamRestorePrivate() +{ +} + +void StreamRestorePrivate::update(const pa_ext_stream_restore_info *info) +{ + q->PulseObject::d->updatePulseObject(info); + m_cache.valid = false; + + const QString infoDevice = QString::fromUtf8(info->device); + if (m_device != infoDevice) { + m_device = infoDevice; + Q_EMIT q->deviceChanged(); + } + if (m_muted != info->mute) { + m_muted = info->mute; + Q_EMIT q->mutedChanged(); + } + if (!pa_cvolume_equal(&m_volume, &info->volume)) { + m_volume = info->volume; + Q_EMIT q->volumeChanged(); + Q_EMIT q->channelVolumesChanged(); + } + if (!pa_channel_map_equal(&m_channelMap, &info->channel_map)) { + m_channels.clear(); + m_channels.reserve(info->channel_map.channels); + for (int i = 0; i < info->channel_map.channels; ++i) { + m_channels << QString::fromUtf8(pa_channel_position_to_pretty_string(info->channel_map.map[i])); + } + m_channelMap = info->channel_map; + Q_EMIT q->channelsChanged(); + } +} + +QString StreamRestore::device() const +{ + return d->m_device; +} + +void StreamRestore::setDevice(const QString &device) +{ + if (d->m_cache.valid) { + if (d->m_cache.device != device) { + d->writeChanges(d->m_cache.volume, d->m_cache.muted, device); + } + } else { + if (d->m_device != device) { + d->writeChanges(d->m_volume, d->m_muted, device); + } + } +} + +qint64 StreamRestore::volume() const +{ + return d->m_volume.values[0]; +} + +void StreamRestore::setVolume(qint64 volume) +{ + pa_cvolume vol = d->m_cache.valid ? d->m_cache.volume : d->m_volume; + + // If no channel exists force one. We need one to be able to control the volume + // See https://bugs.kde.org/show_bug.cgi?id=407397 + if (vol.channels == 0) { + vol.channels = 1; + } + + for (int i = 0; i < vol.channels; ++i) { + vol.values[i] = volume; + } + + if (d->m_cache.valid) { + d->writeChanges(vol, d->m_cache.muted, d->m_cache.device); + } else { + d->writeChanges(vol, d->m_muted, d->m_device); + } +} + +bool StreamRestore::isMuted() const +{ + return d->m_muted; +} + +void StreamRestore::setMuted(bool muted) +{ + if (d->m_cache.valid) { + if (d->m_cache.muted != muted) { + d->writeChanges(d->m_cache.volume, muted, d->m_cache.device); + } + } else { + if (d->m_muted != muted) { + d->writeChanges(d->m_volume, muted, d->m_device); + } + } +} + +bool StreamRestore::hasVolume() const +{ + return true; +} + +bool StreamRestore::isVolumeWritable() const +{ + return true; +} + +QVector StreamRestore::channels() const +{ + return d->m_channels; +} + +QVector StreamRestore::channelVolumes() const +{ + QVector ret; + ret.reserve(d->m_volume.channels); + for (int i = 0; i < d->m_volume.channels; ++i) { + ret << d->m_volume.values[i]; + } + return ret; +} + +void StreamRestore::setChannelVolume(int channel, qint64 volume) +{ + Q_ASSERT(channel >= 0 && channel < d->m_volume.channels); + pa_cvolume vol = d->m_cache.valid ? d->m_cache.volume : d->m_volume; + vol.values[channel] = volume; + + if (d->m_cache.valid) { + d->writeChanges(vol, d->m_cache.muted, d->m_cache.device); + } else { + d->writeChanges(vol, d->m_muted, d->m_device); + } +} + +quint32 StreamRestore::deviceIndex() const +{ + return PA_INVALID_INDEX; +} + +void StreamRestore::setDeviceIndex(quint32 deviceIndex) +{ + Q_UNUSED(deviceIndex); + qWarning() << "Not implemented"; +} + +void StreamRestorePrivate::writeChanges(const pa_cvolume &volume, bool muted, const QString &device) +{ + const QByteArray nameData = q->name().toUtf8(); + const QByteArray deviceData = device.toUtf8(); + + pa_ext_stream_restore_info info; + info.name = nameData.constData(); + info.channel_map = m_channelMap; + info.volume = volume; + info.device = deviceData.isEmpty() ? nullptr : deviceData.constData(); + info.mute = muted; + + // If no channel exists force one. We need one to be able to control the volume + // See https://bugs.kde.org/show_bug.cgi?id=407397 + if (info.channel_map.channels == 0) { + info.channel_map.channels = 1; + info.channel_map.map[0] = PA_CHANNEL_POSITION_MONO; + } + + m_cache.valid = true; + m_cache.volume = volume; + m_cache.muted = muted; + m_cache.device = device; + + Context::instance()->d->streamRestoreWrite(&info); +} + +quint32 StreamRestore::index() const +{ + return d->m_index; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/streamrestore.h b/src/PulseAudioQt/streamrestore.h new file mode 100644 index 0000000..cb74006 --- /dev/null +++ b/src/PulseAudioQt/streamrestore.h @@ -0,0 +1,74 @@ +/* + SPDX-FileCopyrightText: 2016 David Rosca + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef STREAMRESTORE_H +#define STREAMRESTORE_H + +#include "pulseobject.h" + +struct pa_ext_stream_restore_info; + +namespace PulseAudioQt +{ +class PULSEAUDIOQT_EXPORT StreamRestore : public PulseObject +{ + Q_OBJECT + Q_PROPERTY(QString device READ device WRITE setDevice NOTIFY deviceChanged) + Q_PROPERTY(qint64 volume READ volume WRITE setVolume NOTIFY volumeChanged) + Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged) + Q_PROPERTY(bool hasVolume READ hasVolume CONSTANT) + Q_PROPERTY(bool volumeWritable READ isVolumeWritable CONSTANT) + Q_PROPERTY(QVector channels READ channels NOTIFY channelsChanged) + Q_PROPERTY(QVector channelVolumes READ channelVolumes NOTIFY channelVolumesChanged) + Q_PROPERTY(quint32 deviceIndex READ deviceIndex WRITE setDeviceIndex NOTIFY deviceIndexChanged) + // Not a IndexedPulseObject since pa_ext_stream_restore_info does not have an index member + Q_PROPERTY(quint32 index READ index CONSTANT) + +public: + ~StreamRestore(); + + QString device() const; + void setDevice(const QString &device); + + qint64 volume() const; + void setVolume(qint64 volume); + + bool isMuted() const; + void setMuted(bool muted); + + bool hasVolume() const; + bool isVolumeWritable() const; + + QVector channels() const; + + QVector channelVolumes() const; + + quint32 index() const; + + quint32 deviceIndex() const; + void setDeviceIndex(quint32 deviceIndex); + + void setChannelVolume(int channel, qint64 volume); + +Q_SIGNALS: + void deviceChanged(); + void volumeChanged(); + void mutedChanged(); + void channelsChanged(); + void channelVolumesChanged(); + void deviceIndexChanged(); + +private: + explicit StreamRestore(quint32 index, const QVariantMap &properties, QObject *parent); + + class StreamRestorePrivate *const d; + friend class MapBase; + friend class ContextPrivate; +}; + +} // PulseAudioQt + +#endif // STREAMRESTORE_H diff --git a/src/PulseAudioQt/streamrestore_p.h b/src/PulseAudioQt/streamrestore_p.h new file mode 100644 index 0000000..80c32c5 --- /dev/null +++ b/src/PulseAudioQt/streamrestore_p.h @@ -0,0 +1,42 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef STREAMRESTORE_P_H +#define STREAMRESTORE_P_H + +#include "streamrestore.h" +#include +#include + +namespace PulseAudioQt +{ +class StreamRestorePrivate +{ +public: + explicit StreamRestorePrivate(StreamRestore *q); + virtual ~StreamRestorePrivate(); + + void writeChanges(const pa_cvolume &volume, bool muted, const QString &device); + void update(const pa_ext_stream_restore_info *info); + + StreamRestore *q; + QString m_device; + pa_cvolume m_volume; + pa_channel_map m_channelMap; + QVector m_channels; + bool m_muted = false; + quint32 m_index = 0; + + struct { + bool valid = false; + pa_cvolume volume; + bool muted; + QString device; + } m_cache; +}; + +} + +#endif diff --git a/src/PulseAudioQt/volumeobject.cpp b/src/PulseAudioQt/volumeobject.cpp new file mode 100644 index 0000000..a18a12a --- /dev/null +++ b/src/PulseAudioQt/volumeobject.cpp @@ -0,0 +1,70 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#include + +#include "volumeobject.h" +#include "volumeobject_p.h" + +namespace PulseAudioQt +{ +VolumeObject::VolumeObject(QObject *parent) + : IndexedPulseObject(parent) + , d(new VolumeObjectPrivate(this)) +{ +} + +VolumeObjectPrivate::VolumeObjectPrivate(VolumeObject *q) + : q(q) +{ + pa_cvolume_init(&m_volume); +} + +VolumeObject::~VolumeObject() +{ +} + +qint64 VolumeObject::volume() const +{ + return pa_cvolume_max(&d->m_volume); +} + +bool VolumeObject::isMuted() const +{ + return d->m_muted; +} + +pa_cvolume VolumeObjectPrivate::cvolume() const +{ + return m_volume; +} + +bool VolumeObject::isVolumeWritable() const +{ + return d->m_volumeWritable; +} + +QVector VolumeObject::channels() const +{ + return d->m_channels; +} + +QStringList VolumeObject::rawChannels() const +{ + return d->m_rawChannels; +} + +QVector VolumeObject::channelVolumes() const +{ + QVector ret; + ret.reserve(d->m_volume.channels); + for (int i = 0; i < d->m_volume.channels; ++i) { + ret << d->m_volume.values[i]; + } + return ret; +} + +} // PulseAudioQt diff --git a/src/PulseAudioQt/volumeobject.h b/src/PulseAudioQt/volumeobject.h new file mode 100644 index 0000000..d560963 --- /dev/null +++ b/src/PulseAudioQt/volumeobject.h @@ -0,0 +1,79 @@ +/* + SPDX-FileCopyrightText: 2014-2015 Harald Sitter + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ + +#ifndef VOLUMEOBJECT_H +#define VOLUMEOBJECT_H + +#include "indexedpulseobject.h" + +namespace PulseAudioQt +{ +/** + * An PulseObject that has a volume. Can be a Device or a Stream. + */ +class PULSEAUDIOQT_EXPORT VolumeObject : public IndexedPulseObject +{ + Q_OBJECT + Q_PROPERTY(qint64 volume READ volume WRITE setVolume NOTIFY volumeChanged) + Q_PROPERTY(bool muted READ isMuted WRITE setMuted NOTIFY mutedChanged) + Q_PROPERTY(bool volumeWritable READ isVolumeWritable NOTIFY isVolumeWritableChanged) + Q_PROPERTY(QVector channels READ channels NOTIFY channelsChanged) + Q_PROPERTY(QVector channelVolumes READ channelVolumes WRITE setChannelVolumes NOTIFY channelVolumesChanged) + Q_PROPERTY(QStringList rawChannels READ rawChannels NOTIFY rawChannelsChanged) + +public: + ~VolumeObject(); + + /** + * This object's volume + */ + qint64 volume() const; + + /** + * Set the volume for this object. + * This affects all channels. + * The volume must be between PulseAudioQt::minimumVolume() and PulseAudioQt::maximumVolume(). + */ + virtual void setVolume(qint64 volume) = 0; + + /** + * Whether this object is muted. + */ + bool isMuted() const; + + /** + * Set whether this object is muted. + */ + virtual void setMuted(bool muted) = 0; + + bool isVolumeWritable() const; + + QVector channels() const; + QStringList rawChannels() const; + QVector channelVolumes() const; + virtual void setChannelVolumes(const QVector &channelVolumes) = 0; + Q_INVOKABLE virtual void setChannelVolume(int channel, qint64 volume) = 0; + +Q_SIGNALS: + void volumeChanged(); + void mutedChanged(); + void isVolumeWritableChanged(); + void channelsChanged(); + void rawChannelsChanged(); + void channelVolumesChanged(); + +protected: + /** @private */ + explicit VolumeObject(QObject *parent); + /** @private */ + class VolumeObjectPrivate *const d; + friend class DevicePrivate; + friend class StreamPrivate; +}; + +} // PulseAudioQt + +#endif // VOLUMEOBJECT_H diff --git a/src/PulseAudioQt/volumeobject_p.h b/src/PulseAudioQt/volumeobject_p.h new file mode 100644 index 0000000..7ac5b55 --- /dev/null +++ b/src/PulseAudioQt/volumeobject_p.h @@ -0,0 +1,67 @@ +/* + SPDX-FileCopyrightText: 2018 Nicolas Fella + + SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL +*/ +#ifndef VOLUMEOBJECT_P_H +#define VOLUMEOBJECT_P_H + +#include + +#include "indexedpulseobject_p.h" +#include "volumeobject.h" + +namespace PulseAudioQt +{ +class VolumeObjectPrivate +{ +public: + explicit VolumeObjectPrivate(VolumeObject *q); + + VolumeObject *q; + pa_channel_map foo; + pa_cvolume m_volume; + bool m_muted = true; + bool m_volumeWritable = true; + QVector m_channels; + QStringList m_rawChannels; + + pa_cvolume cvolume() const; + + template + void updateVolumeObject(PAInfo *info) + { + q->IndexedPulseObject::d->updatePulseObject(info); + q->PulseObject::d->updateProperties(info); + if (m_muted != info->mute) { + m_muted = info->mute; + Q_EMIT q->mutedChanged(); + } + if (!pa_cvolume_equal(&m_volume, &info->volume)) { + m_volume = info->volume; + Q_EMIT q->volumeChanged(); + Q_EMIT q->channelVolumesChanged(); + } + QVector infoChannels; + infoChannels.reserve(info->channel_map.channels); + for (int i = 0; i < info->channel_map.channels; ++i) { + infoChannels << QString::fromUtf8(pa_channel_position_to_pretty_string(info->channel_map.map[i])); + } + if (m_channels != infoChannels) { + m_channels = infoChannels; + Q_EMIT q->channelsChanged(); + } + + QStringList infoRawChannels; + infoRawChannels.reserve(info->channel_map.channels); + for (int i = 0; i < info->channel_map.channels; ++i) { + infoRawChannels << QString::fromUtf8(pa_channel_position_to_string(info->channel_map.map[i])); + } + if (m_rawChannels != infoRawChannels) { + m_rawChannels = infoRawChannels; + Q_EMIT q->rawChannelsChanged(); + } + } +}; +} +#endif diff --git a/src/cardwidget.cc b/src/cardwidget.cc deleted file mode 100644 index 5755d46..0000000 --- a/src/cardwidget.cc +++ /dev/null @@ -1,176 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "cardwidget.h" - -#include -#include -#include - -/*** CardWidget ***/ -CardWidget::CardWidget(QWidget* parent) : - QWidget(parent) { - setupUi(this); - connect(profileList, static_cast(&QComboBox::currentIndexChanged), this, &CardWidget::onProfileChange); - connect(profileFlavorList, static_cast(&QComboBox::currentIndexChanged), this, &CardWidget::onProfileFlavorChange); -} - - -void CardWidget::prepareMenu() { - int idx = 0; - - profileList->clear(); - /* Fill the ComboBox */ - for (auto k : profiles.keys()) { - auto & profile = profiles[k]; - auto desc = profile.getProfileName(); - profileList->addItem(desc, k); - if (profile.containsProfile(activeProfile)) { - profileList->setCurrentIndex(idx); - changeProfile(k); - } - ++idx; - } -} - -void CardWidget::changeProfile(const QString & name) -{ - auto &profile = profiles[name]; - auto old = profileFlavorList->currentText(); - profileFlavorList->clear(); - int idx = 0; - for (auto & entry : profile.entries) { - auto name = entry.getName(); - profileFlavorList->addItem(name, entry.id); - if (name == old || entry.id == activeProfile) { - profileFlavorList->setCurrentIndex(idx); - } - ++idx; - } - if (profileFlavorList->currentIndex() == -1) { - profileFlavorList->setCurrentIndex(0); - } -} - -void CardWidget::changeProfileFlavor(const QByteArray & id) { - pa_operation* o; - - if (!(o = pa_context_set_card_profile_by_index(get_context(), index, id.constData(), nullptr, nullptr))) { - show_error(tr("pa_context_set_card_profile_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void CardWidget::onProfileChange(int active) { - if (updating) - return; - - if (active != -1) - changeProfile(profileList->itemData(active).toString()); -} - -void CardWidget::onProfileFlavorChange(int active) { - if (updating) - return; - - if (active != -1) - changeProfileFlavor(profileFlavorList->itemData(active).toByteArray()); -} - -QString ProfileGroup::getProfileName() { - if (!name.isEmpty()) - return name; - // TODO - QHash counts; - //qDebug() << "Entries" << this; - for (auto n : entries) { - //qDebug() << n.tokens; - QSet tmp = n.tokens.toSet(); //(n.tokens.begin(), n.tokens.end()); - for (auto t : tmp) { - counts[t]++; - } - } - //qDebug() << counts; - QSet todo = counts.keys().toSet(); - for (auto &pe : entries) { - QMutableListIterator it(pe.tokens); - while (it.hasNext()) { - auto s = it.next(); - if (counts[s] == entries.size()) { - it.remove(); - if (todo.remove(s)) { - if (!name.isEmpty()) { - name.append(QLatin1Char(' ')); - } - name.append(s); - } - } - } - } - return name; -} - -void ProfileGroup::addEntry(const char *id, const char *name) { - auto *pe = new ProfileEntry; - bool paren = false; - const char *pos = name, *tokenStart = name; - //qDebug() << name << "is" << id; - while (*pos != '\0') { - if (!paren && isspace(*pos)) { - if (pos > tokenStart) { - pe->tokens.append(QString::fromUtf8(tokenStart, pos - tokenStart)); - } - tokenStart = pos + 1; - } - if (paren && *pos == ')') { - pe->tokens.append(QString::fromUtf8(tokenStart, pos - tokenStart + 1)); - paren = false; - tokenStart = pos + 1; - } - if (tokenStart == pos && *pos == '(') { - paren = true; - } - pos++; - } - if (pos > tokenStart) { - pe->tokens.append(QString::fromUtf8(tokenStart, pos - tokenStart)); - } - pe->id = id; - this->entries.append(*pe); - delete pe; -} - -QString ProfileEntry::getName() const { - return tokens.join(QLatin1String(" ")); -} - -bool ProfileGroup::containsProfile(const QByteArray &pro) const { - for (const auto &e : this->entries) { - if (e.id == pro) - return true; - } - return false; -} diff --git a/src/cardwidget.h b/src/cardwidget.h deleted file mode 100644 index 92d544d..0000000 --- a/src/cardwidget.h +++ /dev/null @@ -1,58 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef cardwidget_h -#define cardwidget_h - -#include "pavucontrol.h" -#include "helper.h" -#include "ui_cardwidget.h" -#include -#include -#include -#include - -class CardWidget : public QWidget, public Ui::CardWidget { - Q_OBJECT -public: - CardWidget(QWidget *parent = nullptr); - - QByteArray name; - uint32_t index; - bool updating; - - - QMap profiles; - std::map ports; - QByteArray activeProfile; - bool hasSinks; - bool hasSources; - - void prepareMenu(); - -protected: - void changeProfile(const QString & name); - void changeProfileFlavor(const QByteArray & id); - void onProfileChange(int active); - void onProfileFlavorChange(int active); - -}; - -#endif diff --git a/src/cardwidget.ui b/src/cardwidget.ui deleted file mode 100644 index a75654b..0000000 --- a/src/cardwidget.ui +++ /dev/null @@ -1,67 +0,0 @@ - - - CardWidget - - - - 0 - 0 - 368 - 106 - - - - Form - - - - - - - - - - - - - - - Card Name - - - - - - - - - - - Profile: - - - - - - - - - - - - - - - - - - - Qt::Horizontal - - - - - - - - diff --git a/src/channel.cc b/src/channel.cc deleted file mode 100644 index 195e2f1..0000000 --- a/src/channel.cc +++ /dev/null @@ -1,169 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include "channel.h" -#include "minimalstreamwidget.h" - -constexpr int SLIDER_SNAP = 2; -static inline int paVolume2Percent(pa_volume_t vol) -{ - if (vol > PA_VOLUME_UI_MAX) - vol = PA_VOLUME_UI_MAX; - return qRound(static_cast(vol - PA_VOLUME_MUTED) / PA_VOLUME_NORM * 100); -} - -static inline pa_volume_t percent2PaVolume(int percent) -{ - return PA_VOLUME_MUTED + qRound(static_cast(percent) / 100 * PA_VOLUME_NORM); -} - -/*** ChannelWidget ***/ - -Channel::Channel(QGridLayout* parent) : - QObject(parent), - can_decibel(false), - volumeScaleEnabled(true), - last(false) -{ - channelLabel = new QLabel(nullptr); - volumeScale = new QSlider(Qt::Horizontal, nullptr); - volumeLabel = new QLabel(nullptr); - - const int row = parent->rowCount(); - parent->addWidget(channelLabel, row, 0); - parent->addWidget(volumeScale, row, 1); - parent->addWidget(volumeLabel, row, 2); - - // make the info font smaller - QFont label_font = volumeLabel->font(); - if (label_font.pixelSize() == -1) - label_font.setPointSizeF(label_font.pointSizeF() * 0.8); - else - label_font.setPixelSize(qRound(static_cast(label_font.pixelSize()) * 0.8)); - volumeLabel->setFont(label_font); - volumeLabel->setFixedWidth(QFontMetrics{volumeLabel->font()}.size(Qt::TextSingleLine, QStringLiteral("100%(-99.99dB)")).width()); - volumeLabel->setAlignment(Qt::AlignHCenter); - volumeLabel->setTextFormat(Qt::RichText); - - volumeScale->setRange(paVolume2Percent(PA_VOLUME_MUTED), paVolume2Percent(PA_VOLUME_UI_MAX)); - volumeScale->setValue(paVolume2Percent(PA_VOLUME_NORM)); - volumeScale->setPageStep(5); - volumeScale->setTickInterval(paVolume2Percent(PA_VOLUME_NORM)); - volumeScale->setTickPosition(QSlider::TicksBelow); - volumeScale->setTracking(false); - setBaseVolume(PA_VOLUME_NORM); - - connect(volumeScale, &QSlider::valueChanged, this, &Channel::onVolumeScaleValueChanged); - connect(volumeScale, &QSlider::sliderMoved, this, &Channel::onVolumeScaleSliderMoved); -} - -void Channel::setVolume(pa_volume_t volume) { - const int v = paVolume2Percent(volume); - if (can_decibel) { - const double dB = pa_sw_volume_to_dB(volume); - volumeLabel->setText(tr("%1% (%2dB)", "volume slider label [X% (YdB)]").arg(v) - .arg(dB > PA_DECIBEL_MININFTY ? QString::asprintf("%0.2f", dB) : QStringLiteral("-∞"))); - } - else - volumeLabel->setText(tr("%1%", "volume slider label [X%]").arg(v)); - - volumeScaleEnabled = false; - volumeScale->setValue(v); - volumeScaleEnabled = true; -} - -void Channel::setVisible(bool visible) -{ - channelLabel->setVisible(visible); - volumeScale->setVisible(visible); - volumeLabel->setVisible(visible); -} - -void Channel::setEnabled(bool enabled) -{ - channelLabel->setEnabled(enabled); - volumeScale->setEnabled(enabled); - volumeLabel->setEnabled(enabled); -} - -void Channel::onVolumeScaleValueChanged(int value) { - - if (!volumeScaleEnabled) - return; - - if (minimalStreamWidget->updating) - return; - - minimalStreamWidget->updateChannelVolume(channel, percent2PaVolume(value)); -} - -void Channel::onVolumeScaleSliderMoved(int value) -{ - if (!volumeScaleEnabled) - return; - - if (minimalStreamWidget->updating) - return; - - const int current_value = volumeScale->value(); - if (current_value == 100 && qAbs(value - current_value) <= SLIDER_SNAP) - { - volumeScale->blockSignals(true); - volumeScale->setSliderPosition(current_value); - volumeScale->blockSignals(false); - return; - } - - volumeScale->setValue(value); -} - -/* -void Channel::set_sensitive(bool enabled) { - setEnabled(enabled); - - channelLabel->setEnabled(enabled); - volumeLabel->setEnabled(enabled); - volumeScale->setEnabled(enabled); -} -*/ - -void Channel::setBaseVolume(pa_volume_t /*v*/) { -#if 0 // FIXME: Qt does not support this functionality - gtk_scale_clear_marks(GTK_SCALE(volumeScale->gobj())); - - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)PA_VOLUME_MUTED, (GtkPositionType) GTK_POS_BOTTOM, - last ? (can_decibel ? tr("Silence").toUtf8().constData() : tr("Min").toUtf8().constData()) : NULL); - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)PA_VOLUME_NORM, (GtkPositionType) GTK_POS_BOTTOM, - last ? tr("100% (0dB)").toUtf8().constData() : NULL); - if (v > PA_VOLUME_MUTED && v < PA_VOLUME_NORM) { - gtk_scale_add_mark(GTK_SCALE(volumeScale->gobj()), (double)v, (GtkPositionType) GTK_POS_BOTTOM, - last ? tr("Base").toUtf8().constData() : NULL); - } -#endif - -} diff --git a/src/channel.h b/src/channel.h deleted file mode 100644 index e1c1df8..0000000 --- a/src/channel.h +++ /dev/null @@ -1,62 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef channel_h -#define channel_h - -#include -#include "pavucontrol.h" - -class QGridLayout; -class QLabel; -class QSlider; -class MinimalStreamWidget; - -class Channel : public QObject { - Q_OBJECT -public: - Channel(QGridLayout* parent=nullptr); - - void setVolume(pa_volume_t volume); - void setVisible(bool visible); - void setEnabled(bool enabled); - - int channel; - MinimalStreamWidget *minimalStreamWidget; - -protected Q_SLOTS: - void onVolumeScaleValueChanged(int value); - void onVolumeScaleSliderMoved(int value); - -public: - bool can_decibel; - bool volumeScaleEnabled; - bool last; - - QLabel *channelLabel; - QSlider *volumeScale; - QLabel *volumeLabel; - - //virtual void set_sensitive(bool enabled); - virtual void setBaseVolume(pa_volume_t); -}; - - -#endif diff --git a/src/channelwidget.ui b/src/channelwidget.ui deleted file mode 100644 index a2b65f2..0000000 --- a/src/channelwidget.ui +++ /dev/null @@ -1,42 +0,0 @@ - - - ChannelWidget - - - - 0 - 0 - 400 - 34 - - - - Form - - - - - - <b>left-front</b> - - - - - - - Qt::Horizontal - - - - - - - <small>50%</small> - - - - - - - - diff --git a/src/devicewidget.cc b/src/devicewidget.cc deleted file mode 100644 index 85c856a..0000000 --- a/src/devicewidget.cc +++ /dev/null @@ -1,245 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include - -#include "mainwindow.h" -#include "devicewidget.h" -#include "channel.h" -#include -#include -#include -#include -#include - -/*** DeviceWidget ***/ -DeviceWidget::DeviceWidget(MainWindow* parent, QByteArray deviceType) : - MinimalStreamWidget(parent), - offsetButtonEnabled(false), - mpMainWindow(parent), - rename{new QAction{tr("Rename device..."), this}}, - mDeviceType(deviceType) { - - setupUi(this); - advancedWidget->hide(); - initPeakProgressBar(channelsGrid); - - timeout.setSingleShot(true); - timeout.setInterval(100); - connect(&timeout, &QTimer::timeout, this, &DeviceWidget::timeoutEvent); - - connect(muteToggleButton, &QToolButton::toggled, this, &DeviceWidget::onMuteToggleButton); - connect(lockToggleButton, &QToolButton::toggled, this, &DeviceWidget::onLockToggleButton); - connect(defaultToggleButton, &QToolButton::toggled, this, &DeviceWidget::onDefaultToggleButton); - - connect(rename, &QAction::triggered, this, &DeviceWidget::renamePopup); - addAction(rename); - setContextMenuPolicy(Qt::ActionsContextMenu); - - connect(portList, static_cast(&QComboBox::currentIndexChanged), this, &DeviceWidget::onPortChange); - connect(offsetButton, static_cast(&QSpinBox::valueChanged), this, &DeviceWidget::onOffsetChange); - - for (auto & channel : channels) - channel = nullptr; - - - // FIXME: -// offsetAdjustment = Gtk::Adjustment::create(0.0, -2000.0, 2000.0, 10.0, 50.0, 0.0); -// offsetButton->configure(offsetAdjustment, 0, 2); -} - -void DeviceWidget::setChannelMap(const pa_channel_map &m, bool can_decibel) { - channelMap = m; - - for (int i = 0; i < m.channels; i++) { - Channel *ch = channels[i] = new Channel(channelsGrid); - ch->channel = i; - ch->can_decibel = can_decibel; - ch->minimalStreamWidget = this; - char text[64]; - snprintf(text, sizeof(text), "%s", pa_channel_position_to_pretty_string(m.map[i])); - ch->channelLabel->setText(QString::fromUtf8(text)); - } - channels[m.channels-1]->last = true; - - lockToggleButton->setEnabled(m.channels > 1); - hideLockedChannels(lockToggleButton->isChecked()); -} - -void DeviceWidget::setVolume(const pa_cvolume &v, bool force) { - g_assert(v.channels == channelMap.channels); - - volume = v; - - if (!timeout.isActive() || force) { /* do not update the volume when a volume change is still in flux */ - for (int i = 0; i < volume.channels; i++) - channels[i]->setVolume(volume.values[i]); - } -} - -void DeviceWidget::updateChannelVolume(int channel, pa_volume_t v) { - pa_cvolume n; - g_assert(channel < volume.channels); - - n = volume; - if (lockToggleButton->isChecked()) - pa_cvolume_set(&n, n.channels, v); - else - n.values[channel] = v; - - setVolume(n, true); - - if (!timeout.isActive()) { - timeout.start(); - } -} - -void DeviceWidget::hideLockedChannels(bool hide) { - for (int i = 0; i < channelMap.channels - 1; i++) - channels[i]->setVisible(!hide); - - channels[channelMap.channels - 1]->channelLabel->setVisible(!hide); -} - -void DeviceWidget::onMuteToggleButton() { - - lockToggleButton->setEnabled(!muteToggleButton->isChecked()); - - for (int i = 0; i < channelMap.channels; i++) - channels[i]->setEnabled(!muteToggleButton->isChecked()); -} - -void DeviceWidget::onLockToggleButton() { - hideLockedChannels(lockToggleButton->isChecked()); -} - -void DeviceWidget::onDefaultToggleButton() { -} - -void DeviceWidget::onOffsetChange() { - pa_operation *o; - int64_t offset; - std::ostringstream card_stream; - QByteArray card_name; - - if (!offsetButtonEnabled) - return; - - offset = offsetButton->value() * 1000.0; - card_stream << card_index; - card_name = QByteArray::fromStdString(card_stream.str()); - - if (!(o = pa_context_set_port_latency_offset(get_context(), - card_name.constData(), activePort.constData(), offset, nullptr, nullptr))) { - show_error(tr("pa_context_set_port_latency_offset() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); -} - -void DeviceWidget::setDefault(bool isDefault) { - defaultToggleButton->setChecked(isDefault); - /*defaultToggleButton->setEnabled(!isDefault);*/ -} - -bool DeviceWidget::timeoutEvent() { - executeVolumeUpdate(); - return false; -} - -void DeviceWidget::executeVolumeUpdate() { -} - -void DeviceWidget::setLatencyOffset(int64_t offset) { - offsetButtonEnabled = false; - offsetButton->setValue(offset / 1000.0); - offsetButtonEnabled = true; -} - -void DeviceWidget::setBaseVolume(pa_volume_t v) { - - for (int i = 0; i < channelMap.channels; i++) - channels[i]->setBaseVolume(v); -} - -void DeviceWidget::prepareMenu() { - int idx = 0; - int active_idx = -1; - - portList->clear(); - /* Fill the ComboBox's Model */ - for (auto & port : ports) { - QByteArray name = port.first; - QString desc = QString::fromUtf8(port.second); - portList->addItem(desc, name); - if (port.first == activePort) - active_idx = idx; - idx++; - } - - if (active_idx >= 0) - portList->setCurrentIndex(active_idx); - - if (!ports.empty()) { - portSelect->show(); - - if (pa_context_get_server_protocol_version(get_context()) >= 27) { - offsetSelect->show(); - advancedOptions->setEnabled(true); - } else { - /* advancedOptions has sensitive=false by default */ - offsetSelect->hide(); - } - - } else { - portSelect->hide(); - advancedOptions->setEnabled(false); - offsetSelect->hide(); - } -} - -void DeviceWidget::renamePopup() { - if (updating) - return; - if (!mpMainWindow->canRenameDevices) { - QMessageBox::warning(this, tr("Sorry, but device renaming is not supported.") - , tr("You need to load module-device-manager in the PulseAudio server in order to rename devices")); - return; - } - - const QString old_name = QString::fromUtf8(description); - bool ok; - const QString new_name = QInputDialog::getText(this, QCoreApplication::organizationName(), tr("Rename device %1 to:").arg(old_name) - , QLineEdit::Normal, old_name, &ok); - if (ok && new_name != old_name) { - pa_operation* o; - gchar *key = g_markup_printf_escaped("%s:%s", mDeviceType.constData(), name.constData()); - - if (!(o = pa_ext_device_manager_set_device_description(get_context(), key, new_name.toUtf8().constData(), nullptr, nullptr))) - show_error(tr("pa_ext_device_manager_set_device_description() failed").toUtf8().constData()); - else - pa_operation_unref(o); - g_free(key); - } -} diff --git a/src/devicewidget.h b/src/devicewidget.h deleted file mode 100644 index a5104c0..0000000 --- a/src/devicewidget.h +++ /dev/null @@ -1,92 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef devicewidget_h -#define devicewidget_h - -#include "pavucontrol.h" - -#include "minimalstreamwidget.h" -#include "ui_devicewidget.h" -#include -#include - -class MainWindow; -class Channel; -class QAction; - -class DeviceWidget : public MinimalStreamWidget, public Ui::DeviceWidget { - Q_OBJECT -public: - DeviceWidget(MainWindow *parent, QByteArray deviceType = ""); - - void setChannelMap(const pa_channel_map &m, bool can_decibel); - void setVolume(const pa_cvolume &volume, bool force = false); - virtual void updateChannelVolume(int channel, pa_volume_t v); - - void hideLockedChannels(bool hide = true); - - QByteArray name; - QByteArray description; - uint32_t index, card_index; - - bool offsetButtonEnabled; - - pa_channel_map channelMap; - pa_cvolume volume; - - Channel *channels[PA_CHANNELS_MAX]; - -public Q_SLOTS: - virtual void onMuteToggleButton(); - virtual void onLockToggleButton(); - virtual void onDefaultToggleButton(); - virtual void setDefault(bool isDefault); - // virtual bool onContextTriggerEvent(GdkEventButton*); - virtual void setLatencyOffset(int64_t offset); - void onOffsetChange(); - bool timeoutEvent(); - -public: - QTimer timeout; - - virtual void executeVolumeUpdate(); - virtual void setBaseVolume(pa_volume_t v); - - std::vector< std::pair > ports; - QByteArray activePort; - - void prepareMenu(); - - void renamePopup(); - -protected: - MainWindow *mpMainWindow; - - virtual void onPortChange() = 0; - - QAction * rename; - -private: - QByteArray mDeviceType; - -}; - -#endif diff --git a/src/devicewidget.ui b/src/devicewidget.ui deleted file mode 100644 index 3b5f781..0000000 --- a/src/devicewidget.ui +++ /dev/null @@ -1,283 +0,0 @@ - - - DeviceWidget - - - - 0 - 0 - 400 - 306 - - - - Form - - - - - - - - - - - - - - - - - - - - - - Device Title - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Mute audio - - - - - - true - - - - - - - Lock channels together - - - - - - true - - - true - - - - - - - Set as fallback - - - - - - true - - - - - - - - - - - - <b>Port:</b> - - - - - - - - - - - - - 0 - - - - - - - false - - - Show advanced options - - - - - - - - 0 - - - 9 - - - 0 - - - 0 - - - 0 - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - false - - - PCM - - - true - - - - - - - AC3 - - - - - - - EAC3 - - - - - - - DTS - - - - - - - MPEG - - - - - - - AAC - - - - - - - - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - <b>Latency offset:</b> - - - - - - - ms - - - - - - - - - - - - - Qt::Horizontal - - - - - - - - - advancedOptions - toggled(bool) - advancedWidget - setVisible(bool) - - - 151 - 103 - - - 364 - 122 - - - - - diff --git a/src/elidinglabel.cc b/src/elidinglabel.cc deleted file mode 100644 index e1df4b6..0000000 --- a/src/elidinglabel.cc +++ /dev/null @@ -1,46 +0,0 @@ -/*** - This file is part of pavucontrol-qt. - - pavucontrol-qt is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol-qt is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol-qt. If not, see . -***/ - -#include "elidinglabel.h" -#include -#include - -ElidingLabel::ElidingLabel(QWidget *parent, Qt::WindowFlags f): - QLabel(parent, f), - lastWidth_(0) { - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - // set a min width to prevent the window from widening with long texts - setMinimumWidth(fontMetrics().averageCharWidth() * 10); -} - -// A simplified version of QLabel::paintEvent() without pixmap or shortcut but with eliding -void ElidingLabel::paintEvent(QPaintEvent */*event*/) { - QRect cr = contentsRect().adjusted(margin(), margin(), -margin(), -margin()); - QString txt = text(); - // if the text is changed or its rect is resized (due to window resizing), - // find whether it needs to be elided... - if (txt != lastText_ || cr.width() != lastWidth_) { - lastText_ = txt; - lastWidth_ = cr.width(); - elidedText_ = fontMetrics().elidedText(txt, Qt::ElideMiddle, cr.width()); - } - // ... then, draw the (elided) text */ - QPainter painter(this); - QStyleOption opt; - opt.initFrom(this); - style()->drawItemText(&painter, cr, alignment(), opt.palette, isEnabled(), elidedText_, foregroundRole()); -} diff --git a/src/elidinglabel.h b/src/elidinglabel.h deleted file mode 100644 index a9492c8..0000000 --- a/src/elidinglabel.h +++ /dev/null @@ -1,38 +0,0 @@ -/*** - This file is part of pavucontrol-qt. - - pavucontrol-qt is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol-qt is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol-qt. If not, see . -***/ - -#ifndef elidinglabel_h -#define elidinglabel_h - -#include - -class ElidingLabel : public QLabel { - Q_OBJECT - -public: - explicit ElidingLabel(QWidget *parent = 0, Qt::WindowFlags f = Qt::WindowFlags()); - -protected: - void paintEvent(QPaintEvent *event) override; - -private: - QString elidedText_; - QString lastText_; - int lastWidth_; -}; - -#endif // elidinglabel_h diff --git a/src/helper.cc b/src/helper.cc deleted file mode 100644 index fac1bb9..0000000 --- a/src/helper.cc +++ /dev/null @@ -1,75 +0,0 @@ -#include "helper.h" - -#include "mainwindow.h" -#include - -void populatePorts(const pa_card_info &info, std::map &ports) -{ - ports.clear(); - for (uint32_t i = 0; i < info.n_ports; ++i) { - PortInfo p; - - p.name = info.ports[i]->name; - p.description = info.ports[i]->description; - p.priority = info.ports[i]->priority; - p.available = info.ports[i]->available; - p.direction = info.ports[i]->direction; - p.latency_offset = info.ports[i]->latency_offset; - for (pa_card_profile_info2 ** p_profile = info.ports[i]->profiles2; p_profile && *p_profile != nullptr; ++p_profile) - p.profiles.push_back((*p_profile)->name); - - ports[p.name] = p; - } -} - -void groupProfiles(const std::set &profile_priorities, - const std::map &ports, - QMap &profiles) -{ - profiles.clear(); - for (auto p_profile : profile_priorities) { - bool hasNo = false, hasOther = false; - std::map::const_iterator portIt; - QByteArray desc = p_profile->description; - - for (portIt = ports.begin(); portIt != ports.end(); portIt++) { - PortInfo port = portIt->second; - - if (std::find(port.profiles.begin(), port.profiles.end(), p_profile->name) == port.profiles.end()) - continue; - - if (port.available == PA_PORT_AVAILABLE_NO) - hasNo = true; - else { - hasOther = true; - break; - } - } - if (hasNo && !hasOther) - desc += MainWindow::tr(" (unplugged)").toUtf8().constData(); - - if (!p_profile->available) - desc += MainWindow::tr(" (unavailable)").toUtf8().constData(); - - QString parseId = QString::fromUtf8(p_profile->name); - int plus = parseId.indexOf(QLatin1Char('+')); - if (plus != -1) { - parseId = parseId.left(plus); - } - auto list = parseId.split(QRegularExpression(QLatin1String("[:\\-]"))); - parseId.clear(); - for (auto p : list) { - if (p == QLatin1String("input") || p == QLatin1String("output")) - continue; - if (parseId.isEmpty() || p.startsWith(QLatin1String("extra"))) { - parseId.append(p); - } - } - //qDebug() << "ParseID:" << parseId; - ProfileGroup &group = profiles[parseId]; - if (p_profile->available) { - group.available = true; - } - group.addEntry(p_profile->name, desc.constData()); - } -} diff --git a/src/helper.h b/src/helper.h deleted file mode 100644 index 823f3e1..0000000 --- a/src/helper.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef _HELPER_H_ -#define _HELPER_H_ - -#include "pavucontrol.h" -#include -#if HAVE_EXT_DEVICE_RESTORE_API -# include -#endif - -#include -#include -#include -#include -#include - -struct ProfileEntry { - QByteArray id; - QStringList tokens; - QString getName() const; -}; - -struct ProfileGroup { - ProfileGroup() : available(false) {} - bool available; - QString name; - QList entries; - QString getProfileName(); - void addEntry(const char* id, const char* name); - bool containsProfile(const QByteArray &pro) const; -}; - -struct PortInfo { - QByteArray name; - QByteArray description; - uint32_t priority; - int available; - int direction; - int64_t latency_offset; - std::vector profiles; -}; - - -/* Used for profile sorting */ -struct profile_prio_compare { - bool operator() (pa_card_profile_info2 const * const lhs, pa_card_profile_info2 const * const rhs) const { - - if (lhs->priority == rhs->priority) - return strcmp(lhs->name, rhs->name) > 0; - - return lhs->priority > rhs->priority; - } -}; - -void populatePorts(const pa_card_info &info, std::map &ports); - - -void groupProfiles(const std::set &profile_priorities, - const std::map &ports, - QMap &profiles); - -#endif diff --git a/src/icons/checkmark.svg b/src/icons/checkmark.svg new file mode 100644 index 0000000..214db50 --- /dev/null +++ b/src/icons/checkmark.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/src/icons/mute-off.svg b/src/icons/mute-off.svg new file mode 100644 index 0000000..6e310bb --- /dev/null +++ b/src/icons/mute-off.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/src/icons/mute-on.svg b/src/icons/mute-on.svg new file mode 100644 index 0000000..24e33f4 --- /dev/null +++ b/src/icons/mute-on.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + diff --git a/src/icons/none.svg b/src/icons/none.svg new file mode 100644 index 0000000..26e5ace --- /dev/null +++ b/src/icons/none.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..a06f6f5 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,306 @@ +#include "main.h" +#include "mainwindow.h" +#include "slxoutput.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// libkf5pulseaudioqt-dev + +// Public + +/** Ignore any signals from GUI elements when this is true. Set when we're updating the GUI */ +bool g_IgnoreGui; + +// Private + +/** If not empty, on profile change, if profile belings to this card, make its sink default */ +static QString _pendingCardDefault; + +static QSet _donePorts; + +static QTimer _updateDelay; + +static MainWindow *_mainWindow; + +static void queueGuiUpdate(int ms = 50) +{ + _updateDelay.start(ms); +} + +static void updateActiveOutput() +{ + g_IgnoreGui = true; + _mainWindow->mark(); + auto *i = PulseAudioQt::Context::instance(); + //QSet usedCards; + auto cards = i->cards(); + printf(".--------------------------------------------.\n"); + for (auto *sink : i->sinks()) { + QString cardName = sink->cardIndex() < cards.size() ? cards.at(sink->cardIndex())->name() : QString(); + int portIndex = -1; + //usedCards.insert(sink->cardIndex()); + for (auto *port : sink->ports()) { + portIndex++; + //if (port->availability() == PulseAudioQt::Port::Unavailable) + // continue; + bool active = (sink->isDefault() && portIndex == sink->activePortIndex()); + printf("[%c] Output: '%s %s', volume: %d, mute: %d\n", + active ? 'x' : ' ', + sink->description().toLocal8Bit().constData(), port->description().toLocal8Bit().constData(), + (int)sink->volume(), (int)sink->isMuted()); + qint64 volume = sink->volume(); + QString id = cardName + sink->name() + port->name(); + if (active) { + if (!_donePorts.contains(id)) { + _donePorts.insert(id); + if (volume < 60000) { + volume = 65535; + sink->setVolume(volume); + } + } + } + QString title = sink->description() + ", " + port->description(); + _mainWindow->getOutput(id, true, title)->updateOutput(title, + active, sink->isMuted(), sink->isVolumeWritable() ? sink->volume() : -1, QString(), sink->name(), port->name()); + } + } + for (auto *card : cards) { + QString cardDescription = card->description(); + int profIndex = -1; + for (auto *profile : card->profiles()) { + profIndex++; + if (profIndex == card->activeProfileIndex() || profile->availability() == PulseAudioQt::Profile::Unavailable) + continue; + if (profile->sinks() == 0) + continue; + printf("[ ] Output: '%s', sinks: %d\n", + profile->description().toLocal8Bit().constData(), profile->sinks()); + QString id = card->name() + profile->name(); + QString title = cardDescription + ", " + profile->description(); + _mainWindow->getOutput(id, false, title)->updateOutput(title, + false, false, -1, card->name(), QString(), profile->name()); + } + } + printf("`--------------------------------------------´\n"); + _mainWindow->sweep(); + g_IgnoreGui = false; +} + +static void checkShouldSetDefault() +{ + if (_pendingCardDefault.isEmpty()) + return; + printf("Pending card default to %s\n", _pendingCardDefault.toLocal8Bit().constData()); + auto *i = PulseAudioQt::Context::instance(); + int cardIdx = -1; + for (auto *card : i->cards()) { + cardIdx++; + if (card->name() == _pendingCardDefault && !card->ports().isEmpty()) + break; + } + for (auto *sink : i->sinks()) { + if (sink->cardIndex() == cardIdx) { + printf("MATCH SET!\n"); + sink->setDefault(true); + sink->setMuted(false); + _pendingCardDefault.clear(); + } + } +} + +static void newCardAppeared(PulseAudioQt::Card *card) +{ + //if (_doneCards.contains(card->name())) + // return; + auto *i = PulseAudioQt::Context::instance(); + QCoreApplication::connect(card, &PulseAudioQt::Card::profilesChanged, [=]() { + printf("Card %p profiles changed\n", card); + }); + QCoreApplication::connect(card, &PulseAudioQt::Card::activeProfileIndexChanged, [=]() { + printf("Card %p active profile index changed\n", card); + checkShouldSetDefault(); + queueGuiUpdate(); + }); + QCoreApplication::connect(card, &PulseAudioQt::Card::portsChanged, [=]() { + printf("Card %p ports changed\n", card); + checkShouldSetDefault(); + queueGuiUpdate(); + }); + /* + QCoreApplication::connect(card, &PulseAudioQt::Card::sinksChanged, [=]() { + printf("Card %p sinks changed\n", card); + }); + */ +} + +static void newSinkAppeared(PulseAudioQt::Sink *sink) +{ + for (auto *port : sink->ports()) { + printf(" Port: %s\n", port->name().toLocal8Bit().constData()); + } + QCoreApplication::connect(sink, &PulseAudioQt::Sink::activePortIndexChanged, [=]() { + printf("Sink %p changed active port\n", sink); + queueGuiUpdate(); + }); + QCoreApplication::connect(sink, &PulseAudioQt::Sink::defaultChanged, [=]() { + printf("Sink %p changed default\n", sink); + queueGuiUpdate(); + }); + QCoreApplication::connect(sink, &PulseAudioQt::Sink::volumeChanged, [=]() { + queueGuiUpdate(); + }); + QCoreApplication::connect(sink, &PulseAudioQt::Sink::isVolumeWritableChanged, [=]() { + queueGuiUpdate(); + }); + queueGuiUpdate(); +} + +void setMuted(const QString &sink, bool muted) +{ + auto *i = PulseAudioQt::Context::instance(); + + for (auto *sp : i->sinks()) { + if (sp->name() == sink) { + sp->setMuted(muted); + } + } + queueGuiUpdate(); +} + +void setSinkVolume(const QString &sink, int volume) +{ + auto *i = PulseAudioQt::Context::instance(); + + for (auto *sp : i->sinks()) { + if (sp->name() == sink) { + sp->setVolume(volume); + queueGuiUpdate(250); + } + } +} + +void enableCard(const QString &card, const QString &profile) +{ + auto *i = PulseAudioQt::Context::instance(); + PulseAudioQt::Card *matchingCard = nullptr; + int profileIdx = -1; + int cardIdx = -1; + + _pendingCardDefault.clear(); + for (auto *cp : i->cards()) { + cardIdx++; + if (cp->name() != card) + continue; + int i = -1; + int exactProfileIdx = -1; + for (auto *pp : cp->profiles()) { + i++; + if (pp->availability() == PulseAudioQt::Profile::Unavailable) + continue; + if (pp->description().contains(QLatin1String("Duplex"))) { + // Prefer Duplex mode for analog outputs, it's usually listed after output only + profileIdx = i; + } + if (profileIdx == -1) { + // Otherwise default to first one in list + profileIdx = i; + } + if (pp->name() == profile) { + exactProfileIdx = i; + } + } + if (exactProfileIdx != -1) { + profileIdx = exactProfileIdx; + } + if (profileIdx != -1) { + matchingCard = cp; + break; + } + } + if (matchingCard != nullptr && profileIdx < matchingCard->profiles().size()) { + if (matchingCard->activeProfileIndex() == profileIdx) { + for (auto *sink : i->sinks()) { + if (sink->cardIndex() == cardIdx) { + sink->setMuted(false); + sink->setDefault(true); + } + } + } else { + matchingCard->setActiveProfileIndex(profileIdx); + _pendingCardDefault = matchingCard->name(); + } + } + queueGuiUpdate(); +} + +void enableSink(const QString &sink, const QString &port) +{ + auto *i = PulseAudioQt::Context::instance(); + + _pendingCardDefault.clear(); + for (auto *sp : i->sinks()) { + if (sp->name() != sink) + continue; + int i = -1; + for (auto *pp : sp->ports()) { + i++; + if (pp->name() == port) { + sp->setDefault(true); + sp->setMuted(false); + sp->setActivePortIndex(i); + } + } + } + queueGuiUpdate(); +} + +int main(int argc, char **argv) +{ + QApplication a(argc, argv); + printf("Muh\n"); + auto *i = PulseAudioQt::Context::instance(); + printf("Pa is %p = %d\n", i, (int)i->isValid()); + printf("Cards: %d\n", (int)i->cards().size()); + + QTimer::singleShot(100, [=]() { + for (auto *card : i->cards()) { + newCardAppeared(card); + printf("Card: %s (index: %d)\n", card->name().toLocal8Bit().constData(), (int)card->index()); + for (auto *profile : card->profiles()) { + printf(" Profile: %s\n", profile->name().toLocal8Bit().constData()); + } + } + for (auto *sink : i->sinks()) { + printf("Sink: %s (for card index %d)\n", sink->name().toLocal8Bit().constData(), sink->cardIndex()); + newSinkAppeared(sink); + } + QCoreApplication::connect(i, &PulseAudioQt::Context::cardAdded, &newCardAppeared); + QCoreApplication::connect(i, &PulseAudioQt::Context::sinkAdded, &newSinkAppeared); + printf("Initial output\n"); + queueGuiUpdate(); + }); + + QCoreApplication::connect(&_updateDelay, &QTimer::timeout, &updateActiveOutput); + _updateDelay.setInterval(50); + _updateDelay.setSingleShot(true); + + _mainWindow = new MainWindow; + _mainWindow->show(); + + return a.exec(); +} diff --git a/src/main.h b/src/main.h new file mode 100644 index 0000000..7402d6e --- /dev/null +++ b/src/main.h @@ -0,0 +1,16 @@ +#ifndef _MAIN_H_ +#define _MAIN_H_ + +#include + +extern bool g_IgnoreGui; + +void setMuted(const QString &sink, bool muted); + +void setSinkVolume(const QString &sink, int volume); + +void enableCard(const QString &card, const QString &profile); + +void enableSink(const QString &sink, const QString &port); + +#endif diff --git a/src/mainwindow.cc b/src/mainwindow.cc deleted file mode 100644 index 0b6b310..0000000 --- a/src/mainwindow.cc +++ /dev/null @@ -1,1124 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include - -#include "mainwindow.h" -#include "cardwidget.h" -#include "sinkwidget.h" -#include "sourcewidget.h" -#include "sinkinputwidget.h" -#include "sourceoutputwidget.h" -#include "rolewidget.h" -#include -#include -#include - -struct sink_port_prio_compare { - bool operator() (const pa_sink_port_info& lhs, const pa_sink_port_info& rhs) const { - - if (lhs.priority == rhs.priority) - return strcmp(lhs.name, rhs.name) > 0; - - return lhs.priority > rhs.priority; - } -}; - -struct source_port_prio_compare { - bool operator() (const pa_source_port_info& lhs, const pa_source_port_info& rhs) const { - - if (lhs.priority == rhs.priority) - return strcmp(lhs.name, rhs.name) > 0; - - return lhs.priority > rhs.priority; - } -}; - -MainWindow::MainWindow(): - QDialog(), - showSinkInputType(SINK_INPUT_CLIENT), - showSinkType(SINK_ALL), - showSourceOutputType(SOURCE_OUTPUT_CLIENT), - showSourceType(SOURCE_NO_MONITOR), - eventRoleWidget(nullptr), - canRenameDevices(false), - m_connected(false), - m_config_filename(nullptr) { - - setupUi(this); - - sinkInputTypeComboBox->setCurrentIndex((int) showSinkInputType); - sourceOutputTypeComboBox->setCurrentIndex((int) showSourceOutputType); - sinkTypeComboBox->setCurrentIndex((int) showSinkType); - sourceTypeComboBox->setCurrentIndex((int) showSourceType); - - connect(sinkInputTypeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &MainWindow::onSinkInputTypeComboBoxChanged); - connect(sourceOutputTypeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &MainWindow::onSourceOutputTypeComboBoxChanged); - connect(sinkTypeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &MainWindow::onSinkTypeComboBoxChanged); - connect(sourceTypeComboBox, static_cast(&QComboBox::currentIndexChanged), this, &MainWindow::onSourceTypeComboBoxChanged); - connect(showVolumeMetersCheckButton, &QCheckBox::toggled, this, &MainWindow::onShowVolumeMetersCheckButtonToggled); - - QAction * quit = new QAction{this}; - connect(quit, &QAction::triggered, this, &QWidget::close); - quit->setShortcut(QKeySequence::Quit); - addAction(quit); - - const QSettings config; - - showVolumeMetersCheckButton->setChecked(config.value(QStringLiteral("window/showVolumeMeters"), true).toBool()); - - const QSize last_size = config.value(QStringLiteral("window/size")).toSize(); - if (last_size.isValid()) - resize(last_size); - - const QVariant sinkInputTypeSelection = config.value(QStringLiteral("window/sinkInputType")); - if (sinkInputTypeSelection.isValid()) - sinkInputTypeComboBox->setCurrentIndex(sinkInputTypeSelection.toInt()); - - const QVariant sourceOutputTypeSelection = config.value(QStringLiteral("window/sourceOutputType")); - if (sourceOutputTypeSelection.isValid()) - sourceOutputTypeComboBox->setCurrentIndex(sourceOutputTypeSelection.toInt()); - - const QVariant sinkTypeSelection = config.value(QStringLiteral("window/sinkType")); - if (sinkTypeSelection.isValid()) - sinkTypeComboBox->setCurrentIndex(sinkTypeSelection.toInt()); - - const QVariant sourceTypeSelection = config.value(QStringLiteral("window/sourceType")); - if (sourceTypeSelection.isValid()) - sourceTypeComboBox->setCurrentIndex(sourceTypeSelection.toInt()); - - /* Hide first and show when we're connected */ - notebook->hide(); - connectingLabel->show(); -} - -MainWindow::~MainWindow() { - QSettings config; - config.setValue(QStringLiteral("window/size"), size()); - config.setValue(QStringLiteral("window/sinkInputType"), sinkInputTypeComboBox->currentIndex()); - config.setValue(QStringLiteral("window/sourceOutputType"), sourceOutputTypeComboBox->currentIndex()); - config.setValue(QStringLiteral("window/sinkType"), sinkTypeComboBox->currentIndex()); - config.setValue(QStringLiteral("window/sourceType"), sourceTypeComboBox->currentIndex()); - config.setValue(QStringLiteral("window/showVolumeMeters"), showVolumeMetersCheckButton->isChecked()); - - while (!clientNames.empty()) { - auto i = clientNames.begin(); - g_free(i->second); - clientNames.erase(i); - } -} - -class DeviceWidget; -static void updatePorts(DeviceWidget *w, std::map &ports) { - std::map::iterator it; - PortInfo p; - - for (auto & port : w->ports) { - QByteArray desc; - it = ports.find(port.first); - - if (it == ports.end()) - continue; - - p = it->second; - desc = p.description; - - if (p.available == PA_PORT_AVAILABLE_YES) - desc += MainWindow::tr(" (plugged in)").toUtf8().constData(); - else if (p.available == PA_PORT_AVAILABLE_NO) { - if (p.name == "analog-output-speaker" || - p.name == "analog-input-microphone-internal") - desc += MainWindow::tr(" (unavailable)").toUtf8().constData(); - else - desc += MainWindow::tr(" (unplugged)").toUtf8().constData(); - } - - port.second = desc; - } - - it = ports.find(w->activePort); - - if (it != ports.end()) { - p = it->second; - w->setLatencyOffset(p.latency_offset); - } -} - -static void setIconByName(QLabel* label, const char* name, const char* fallback_name = nullptr) { - QIcon icon = QIcon::fromTheme(QString::fromLatin1(name)); - if (icon.isNull() || icon.availableSizes().isEmpty()) - icon = QIcon::fromTheme(QString::fromLatin1(fallback_name)); - int size = label->style()->pixelMetric(QStyle::PM_ToolBarIconSize); - QPixmap pix = icon.pixmap(size, size); - label->setPixmap(pix); -} - -void MainWindow::updateCard(const pa_card_info &info) { - CardWidget *w; - bool is_new = false; - const char *description, *icon; - std::set profile_priorities; - - if (cardWidgets.count(info.index)) - w = cardWidgets[info.index]; - else { - cardWidgets[info.index] = w = new CardWidget(this); - cardsVBox->layout()->addWidget(w); - w->index = info.index; - is_new = true; - } - - w->updating = true; - - description = pa_proplist_gets(info.proplist, PA_PROP_DEVICE_DESCRIPTION); - w->name = description ? description : info.name; - w->nameLabel->setText(QString::fromUtf8(w->name)); - - icon = pa_proplist_gets(info.proplist, PA_PROP_DEVICE_ICON_NAME); - setIconByName(w->iconImage, icon, "audio-card"); - - w->hasSinks = w->hasSources = false; - - profile_priorities.clear(); - for (pa_card_profile_info2 ** p_profile = info.profiles2; p_profile && *p_profile != nullptr; ++p_profile) { - w->hasSinks = w->hasSinks || ((*p_profile)->n_sinks > 0); - w->hasSources = w->hasSources || ((*p_profile)->n_sources > 0); - profile_priorities.insert(*p_profile); - } - - populatePorts(info, w->ports); - - groupProfiles(profile_priorities, w->ports, w->profiles); - - w->activeProfile = info.active_profile ? info.active_profile->name : ""; - - /* Because the port info for sinks and sources is discontinued we need - * to update the port info for them here. */ - if (w->hasSinks) { - std::map::iterator it; - - for (it = sinkWidgets.begin() ; it != sinkWidgets.end(); it++) { - SinkWidget *sw = it->second; - - if (sw->card_index == w->index) { - sw->updating = true; - updatePorts(sw, w->ports); - sw->updating = false; - } - } - } - - if (w->hasSources) { - std::map::iterator it; - - for (it = sourceWidgets.begin() ; it != sourceWidgets.end(); it++) { - SourceWidget *sw = it->second; - - if (sw->card_index == w->index) { - sw->updating = true; - updatePorts(sw, w->ports); - sw->updating = false; - } - } - } - w->prepareMenu(); - - if (is_new) - updateDeviceVisibility(); - - w->updating = false; -} - -bool MainWindow::updateSink(const pa_sink_info &info) { - SinkWidget *w; - bool is_new = false; - - const char *icon; - std::map::iterator cw; - std::set port_priorities; - - if (sinkWidgets.count(info.index)) - w = sinkWidgets[info.index]; - else { - sinkWidgets[info.index] = w = new SinkWidget(this); - w->setChannelMap(info.channel_map, !!(info.flags & PA_SINK_DECIBEL_VOLUME)); - sinksVBox->layout()->addWidget(w); - w->index = info.index; - w->monitor_index = info.monitor_source; - is_new = true; - - w->setBaseVolume(info.base_volume); - w->setVolumeMeterVisible(showVolumeMetersCheckButton->isChecked()); - } - - w->updating = true; - - w->card_index = info.card; - w->name = info.name; - w->description = info.description; - w->type = info.flags & PA_SINK_HARDWARE ? SINK_HARDWARE : SINK_VIRTUAL; - - w->boldNameLabel->setText(QLatin1String("")); - gchar *txt = g_markup_printf_escaped("%s", info.description); - w->nameLabel->setText(QString::fromUtf8(static_cast(txt))); - w->nameLabel->setToolTip(QString::fromUtf8(info.description)); - g_free(txt); - - icon = pa_proplist_gets(info.proplist, PA_PROP_DEVICE_ICON_NAME); - setIconByName(w->iconImage, icon, "audio-card"); - - w->setVolume(info.volume); - w->muteToggleButton->setChecked(info.mute); - - w->setDefault(w->name == defaultSinkName); - - port_priorities.clear(); - for (uint32_t i=0; iports.clear(); - for (const auto & port_prioritie : port_priorities) - w->ports.push_back(std::pair(port_prioritie.name, port_prioritie.description)); - - w->activePort = info.active_port ? info.active_port->name : ""; - - cw = cardWidgets.find(info.card); - - if (cw != cardWidgets.end()) - updatePorts(w, cw->second->ports); - -#ifdef PA_SINK_SET_FORMATS - w->setDigital(info.flags & PA_SINK_SET_FORMATS); -#endif - - w->prepareMenu(); - - w->updating = false; - if (is_new) - updateDeviceVisibility(); - - return is_new; -} - -static void suspended_callback(pa_stream *s, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (pa_stream_is_suspended(s)) - w->updateVolumeMeter(pa_stream_get_device_index(s), PA_INVALID_INDEX, -1); -} - -static void read_callback(pa_stream *s, size_t length, void *userdata) { - MainWindow *w = static_cast(userdata); - const void *data; - double v; - - if (pa_stream_peek(s, &data, &length) < 0) { - show_error(MainWindow::tr("Failed to read data from stream").toUtf8().constData()); - return; - } - - if (!data) { - /* nullptr data means either a hole or empty buffer. - * Only drop the stream when there is a hole (length > 0) */ - if (length) - pa_stream_drop(s); - return; - } - - assert(length > 0); - assert(length % sizeof(float) == 0); - - v = ((const float*) data)[length / sizeof(float) -1]; - - pa_stream_drop(s); - - if (v < 0) - v = 0; - if (v > 1) - v = 1; - - w->updateVolumeMeter(pa_stream_get_device_index(s), pa_stream_get_monitor_stream(s), v); -} - -pa_stream* MainWindow::createMonitorStreamForSource(uint32_t source_idx, uint32_t stream_idx = -1, bool suspend = false) { - pa_stream *s; - char t[16]; - pa_buffer_attr attr; - pa_sample_spec ss; - pa_stream_flags_t flags; - - ss.channels = 1; - ss.format = PA_SAMPLE_FLOAT32; - ss.rate = 25; - - memset(&attr, 0, sizeof(attr)); - attr.fragsize = sizeof(float); - attr.maxlength = (uint32_t) -1; - - snprintf(t, sizeof(t), "%u", source_idx); - - if (!(s = pa_stream_new(get_context(), tr("Peak detect").toUtf8().constData(), &ss, nullptr))) { - show_error(tr("Failed to create monitoring stream").toUtf8().constData()); - return nullptr; - } - - if (stream_idx != (uint32_t) -1) - pa_stream_set_monitor_stream(s, stream_idx); - - pa_stream_set_read_callback(s, read_callback, this); - pa_stream_set_suspended_callback(s, suspended_callback, this); - - flags = (pa_stream_flags_t) (PA_STREAM_DONT_MOVE | PA_STREAM_PEAK_DETECT | PA_STREAM_ADJUST_LATENCY | - (suspend ? PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND : PA_STREAM_NOFLAGS) | - (!showVolumeMetersCheckButton->isChecked() ? PA_STREAM_START_CORKED : PA_STREAM_NOFLAGS)); - - if (pa_stream_connect_record(s, t, &attr, flags) < 0) { - show_error(tr("Failed to connect monitoring stream").toUtf8().constData()); - pa_stream_unref(s); - return nullptr; - } - return s; -} - -void MainWindow::createMonitorStreamForSinkInput(SinkInputWidget* w, uint32_t sink_idx) { - if (!sinkWidgets.count(sink_idx)) - return; - - if (w->peak) { - pa_stream_disconnect(w->peak); - w->peak = nullptr; - } - - w->peak = createMonitorStreamForSource(sinkWidgets[sink_idx]->monitor_index, w->index); -} - -void MainWindow::updateSource(const pa_source_info &info) { - SourceWidget *w; - bool is_new = false; - const char *icon; - std::map::iterator cw; - std::set port_priorities; - - if (sourceWidgets.count(info.index)) - w = sourceWidgets[info.index]; - else { - sourceWidgets[info.index] = w = new SourceWidget(this); - w->setChannelMap(info.channel_map, !!(info.flags & PA_SOURCE_DECIBEL_VOLUME)); - sourcesVBox->layout()->addWidget(w); - - w->index = info.index; - is_new = true; - - w->setBaseVolume(info.base_volume); - w->setVolumeMeterVisible(showVolumeMetersCheckButton->isChecked()); - - if (pa_context_get_server_protocol_version(get_context()) >= 13) - w->peak = createMonitorStreamForSource(info.index, -1, !!(info.flags & PA_SOURCE_NETWORK)); - } - - w->updating = true; - - w->card_index = info.card; - w->name = info.name; - w->description = info.description; - w->type = info.monitor_of_sink != PA_INVALID_INDEX ? SOURCE_MONITOR : (info.flags & PA_SOURCE_HARDWARE ? SOURCE_HARDWARE : SOURCE_VIRTUAL); - - w->boldNameLabel->setText(QLatin1String("")); - gchar *txt = g_markup_printf_escaped("%s", info.description); - w->nameLabel->setText(QString::fromUtf8(static_cast(txt))); - w->nameLabel->setToolTip(QString::fromUtf8(info.description)); - g_free(txt); - - icon = pa_proplist_gets(info.proplist, PA_PROP_DEVICE_ICON_NAME); - setIconByName(w->iconImage, icon, "audio-input-microphone"); - - w->setVolume(info.volume); - w->muteToggleButton->setChecked(info.mute); - - w->setDefault(w->name == defaultSourceName); - - port_priorities.clear(); - for (uint32_t i=0; iports.clear(); - for (const auto & port_prioritie : port_priorities) - w->ports.push_back(std::pair(port_prioritie.name, port_prioritie.description)); - - w->activePort = info.active_port ? info.active_port->name : ""; - - cw = cardWidgets.find(info.card); - - if (cw != cardWidgets.end()) - updatePorts(w, cw->second->ports); - - w->prepareMenu(); - - w->updating = false; - - if (is_new) - updateDeviceVisibility(); -} - - -void MainWindow::setIconFromProplist(QLabel *icon, pa_proplist *l, const char *def) { - const char *t; - - if ((t = pa_proplist_gets(l, PA_PROP_MEDIA_ICON_NAME))) - goto finish; - - if ((t = pa_proplist_gets(l, PA_PROP_WINDOW_ICON_NAME))) - goto finish; - - if ((t = pa_proplist_gets(l, PA_PROP_APPLICATION_ICON_NAME))) - goto finish; - - if ((t = pa_proplist_gets(l, PA_PROP_MEDIA_ROLE))) { - - if (strcmp(t, "video") == 0 || - strcmp(t, "phone") == 0) - goto finish; - - if (strcmp(t, "music") == 0) { - t = "audio"; - goto finish; - } - - if (strcmp(t, "game") == 0) { - t = "applications-games"; - goto finish; - } - - if (strcmp(t, "event") == 0) { - t = "dialog-information"; - goto finish; - } - } - - t = def; - -finish: - - setIconByName(icon, t, def); -} - - -void MainWindow::updateSinkInput(const pa_sink_input_info &info) { - const char *t; - SinkInputWidget *w; - bool is_new = false; - - if ((t = pa_proplist_gets(info.proplist, "module-stream-restore.id"))) { - if (strcmp(t, "sink-input-by-media-role:event") == 0) { - g_debug("%s", tr("Ignoring sink-input due to it being designated as an event and thus handled by the Event widget").toUtf8().constData()); - return; - } - } - - if (sinkInputWidgets.count(info.index)) { - w = sinkInputWidgets[info.index]; - if (pa_context_get_server_protocol_version(get_context()) >= 13) - if (w->sinkIndex() != info.sink) - createMonitorStreamForSinkInput(w, info.sink); - } else { - sinkInputWidgets[info.index] = w = new SinkInputWidget(this); - w->setChannelMap(info.channel_map, true); - streamsVBox->layout()->addWidget(w); - - w->index = info.index; - w->clientIndex = info.client; - is_new = true; - w->setVolumeMeterVisible(showVolumeMetersCheckButton->isChecked()); - - if (pa_context_get_server_protocol_version(get_context()) >= 13) - createMonitorStreamForSinkInput(w, info.sink); - } - - w->updating = true; - - w->type = info.client != PA_INVALID_INDEX ? SINK_INPUT_CLIENT : SINK_INPUT_VIRTUAL; - - w->setSinkIndex(info.sink); - - char *txt; - if (clientNames.count(info.client)) { - w->boldNameLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped("%s", clientNames[info.client]))); - g_free(txt); - w->nameLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped(": %s", info.name))); - g_free(txt); - } else { - w->boldNameLabel->setText(QLatin1String("")); - w->nameLabel->setText(QString::fromUtf8(info.name)); - } - - w->nameLabel->setToolTip(QString::fromUtf8(info.name)); - - setIconFromProplist(w->iconImage, info.proplist, "audio-card"); - - w->setVolume(info.volume); - w->muteToggleButton->setChecked(info.mute); - - w->updating = false; - - if (is_new) - updateDeviceVisibility(); -} - -void MainWindow::updateSourceOutput(const pa_source_output_info &info) { - SourceOutputWidget *w; - const char *app; - bool is_new = false; - - if ((app = pa_proplist_gets(info.proplist, PA_PROP_APPLICATION_ID))) - if (strcmp(app, "org.PulseAudio.pavucontrol") == 0 - || strcmp(app, "org.gnome.VolumeControl") == 0 - || strcmp(app, "org.kde.kmixd") == 0) - return; - - if (sourceOutputWidgets.count(info.index)) - w = sourceOutputWidgets[info.index]; - else { - sourceOutputWidgets[info.index] = w = new SourceOutputWidget(this); -#if HAVE_SOURCE_OUTPUT_VOLUMES - w->setChannelMap(info.channel_map, true); -#endif - recsVBox->layout()->addWidget(w); - - w->index = info.index; - w->clientIndex = info.client; - is_new = true; - w->setVolumeMeterVisible(showVolumeMetersCheckButton->isChecked()); - } - - w->updating = true; - - w->type = info.client != PA_INVALID_INDEX ? SOURCE_OUTPUT_CLIENT : SOURCE_OUTPUT_VIRTUAL; - - w->setSourceIndex(info.source); - - char *txt; - if (clientNames.count(info.client)) { - w->boldNameLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped("%s", clientNames[info.client]))); - g_free(txt); - w->nameLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped(": %s", info.name))); - g_free(txt); - } else { - w->boldNameLabel->setText(QLatin1String("")); - w->nameLabel->setText(QString::fromUtf8(info.name)); - } - - w->nameLabel->setToolTip(QString::fromUtf8(info.name)); - - setIconFromProplist(w->iconImage, info.proplist, "audio-input-microphone"); - -#if HAVE_SOURCE_OUTPUT_VOLUMES - w->setVolume(info.volume); - w->muteToggleButton->setChecked(info.mute); -#endif - - w->updating = false; - - if (is_new) - updateDeviceVisibility(); -} - -void MainWindow::updateClient(const pa_client_info &info) { - g_free(clientNames[info.index]); - clientNames[info.index] = g_strdup(info.name); - - for (auto & sinkInputWidget : sinkInputWidgets) { - SinkInputWidget *w = sinkInputWidget.second; - - if (!w) - continue; - - if (w->clientIndex == info.index) { - gchar *txt; - w->boldNameLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped("%s", info.name))); - g_free(txt); - } - } -} - -void MainWindow::updateServer(const pa_server_info &info) { - defaultSourceName = info.default_source_name ? info.default_source_name : ""; - defaultSinkName = info.default_sink_name ? info.default_sink_name : ""; - - for (auto & sinkWidget : sinkWidgets) { - SinkWidget *w = sinkWidget.second; - - if (!w) - continue; - - w->updating = true; - w->setDefault(w->name == defaultSinkName); - - w->updating = false; - } - - for (auto & sourceWidget : sourceWidgets) { - SourceWidget *w = sourceWidget.second; - - if (!w) - continue; - - w->updating = true; - w->setDefault(w->name == defaultSourceName); - w->updating = false; - } -} - -bool MainWindow::createEventRoleWidget() { - if (eventRoleWidget) - return false; - - pa_channel_map cm = { - 1, { PA_CHANNEL_POSITION_MONO } - }; - - eventRoleWidget = new RoleWidget(this); - streamsVBox->layout()->addWidget(eventRoleWidget); - eventRoleWidget->role = "sink-input-by-media-role:event"; - eventRoleWidget->setChannelMap(cm, true); - - eventRoleWidget->boldNameLabel->setText(QLatin1String("")); - eventRoleWidget->nameLabel->setText(tr("System Sounds")); - - setIconByName(eventRoleWidget->iconImage, "multimedia-volume-control"); - - eventRoleWidget->device = ""; - - eventRoleWidget->updating = true; - - pa_cvolume volume; - volume.channels = 1; - volume.values[0] = PA_VOLUME_NORM; - - eventRoleWidget->setVolume(volume); - eventRoleWidget->muteToggleButton->setChecked(false); - - eventRoleWidget->updating = false; - return TRUE; -} - -void MainWindow::deleteEventRoleWidget() { - delete eventRoleWidget; - eventRoleWidget = nullptr; -} - -void MainWindow::updateRole(const pa_ext_stream_restore_info &info) { - pa_cvolume volume; - bool is_new = false; - - if (strcmp(info.name, "sink-input-by-media-role:event") != 0) - return; - - is_new = createEventRoleWidget(); - - eventRoleWidget->updating = true; - - eventRoleWidget->device = info.device ? info.device : ""; - - volume.channels = 1; - volume.values[0] = pa_cvolume_max(&info.volume); - - eventRoleWidget->setVolume(volume); - eventRoleWidget->muteToggleButton->setChecked(info.mute); - - eventRoleWidget->updating = false; - - if (is_new) - updateDeviceVisibility(); -} - -#if HAVE_EXT_DEVICE_RESTORE_API -void MainWindow::updateDeviceInfo(const pa_ext_device_restore_info &info) { - if (sinkWidgets.count(info.index)) { - SinkWidget *w; - pa_format_info *format; - - w = sinkWidgets[info.index]; - - w->updating = true; - - /* Unselect everything */ - for (int j = 1; j < PAVU_NUM_ENCODINGS; ++j) - w->encodings[j].widget->setChecked(false); - - - for (uint8_t i = 0; i < info.n_formats; ++i) { - format = info.formats[i]; - for (int j = 1; j < PAVU_NUM_ENCODINGS; ++j) { - if (format->encoding == w->encodings[j].encoding) { - w->encodings[j].widget->setChecked(true); - break; - } - } - } - - w->updating = false; - } -} -#endif - - -void MainWindow::updateVolumeMeter(uint32_t source_index, uint32_t sink_input_idx, double v) { - if (sink_input_idx != PA_INVALID_INDEX) { - SinkInputWidget *w; - - if (sinkInputWidgets.count(sink_input_idx)) { - w = sinkInputWidgets[sink_input_idx]; - w->updatePeak(v); - } - - } else { - - for (auto & sinkWidget : sinkWidgets) { - SinkWidget* w = sinkWidget.second; - - if (w->monitor_index == source_index) - w->updatePeak(v); - } - - for (auto & sourceWidget : sourceWidgets) { - SourceWidget* w = sourceWidget.second; - - if (w->index == source_index) - w->updatePeak(v); - } - - for (auto & sourceOutputWidget : sourceOutputWidgets) { - SourceOutputWidget* w = sourceOutputWidget.second; - - if (w->sourceIndex() == source_index) - w->updatePeak(v); - } - } -} - -static guint idle_source = 0; - -gboolean idle_cb(gpointer data) { - ((MainWindow*) data)->reallyUpdateDeviceVisibility(); - idle_source = 0; - return FALSE; -} - -void MainWindow::setConnectionState(gboolean connected) { - if (m_connected != connected) { - m_connected = connected; - if (m_connected) { - connectingLabel->hide(); - notebook->show(); - } else { - notebook->hide(); - connectingLabel->show(); - } - } -} - -void MainWindow::updateDeviceVisibility() { - - if (idle_source) - return; - - idle_source = g_idle_add(idle_cb, this); -} - -void MainWindow::reallyUpdateDeviceVisibility() { - bool is_empty = true; - - for (auto & sinkInputWidget : sinkInputWidgets) { - SinkInputWidget* w = sinkInputWidget.second; - - if (sinkWidgets.size() > 1) { - w->directionLabel->show(); - w->deviceButton->show(); - } else { - w->directionLabel->hide(); - w->deviceButton->hide(); - } - - if (showSinkInputType == SINK_INPUT_ALL || w->type == showSinkInputType) { - w->show(); - is_empty = false; - } else - w->hide(); - } - - if (eventRoleWidget) - is_empty = false; - - if (is_empty) - noStreamsLabel->show(); - else - noStreamsLabel->hide(); - - is_empty = true; - - for (auto & sourceOutputWidget : sourceOutputWidgets) { - SourceOutputWidget* w = sourceOutputWidget.second; - - if (sourceWidgets.size() > 1) { - w->directionLabel->show(); - w->deviceButton->show(); - } else { - w->directionLabel->hide(); - w->deviceButton->hide(); - } - - if (showSourceOutputType == SOURCE_OUTPUT_ALL || w->type == showSourceOutputType) { - w->show(); - is_empty = false; - } else - w->hide(); - } - - if (is_empty) - noRecsLabel->show(); - else - noRecsLabel->hide(); - - is_empty = true; - - for (auto & sinkWidget : sinkWidgets) { - SinkWidget* w = sinkWidget.second; - - if (showSinkType == SINK_ALL || w->type == showSinkType) { - w->show(); - is_empty = false; - } else - w->hide(); - } - - if (is_empty) - noSinksLabel->show(); - else - noSinksLabel->hide(); - - is_empty = true; - - for (auto & cardWidget : cardWidgets) { - CardWidget* w = cardWidget.second; - - w->show(); - is_empty = false; - } - - if (is_empty) - noCardsLabel->show(); - else - noCardsLabel->hide(); - - is_empty = true; - - for (auto & sourceWidget : sourceWidgets) { - SourceWidget* w = sourceWidget.second; - - if (showSourceType == SOURCE_ALL || - w->type == showSourceType || - (showSourceType == SOURCE_NO_MONITOR && w->type != SOURCE_MONITOR)) { - w->show(); - is_empty = false; - } else - w->hide(); - } - - if (is_empty) - noSourcesLabel->show(); - else - noSourcesLabel->hide(); - - /* Hmm, if I don't call hide()/show() here some widgets will never - * get their proper space allocated */ - sinksVBox->hide(); - sinksVBox->show(); - sourcesVBox->hide(); - sourcesVBox->show(); - streamsVBox->hide(); - streamsVBox->show(); - recsVBox->hide(); - recsVBox->show(); - cardsVBox->hide(); - cardsVBox->show(); -} - -void MainWindow::removeCard(uint32_t index) { - if (!cardWidgets.count(index)) - return; - - delete cardWidgets[index]; - cardWidgets.erase(index); - updateDeviceVisibility(); -} - -void MainWindow::removeSink(uint32_t index) { - if (!sinkWidgets.count(index)) - return; - - delete sinkWidgets[index]; - sinkWidgets.erase(index); - updateDeviceVisibility(); -} - -void MainWindow::removeSource(uint32_t index) { - if (!sourceWidgets.count(index)) - return; - - delete sourceWidgets[index]; - sourceWidgets.erase(index); - updateDeviceVisibility(); -} - -void MainWindow::removeSinkInput(uint32_t index) { - if (!sinkInputWidgets.count(index)) - return; - - delete sinkInputWidgets[index]; - sinkInputWidgets.erase(index); - updateDeviceVisibility(); -} - -void MainWindow::removeSourceOutput(uint32_t index) { - if (!sourceOutputWidgets.count(index)) - return; - - delete sourceOutputWidgets[index]; - sourceOutputWidgets.erase(index); - updateDeviceVisibility(); -} - -void MainWindow::removeClient(uint32_t index) { - g_free(clientNames[index]); - clientNames.erase(index); -} - -void MainWindow::removeAllWidgets() { - for (auto & sinkInputWidget : sinkInputWidgets) - removeSinkInput(sinkInputWidget.first); - for (auto & sourceOutputWidget : sourceOutputWidgets) - removeSourceOutput(sourceOutputWidget.first); - for (auto & sinkWidget : sinkWidgets) - removeSink(sinkWidget.first); - for (auto & sourceWidget : sourceWidgets) - removeSource(sourceWidget.first); - for (auto & cardWidget : cardWidgets) - removeCard(cardWidget.first); - for (auto & clientName : clientNames) - removeClient(clientName.first); - deleteEventRoleWidget(); -} - -void MainWindow::setConnectingMessage(const char *string) { - QByteArray markup = ""; - if (!string) - markup += tr("Establishing connection to PulseAudio. Please wait...").toUtf8().constData(); - else - markup += string; - markup += ""; - connectingLabel->setText(QString::fromUtf8(markup)); -} - -void MainWindow::onSinkTypeComboBoxChanged(int /*index*/) { - showSinkType = (SinkType) sinkTypeComboBox->currentIndex(); - - if (showSinkType == (SinkType) -1) - sinkTypeComboBox->setCurrentIndex((int) SINK_ALL); - - updateDeviceVisibility(); -} - -void MainWindow::onSourceTypeComboBoxChanged(int /*index*/) { - showSourceType = (SourceType) sourceTypeComboBox->currentIndex(); - - if (showSourceType == (SourceType) -1) - sourceTypeComboBox->setCurrentIndex((int) SOURCE_NO_MONITOR); - - updateDeviceVisibility(); -} - -void MainWindow::onSinkInputTypeComboBoxChanged(int /*index*/) { - showSinkInputType = (SinkInputType) sinkInputTypeComboBox->currentIndex(); - - if (showSinkInputType == (SinkInputType) -1) - sinkInputTypeComboBox->setCurrentIndex((int) SINK_INPUT_CLIENT); - - updateDeviceVisibility(); -} - -void MainWindow::onSourceOutputTypeComboBoxChanged(int /*index*/) { - showSourceOutputType = (SourceOutputType) sourceOutputTypeComboBox->currentIndex(); - - if (showSourceOutputType == (SourceOutputType) -1) - sourceOutputTypeComboBox->setCurrentIndex((int) SOURCE_OUTPUT_CLIENT); - - updateDeviceVisibility(); -} - - -void MainWindow::onShowVolumeMetersCheckButtonToggled(bool /*toggled*/) { - bool state = showVolumeMetersCheckButton->isChecked(); - pa_operation *o; - - for (auto & sinkWidget : sinkWidgets) { - SinkWidget *sw = sinkWidget.second; - if (sw->peak) { - o = pa_stream_cork(sw->peak, (int)!state, nullptr, nullptr); - if (o) - pa_operation_unref(o); - } - sw->setVolumeMeterVisible(state); - } - for (auto & sourceWidget : sourceWidgets) { - SourceWidget *sw = sourceWidget.second; - if (sw->peak) { - o = pa_stream_cork(sw->peak, (int)!state, nullptr, nullptr); - if (o) - pa_operation_unref(o); - } - sw->setVolumeMeterVisible(state); - } - for (auto & sinkInputWidget : sinkInputWidgets) { - SinkInputWidget *sw = sinkInputWidget.second; - if (sw->peak) { - o = pa_stream_cork(sw->peak, (int)!state, nullptr, nullptr); - if (o) - pa_operation_unref(o); - } - sw->setVolumeMeterVisible(state); - } - for (auto & sourceOutputWidget : sourceOutputWidgets) { - SourceOutputWidget *sw = sourceOutputWidget.second; - if (sw->peak) { - o = pa_stream_cork(sw->peak, (int)!state, nullptr, nullptr); - if (o) - pa_operation_unref(o); - } - sw->setVolumeMeterVisible(state); - } -} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp new file mode 100644 index 0000000..4860f2b --- /dev/null +++ b/src/mainwindow.cpp @@ -0,0 +1,73 @@ +#include "mainwindow.h" +#include "slxoutput.h" + +MainWindow::MainWindow() : QDialog() +{ + setupUi(this); + setWindowFlags(Qt::WindowStaysOnTopHint | windowFlags()); +} + +MainWindow::~MainWindow() +{ + +} + +// Need to pass newSink as new widget's sink isn't set here yet, so always empty +SlxOutput* MainWindow::getOutput(const QString &id, bool isSink, const QString &newTitle) +{ + SlxOutput* w = _widgets.value(id, nullptr); + if (w == nullptr) { + w = new SlxOutput(nullptr, id); + _widgets.insert(id, w); + bool done = false; + printf("New %s - %s\n", isSink ? "SINK" : "PROF", newTitle.toLocal8Bit().constData()); + printf("Conteints: %d\n", container->count()); + int idx; + for (idx = 0; idx < container->count(); ++idx) { + auto *l = container->itemAt(idx); + SlxOutput *other = qobject_cast(l->widget()); + if (other == nullptr) + continue; + printf(" Comparing %s - %s\n", other->isSink() ? "SINK" : "PROF", other->nameLabel->text().toLocal8Bit().constData()); + if (isSink != other->isSink()) { + if (isSink) + break; + continue; + } + if (newTitle.compare(other->nameLabel->text()) < 0) { + done = true; + printf("Inserting before that (%d)!\n", idx); + container->insertWidget(idx, w); + break; + } + } + if (!done) { + if (idx == -1) { + idx = 0; + } + printf("Inserting before that (%d) 2!\n", idx); + container->insertWidget(idx, w); + } + } + return w; +} + +void MainWindow::mark() +{ + for (auto *w : _widgets) { + w->unused = true; + } +} + +void MainWindow::sweep() +{ + for (QMutableMapIterator it(_widgets); it.hasNext(); ) { + it.next(); + auto *w = it.value(); + if (w->unused) { + printf("Killing %p\n", w); + it.remove(); + w->deleteLater(); + } + } +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 9a91fb1..7f792c5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -1,113 +1,28 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef mainwindow_h -#define mainwindow_h - -#include "pavucontrol.h" -#include -#if HAVE_EXT_DEVICE_RESTORE_API -# include -#endif +#ifndef _MAIN_WINDOW_H_ +#define _MAIN_WINDOW_H_ #include +#include + #include "ui_mainwindow.h" -class CardWidget; -class SinkWidget; -class SourceWidget; -class SinkInputWidget; -class SourceOutputWidget; -class RoleWidget; +class SlxOutput; -class MainWindow : public QDialog, public Ui::MainWindow { +class MainWindow : public QDialog, public Ui::MainWindow +{ Q_OBJECT + public: MainWindow(); virtual ~MainWindow(); - void updateCard(const pa_card_info &info); - bool updateSink(const pa_sink_info &info); - void updateSource(const pa_source_info &info); - void updateSinkInput(const pa_sink_input_info &info); - void updateSourceOutput(const pa_source_output_info &info); - void updateClient(const pa_client_info &info); - void updateServer(const pa_server_info &info); - void updateVolumeMeter(uint32_t source_index, uint32_t sink_input_index, double v); - void updateRole(const pa_ext_stream_restore_info &info); -#if HAVE_EXT_DEVICE_RESTORE_API - void updateDeviceInfo(const pa_ext_device_restore_info &info); -#endif - - void removeCard(uint32_t index); - void removeSink(uint32_t index); - void removeSource(uint32_t index); - void removeSinkInput(uint32_t index); - void removeSourceOutput(uint32_t index); - void removeClient(uint32_t index); - - void removeAllWidgets(); + SlxOutput* getOutput(const QString &id, bool isSink, const QString &newTitle); - void setConnectingMessage(const char *string = NULL); - - std::map cardWidgets; - std::map sinkWidgets; - std::map sourceWidgets; - std::map sinkInputWidgets; - std::map sourceOutputWidgets; - - std::map clientNames; - SinkInputType showSinkInputType; - SinkType showSinkType; - SourceOutputType showSourceOutputType; - SourceType showSourceType; - -protected Q_SLOTS: - virtual void onSinkInputTypeComboBoxChanged(int index); - virtual void onSourceOutputTypeComboBoxChanged(int index); - virtual void onSinkTypeComboBoxChanged(int index); - virtual void onSourceTypeComboBoxChanged(int index); - virtual void onShowVolumeMetersCheckButtonToggled(bool toggled); - -public: - void setConnectionState(gboolean connected); - void updateDeviceVisibility(); - void reallyUpdateDeviceVisibility(); - pa_stream* createMonitorStreamForSource(uint32_t source_idx, uint32_t stream_idx, bool suspend); - void createMonitorStreamForSinkInput(SinkInputWidget* w, uint32_t sink_idx); - - void setIconFromProplist(QLabel *icon, pa_proplist *l, const char *name); - - RoleWidget *eventRoleWidget; - - bool createEventRoleWidget(); - void deleteEventRoleWidget(); - - QByteArray defaultSinkName, defaultSourceName; - - bool canRenameDevices; + void mark(); + void sweep(); private: - gboolean m_connected; - gchar* m_config_filename; + QMap _widgets; }; - #endif diff --git a/src/mainwindow.ui b/src/mainwindow.ui index b6cb231..80c81d9 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -6,361 +6,29 @@ 0 0 - 766 - 548 + 587 + 300 - Volume Control - - - - .. - - - QToolButton:checked { -background-color: #aaffaa; -} + Form - - - 0 - - - - &Playback - - - - - - true - - - - - 0 - 0 - 730 - 423 - - - - - 0 - 0 - - - - - - - <i>No application is currently playing audio.</i> - - - - - - - - - - - Show: - - - - - - - - All Streams - - - - - Applications - - - - - Virtual Streams - - - - - - - - - &Recording - - - - - - true - - - - - 0 - 0 - 730 - 423 - - - - - 0 - 0 - - - - - - - <i>No application is currently recording audio.</i> - - - - - - - - - - - Show: - - - - - - - - All Streams - - - - - Applications - - - - - Virtual Streams - - - - - - - - - &Output Devices - - - - - - true - - - - - 0 - 0 - 730 - 423 - - - - - 0 - 0 - - - - - - - <i>No output devices available</i> - - - - - - - - - - - Show: - - - - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - - - - - &Input Devices - - - - - - true - - - - - 0 - 0 - 730 - 423 - - - - - 0 - 0 - - - - - - - <i>No input devices available</i> - - - - - - - - - - - Show: - - - - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - - - - - &Configuration - - - - - - true - - - - - 0 - 0 - 730 - 433 - - - - - 0 - 0 - - - - - - - <i>No cards available for configuration</i> - - - - - - - - - - - Show volume meters - - - - - - + - - - ... - - - Qt::AlignCenter - - - true + + + Qt::Vertical - - Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse + + + 20 + 40 + - + diff --git a/src/minimalstreamwidget.cc b/src/minimalstreamwidget.cc deleted file mode 100644 index a1d2773..0000000 --- a/src/minimalstreamwidget.cc +++ /dev/null @@ -1,89 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "minimalstreamwidget.h" -#include -#include -#include - -/*** MinimalStreamWidget ***/ -MinimalStreamWidget::MinimalStreamWidget(QWidget *parent) : - QWidget(parent), - peakProgressBar(new QProgressBar(this)), - lastPeak(0), - peak(nullptr), - updating(false), - volumeMeterEnabled(false), - volumeMeterVisible(true) { - - peakProgressBar->setTextVisible(false); - peakProgressBar->hide(); -} - -void MinimalStreamWidget::initPeakProgressBar(QGridLayout* channelsGrid) { - channelsGrid->addWidget(peakProgressBar, channelsGrid->rowCount(), 0, 1, -1); -} - -#define DECAY_STEP .04 - -void MinimalStreamWidget::updatePeak(double v) { - - if (lastPeak >= DECAY_STEP) - if (v < lastPeak - DECAY_STEP) - v = lastPeak - DECAY_STEP; - - lastPeak = v; - - if (v >= 0) { - peakProgressBar->setEnabled(TRUE); - int value = qRound(v * peakProgressBar->maximum()); - peakProgressBar->setValue(value); - } else { - peakProgressBar->setEnabled(FALSE); - peakProgressBar->setValue(0); - } - - enableVolumeMeter(); -} - -void MinimalStreamWidget::enableVolumeMeter() { - if (volumeMeterEnabled) - return; - - volumeMeterEnabled = true; - if (volumeMeterVisible) { - peakProgressBar->show(); - } -} - -void MinimalStreamWidget::setVolumeMeterVisible(bool v) { - volumeMeterVisible = v; - if (v) { - if (volumeMeterEnabled) { - peakProgressBar->show(); - } - } else { - peakProgressBar->hide(); - } -} diff --git a/src/minimalstreamwidget.h b/src/minimalstreamwidget.h deleted file mode 100644 index 1c4292c..0000000 --- a/src/minimalstreamwidget.h +++ /dev/null @@ -1,56 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef minimalstreamwidget_h -#define minimalstreamwidget_h - -#include "pavucontrol.h" -#include - -class QProgressBar; -class QGridLayout; - -class MinimalStreamWidget : public QWidget { - Q_OBJECT -public: - MinimalStreamWidget(QWidget* parent = nullptr); - void initPeakProgressBar(QGridLayout* channelsGrid); - - QProgressBar* peakProgressBar; - double lastPeak; - pa_stream *peak; - - bool updating; - - virtual void onMuteToggleButton() = 0; - virtual void onLockToggleButton() = 0; - virtual void updateChannelVolume(int channel, pa_volume_t v) = 0; - - bool volumeMeterEnabled; - void enableVolumeMeter(); - void updatePeak(double v); - void setVolumeMeterVisible(bool v); - -private : - bool volumeMeterVisible; - -}; - -#endif diff --git a/src/pavucontrol-qt.desktop.in b/src/pavucontrol-qt.desktop.in deleted file mode 100644 index b8c1c20..0000000 --- a/src/pavucontrol-qt.desktop.in +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Version=1.0 -Exec=pavucontrol-qt -Icon=multimedia-volume-control -StartupNotify=true -Type=Application -Categories=AudioVideo;Audio;Mixer;Qt; diff --git a/src/pavucontrol.cc b/src/pavucontrol.cc deleted file mode 100644 index 92bcc48..0000000 --- a/src/pavucontrol.cc +++ /dev/null @@ -1,869 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2008 Sjoerd Simons - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define PACKAGE_VERSION "0.1" - -#include -#include -#include -#include - -// #include - -#include "helper.h" -#include "pavucontrol.h" -#include "minimalstreamwidget.h" -#include "channel.h" -#include "streamwidget.h" -#include "cardwidget.h" -#include "sinkwidget.h" -#include "sourcewidget.h" -#include "sinkinputwidget.h" -#include "sourceoutputwidget.h" -#include "rolewidget.h" -#include "mainwindow.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -static pa_context* context = nullptr; -static pa_mainloop_api* api = nullptr; -static int n_outstanding = 0; -static int default_tab = 0; -static bool retry = false; -static int reconnect_timeout = 1; -static QRegularExpression select_output; -static uint32_t select_output_card = UINT32_MAX; - -void show_error(const char *txt) { - char buf[256]; - - snprintf(buf, sizeof(buf), "%s: %s", txt, pa_strerror(pa_context_errno(context))); - - QMessageBox::critical(nullptr, QObject::tr("Error"), QString::fromUtf8(buf)); - qApp->quit(); -} - -static void dec_outstanding(MainWindow *w) { - if (n_outstanding <= 0) - return; - - if (--n_outstanding <= 0) { - // w->get_window()->set_cursor(); - w->setConnectionState(true); - } -} - -static void card_cb(pa_context *, const pa_card_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Card callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - w->updateCard(*i); -} - -static void sink_cb_setdef(pa_context *ctx, const pa_sink_info *sink_info, int eol, void *) { - if (eol < 0) { - if (pa_context_errno(ctx) == PA_ERR_NOENTITY) - return; - show_error(QObject::tr("Card callback failure").toUtf8().constData()); - return; - } - if (eol > 0) - return; - if (sink_info->card != select_output_card) - return; - - printf("Setting default sink of card %d which is sink '%s' (%s)\n", (int)sink_info->card, sink_info->name, sink_info->description); - pa_operation *o; - if (!(o = pa_context_set_default_sink(ctx, sink_info->name, nullptr, nullptr))) { - printf("pa_context_set_default_sink() failed\n"); - return; - } - pa_operation_unref(o); -} - -static void card_cb_setdef(pa_context * ctx, const pa_card_info *card_info, int eol, void *) { - if (eol < 0) { - if (pa_context_errno(ctx) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Card callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - pa_operation *o; - printf("Trying to set default sink to card %d\n", (int)select_output_card); - if (select_output_card != UINT32_MAX) { - if (!(o = pa_context_get_sink_info_list(ctx, sink_cb_setdef, nullptr))) { - show_error(QObject::tr("pa_context_get_sink_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - return; - } - - // TODO Check stuff - - std::set profile_priorities; - std::map ports; - QMap profiles; - - profile_priorities.clear(); - for (pa_card_profile_info2 ** p_profile = card_info->profiles2; p_profile && *p_profile != nullptr; ++p_profile) { - profile_priorities.insert(*p_profile); - } - - populatePorts(*card_info, ports); - groupProfiles(profile_priorities, ports, profiles); - - ProfileGroup *best = nullptr; - for (auto &p : profiles) { - if (p.getProfileName().contains(select_output)) { - // Maybe we should track per-profile availability too and scan the list... - if (best == nullptr || p.available) { - best = &p; - if (select_output_card == UINT32_MAX || p.available) - select_output_card = card_info->index; - if (p.available) - break; - } - } - } - - if (best != nullptr) { - // Can we do this inside the callback? - pa_operation* o; - const auto *entry = best->entries.first().id.constData(); - printf("Selecting profile %s of card %s\n", entry, card_info->name); - if (!(o = pa_context_set_card_profile_by_index(ctx, card_info->index, entry, nullptr, nullptr))) { - printf("pa_context_set_card_profile_by_index() failed\n"); - return; - } - pa_operation_unref(o); - } -} - -static void context_state_callback_setdef(pa_context *c, void *) { - if (pa_context_get_state(c) == PA_CONTEXT_READY) { - pa_operation *o; - if (!(o = pa_context_get_card_info_list(c, card_cb_setdef, nullptr))) { - show_error(QObject::tr("pa_context_get_card_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } -} - -#if HAVE_EXT_DEVICE_RESTORE_API -static void ext_device_restore_subscribe_cb(pa_context *c, pa_device_type_t type, uint32_t idx, void *userdata); -#endif - -void sink_cb(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Sink callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } -#if HAVE_EXT_DEVICE_RESTORE_API - if (w->updateSink(*i)) - ext_device_restore_subscribe_cb(c, PA_DEVICE_TYPE_SINK, i->index, w); -#else - w->updateSink(*i); -#endif -} - -void source_cb(pa_context *, const pa_source_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Source callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - w->updateSource(*i); -} - -void sink_input_cb(pa_context *, const pa_sink_input_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Sink input callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - w->updateSinkInput(*i); -} - -void source_output_cb(pa_context *, const pa_source_output_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Source output callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - - if (n_outstanding > 0) { - /* At this point all notebook pages have been populated, so - * let's open one that isn't empty */ - if (default_tab != -1) { - if (default_tab < 1 || default_tab > w->notebook->count()) { - if (!w->sinkInputWidgets.empty()) - w->notebook->setCurrentIndex(0); - else if (!w->sourceOutputWidgets.empty()) - w->notebook->setCurrentIndex(1); - else if (!w->sourceWidgets.empty() && w->sinkWidgets.empty()) - w->notebook->setCurrentIndex(3); - else - w->notebook->setCurrentIndex(2); - } else { - w->notebook->setCurrentIndex(default_tab - 1); - } - default_tab = -1; - } - } - - dec_outstanding(w); - return; - } - - w->updateSourceOutput(*i); -} - -void client_cb(pa_context *, const pa_client_info *i, int eol, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - if (pa_context_errno(context) == PA_ERR_NOENTITY) - return; - - show_error(QObject::tr("Client callback failure").toUtf8().constData()); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - w->updateClient(*i); -} - -void server_info_cb(pa_context *, const pa_server_info *i, void *userdata) { - MainWindow *w = static_cast(userdata); - - if (!i) { - show_error(QObject::tr("Server info callback failure").toUtf8().constData()); - return; - } - - w->updateServer(*i); - dec_outstanding(w); -} - -void ext_stream_restore_read_cb( - pa_context *, - const pa_ext_stream_restore_info *i, - int eol, - void *userdata) { - - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - dec_outstanding(w); - g_debug(QObject::tr("Failed to initialize stream_restore extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); - w->deleteEventRoleWidget(); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - w->updateRole(*i); -} - -static void ext_stream_restore_subscribe_cb(pa_context *c, void *userdata) { - MainWindow *w = static_cast(userdata); - pa_operation *o; - - if (!(o = pa_ext_stream_restore_read(c, ext_stream_restore_read_cb, w))) { - show_error(QObject::tr("pa_ext_stream_restore_read() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -#if HAVE_EXT_DEVICE_RESTORE_API -void ext_device_restore_read_cb( - pa_context *, - const pa_ext_device_restore_info *i, - int eol, - void *userdata) { - - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - dec_outstanding(w); - g_debug(QObject::tr("Failed to initialize device restore extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); - return; - } - - if (eol > 0) { - dec_outstanding(w); - return; - } - - /* Do something with a widget when this part is written */ - w->updateDeviceInfo(*i); -} - -static void ext_device_restore_subscribe_cb(pa_context *c, pa_device_type_t type, uint32_t idx, void *userdata) { - MainWindow *w = static_cast(userdata); - pa_operation *o; - - if (type != PA_DEVICE_TYPE_SINK) - return; - - if (!(o = pa_ext_device_restore_read_formats(c, type, idx, ext_device_restore_read_cb, w))) { - show_error(QObject::tr("pa_ext_device_restore_read_sink_formats() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} -#endif - -void ext_device_manager_read_cb( - pa_context *, - const pa_ext_device_manager_info *, - int eol, - void *userdata) { - - MainWindow *w = static_cast(userdata); - - if (eol < 0) { - dec_outstanding(w); - g_debug(QObject::tr("Failed to initialize device manager extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); - return; - } - - w->canRenameDevices = true; - - if (eol > 0) { - dec_outstanding(w); - return; - } - - /* Do something with a widget when this part is written */ -} - -static void ext_device_manager_subscribe_cb(pa_context *c, void *userdata) { - MainWindow *w = static_cast(userdata); - pa_operation *o; - - if (!(o = pa_ext_device_manager_read(c, ext_device_manager_read_cb, w))) { - show_error(QObject::tr("pa_ext_device_manager_read() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void subscribe_cb(pa_context *c, pa_subscription_event_type_t t, uint32_t index, void *userdata) { - MainWindow *w = static_cast(userdata); - - switch (t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) { - case PA_SUBSCRIPTION_EVENT_SINK: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeSink(index); - else { - pa_operation *o; - if (!(o = pa_context_get_sink_info_by_index(c, index, sink_cb, w))) { - show_error(QObject::tr("pa_context_get_sink_info_by_index() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_SOURCE: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeSource(index); - else { - pa_operation *o; - if (!(o = pa_context_get_source_info_by_index(c, index, source_cb, w))) { - show_error(QObject::tr("pa_context_get_source_info_by_index() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_SINK_INPUT: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeSinkInput(index); - else { - pa_operation *o; - if (!(o = pa_context_get_sink_input_info(c, index, sink_input_cb, w))) { - show_error(QObject::tr("pa_context_get_sink_input_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeSourceOutput(index); - else { - pa_operation *o; - if (!(o = pa_context_get_source_output_info(c, index, source_output_cb, w))) { - show_error(QObject::tr("pa_context_get_sink_input_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_CLIENT: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeClient(index); - else { - pa_operation *o; - if (!(o = pa_context_get_client_info(c, index, client_cb, w))) { - show_error(QObject::tr("pa_context_get_client_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_SERVER: { - pa_operation *o; - if (!(o = pa_context_get_server_info(c, server_info_cb, w))) { - show_error(QObject::tr("pa_context_get_server_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - case PA_SUBSCRIPTION_EVENT_CARD: - if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) - w->removeCard(index); - else { - pa_operation *o; - if (!(o = pa_context_get_card_info_by_index(c, index, card_cb, w))) { - show_error(QObject::tr("pa_context_get_card_info_by_index() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - } - break; - - } -} - -/* Forward Declaration */ -gboolean connect_to_pulse(gpointer userdata); - -void context_state_callback(pa_context *c, void *userdata) { - MainWindow *w = static_cast(userdata); - - g_assert(c); - - switch (pa_context_get_state(c)) { - case PA_CONTEXT_UNCONNECTED: - case PA_CONTEXT_CONNECTING: - case PA_CONTEXT_AUTHORIZING: - case PA_CONTEXT_SETTING_NAME: - break; - - case PA_CONTEXT_READY: { - pa_operation *o; - - reconnect_timeout = 1; - - /* Create event widget immediately so it's first in the list */ - w->createEventRoleWidget(); - - pa_context_set_subscribe_callback(c, subscribe_cb, w); - - if (!(o = pa_context_subscribe(c, (pa_subscription_mask_t) - (PA_SUBSCRIPTION_MASK_SINK| - PA_SUBSCRIPTION_MASK_SOURCE| - PA_SUBSCRIPTION_MASK_SINK_INPUT| - PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT| - PA_SUBSCRIPTION_MASK_CLIENT| - PA_SUBSCRIPTION_MASK_SERVER| - PA_SUBSCRIPTION_MASK_CARD), nullptr, nullptr))) { - show_error(QObject::tr("pa_context_subscribe() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - - /* Keep track of the outstanding callbacks for UI tweaks */ - n_outstanding = 0; - - if (!(o = pa_context_get_server_info(c, server_info_cb, w))) { - show_error(QObject::tr("pa_context_get_server_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_client_info_list(c, client_cb, w))) { - show_error(QObject::tr("pa_context_client_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_card_info_list(c, card_cb, w))) { - show_error(QObject::tr("pa_context_get_card_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_sink_info_list(c, sink_cb, w))) { - show_error(QObject::tr("pa_context_get_sink_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_source_info_list(c, source_cb, w))) { - show_error(QObject::tr("pa_context_get_source_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_sink_input_info_list(c, sink_input_cb, w))) { - show_error(QObject::tr("pa_context_get_sink_input_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - if (!(o = pa_context_get_source_output_info_list(c, source_output_cb, w))) { - show_error(QObject::tr("pa_context_get_source_output_info_list() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; - - /* These calls are not always supported */ - if ((o = pa_ext_stream_restore_read(c, ext_stream_restore_read_cb, w))) { - pa_operation_unref(o); - n_outstanding++; - - pa_ext_stream_restore_set_subscribe_cb(c, ext_stream_restore_subscribe_cb, w); - - if ((o = pa_ext_stream_restore_subscribe(c, 1, nullptr, nullptr))) - pa_operation_unref(o); - - } else - g_debug(QObject::tr("Failed to initialize stream_restore extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); - -#if HAVE_EXT_DEVICE_RESTORE_API - /* TODO Change this to just the test function */ - if ((o = pa_ext_device_restore_read_formats_all(c, ext_device_restore_read_cb, w))) { - pa_operation_unref(o); - n_outstanding++; - - pa_ext_device_restore_set_subscribe_cb(c, ext_device_restore_subscribe_cb, w); - - if ((o = pa_ext_device_restore_subscribe(c, 1, nullptr, nullptr))) - pa_operation_unref(o); - - } else - g_debug(QObject::tr("Failed to initialize device restore extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); -#endif - - if ((o = pa_ext_device_manager_read(c, ext_device_manager_read_cb, w))) { - pa_operation_unref(o); - n_outstanding++; - - pa_ext_device_manager_set_subscribe_cb(c, ext_device_manager_subscribe_cb, w); - - if ((o = pa_ext_device_manager_subscribe(c, 1, nullptr, nullptr))) - pa_operation_unref(o); - - } else - g_debug(QObject::tr("Failed to initialize device manager extension: %s").toUtf8().constData(), pa_strerror(pa_context_errno(context))); - - - break; - } - - case PA_CONTEXT_FAILED: - w->setConnectionState(false); - - w->removeAllWidgets(); - w->updateDeviceVisibility(); - pa_context_unref(context); - context = nullptr; - - if (reconnect_timeout > 0) { - g_debug("%s", QObject::tr("Connection failed, attempting reconnect").toUtf8().constData()); - g_timeout_add_seconds(reconnect_timeout, connect_to_pulse, w); - } - return; - - case PA_CONTEXT_TERMINATED: - default: - qApp->quit(); - return; - } -} - -pa_context* get_context(void) { - return context; -} - -void update_default_sinks(MainWindow *w) { - pa_operation *o; - if (!(o = pa_context_get_server_info(context, server_info_cb, w))) { - show_error(QObject::tr("pa_context_get_server_info() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - n_outstanding++; -} - -void connectToPulse(void) { - pa_proplist *proplist = pa_proplist_new(); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_NAME, QObject::tr("PulseAudio Volume Control").toUtf8().constData()); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_ID, "org.PulseAudio.pavucontrol"); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_ICON_NAME, "audio-card"); - pa_proplist_sets(proplist, PA_PROP_APPLICATION_VERSION, PACKAGE_VERSION); - - context = pa_context_new_with_proplist(api, nullptr, proplist); - g_assert(context); - - pa_proplist_free(proplist); -} - -gboolean connect_to_pulse(gpointer userdata) { - MainWindow *w = static_cast(userdata); - - if (context) - return false; - - connectToPulse(); - - pa_context_set_state_callback(context, context_state_callback, w); - - w->setConnectingMessage(); - if (pa_context_connect(context, nullptr, PA_CONTEXT_NOFAIL, nullptr) < 0) { - if (pa_context_errno(context) == PA_ERR_INVALID) { - w->setConnectingMessage(QObject::tr("Connection to PulseAudio failed. Automatic retry in 5s.

" - "In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties" - "or default-server in client.conf is misconfigured.
" - "This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window.
" - "If this is the case, then PulseAudio should autospawn again, or if this is not configured you should" - "run start-pulseaudio-x11 manually.").toUtf8().constData()); - reconnect_timeout = 5; - } - else { - if(!retry) { - reconnect_timeout = -1; - qApp->quit(); - } else { - g_debug("%s", QObject::tr("Connection failed, attempting reconnect").toUtf8().constData()); - reconnect_timeout = 5; - g_timeout_add_seconds(reconnect_timeout, connect_to_pulse, userdata); - } - } - } - - return false; -} - -int main(int argc, char *argv[]) { - int exit_code = 0, have_regex = 0; - - signal(SIGPIPE, SIG_IGN); - - QApplication app(argc, argv); - - app.setOrganizationName(QStringLiteral("pavucontrol-qt")); - app.setAttribute(Qt::AA_UseHighDpiPixmaps, true); - - QString locale = QLocale::system().name(); - QTranslator qtTranslator; - if(qtTranslator.load(QStringLiteral("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) - qApp->installTranslator(&qtTranslator); - - QTranslator appTranslator; - if(appTranslator.load(QStringLiteral("pavucontrol-qt_") + locale, QStringLiteral(PAVUCONTROL_QT_DATA_DIR) + QStringLiteral("/translations"))) - qApp->installTranslator(&appTranslator); - - QCommandLineParser parser; - parser.setApplicationDescription(QObject::tr("PulseAudio Volume Control")); - parser.addHelpOption(); - - const QString VERINFO = QStringLiteral(PAVUCONTROLQT_VERSION - "\nQt " QT_VERSION_STR); - app.setApplicationVersion(VERINFO); - parser.addVersionOption(); - - QCommandLineOption tabOption(QStringList() << QStringLiteral("tab") << QStringLiteral("t"), QObject::tr("Select a specific tab on load."), QStringLiteral("tab")); - parser.addOption(tabOption); - - QCommandLineOption retryOption(QStringList() << QStringLiteral("retry") << QStringLiteral("r"), QObject::tr("Retry forever if pa quits (every 5 seconds).")); - parser.addOption(retryOption); - - QCommandLineOption maximizeOption(QStringList() << QStringLiteral("maximize") << QStringLiteral("m"), QObject::tr("Maximize the window.")); - parser.addOption(maximizeOption); - - QCommandLineOption selectOption(QStringList() << QStringLiteral("output") << QStringLiteral("o"), QObject::tr("Select a specific output configuration and quit."), QStringLiteral("regex")); - parser.addOption(selectOption); - - parser.process(app); - default_tab = parser.value(tabOption).toInt(); - retry = parser.isSet(retryOption); - if (parser.isSet(selectOption)) { - select_output = QRegularExpression(parser.value(selectOption)); - if (!select_output.isValid()) { - select_output = QRegularExpression(QRegularExpression::escape(parser.value(selectOption))); - } - have_regex = select_output.isValid(); - } - - if (have_regex) { - pa_mainloop *m = pa_mainloop_new(); - g_assert(m); - api = pa_mainloop_get_api(m); - g_assert(api); - - connectToPulse(); - pa_context_set_state_callback(context, context_state_callback_setdef, nullptr); - if (pa_context_connect(context, nullptr, PA_CONTEXT_NOFAIL, nullptr) >= 0) { - if (pa_context_errno(context) == PA_ERR_INVALID) { - printf("pa_context_errno = PA_ERR_INVALID\n"); - exit_code = 1; - } else { - int evs; - int tries = 50; - exit_code = 100; - // WTF - while ((evs = pa_mainloop_iterate(m, 0, &exit_code)) >= 0) { - if (evs == 0) { - if (--tries == 0) - break; - usleep(20000); - } - } - printf("Exit: %d\n", exit_code); - } - } - - if (context) - pa_context_unref(context); - pa_mainloop_free(m); - } else { - MainWindow* mainWindow = new MainWindow(); - if(parser.isSet(maximizeOption)) - mainWindow->showMaximized(); - - pa_glib_mainloop *m = pa_glib_mainloop_new(g_main_context_default()); - g_assert(m); - api = pa_glib_mainloop_get_api(m); - g_assert(api); - - connect_to_pulse(mainWindow); - if (reconnect_timeout >= 0) { - mainWindow->show(); - app.exec(); - } - - if (reconnect_timeout < 0) - show_error(QObject::tr("Fatal Error: Unable to connect to PulseAudio").toUtf8().constData()); - - delete mainWindow; - - if (context) - pa_context_unref(context); - pa_glib_mainloop_free(m); - } - - return exit_code; -} diff --git a/src/pavucontrol.h b/src/pavucontrol.h deleted file mode 100644 index 3d7fa88..0000000 --- a/src/pavucontrol.h +++ /dev/null @@ -1,69 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef pavucontrol_h -#define pavucontrol_h - -#include -#include -#include - -#include - -/* Can be removed when PulseAudio 0.9.23 or newer is required */ -#ifndef PA_VOLUME_UI_MAX -# define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0)) -#endif - -#define HAVE_SOURCE_OUTPUT_VOLUMES PA_CHECK_VERSION(0,99,0) -#define HAVE_EXT_DEVICE_RESTORE_API PA_CHECK_VERSION(0,99,0) - -enum SinkInputType { - SINK_INPUT_ALL, - SINK_INPUT_CLIENT, - SINK_INPUT_VIRTUAL -}; - -enum SinkType { - SINK_ALL, - SINK_HARDWARE, - SINK_VIRTUAL, -}; - -enum SourceOutputType { - SOURCE_OUTPUT_ALL, - SOURCE_OUTPUT_CLIENT, - SOURCE_OUTPUT_VIRTUAL -}; - -enum SourceType { - SOURCE_ALL, - SOURCE_NO_MONITOR, - SOURCE_HARDWARE, - SOURCE_VIRTUAL, - SOURCE_MONITOR, -}; - -class MainWindow; -void update_default_sinks(MainWindow *w); -pa_context* get_context(void); -void show_error(const char *txt); - -#endif diff --git a/src/resources.qrc b/src/resources.qrc new file mode 100644 index 0000000..3d98cb4 --- /dev/null +++ b/src/resources.qrc @@ -0,0 +1,8 @@ + + + icons/mute-on.svg + icons/mute-off.svg + icons/checkmark.svg + icons/none.svg + + diff --git a/src/rolewidget.cc b/src/rolewidget.cc deleted file mode 100644 index fa415e9..0000000 --- a/src/rolewidget.cc +++ /dev/null @@ -1,65 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "rolewidget.h" - -#include - -RoleWidget::RoleWidget(MainWindow *parent) : - StreamWidget(parent) { - - lockToggleButton->hide(); - directionLabel->hide(); - deviceButton->hide(); - setContextMenuPolicy(Qt::DefaultContextMenu); -} - -void RoleWidget::onMuteToggleButton() { - StreamWidget::onMuteToggleButton(); - - executeVolumeUpdate(); -} - -void RoleWidget::executeVolumeUpdate() { - pa_ext_stream_restore_info info; - - if (updating) - return; - - info.name = role.constData(); - info.channel_map.channels = 1; - info.channel_map.map[0] = PA_CHANNEL_POSITION_MONO; - info.volume = volume; - info.device = device == "" ? nullptr : device.constData(); - info.mute = muteToggleButton->isChecked(); - - pa_operation* o; - if (!(o = pa_ext_stream_restore_write(get_context(), PA_UPDATE_REPLACE, &info, 1, TRUE, nullptr, nullptr))) { - show_error(tr("pa_ext_stream_restore_write() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - diff --git a/src/rolewidget.h b/src/rolewidget.h deleted file mode 100644 index 63ea2c4..0000000 --- a/src/rolewidget.h +++ /dev/null @@ -1,40 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef rolewidget_h -#define rolewidget_h - -#include "pavucontrol.h" - -#include "streamwidget.h" - -class RoleWidget : public StreamWidget { - Q_OBJECT -public: - RoleWidget(MainWindow* parent); - - QByteArray role; - QByteArray device; - - virtual void onMuteToggleButton(); - virtual void executeVolumeUpdate(); -}; - -#endif diff --git a/src/sinkinputwidget.cc b/src/sinkinputwidget.cc deleted file mode 100644 index 81a52e9..0000000 --- a/src/sinkinputwidget.cc +++ /dev/null @@ -1,125 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "sinkinputwidget.h" -#include "mainwindow.h" -#include "sinkwidget.h" -#include - - -SinkInputWidget::SinkInputWidget(MainWindow *parent) : - StreamWidget(parent), - menu{new QMenu{this}} { - - gchar *txt; - directionLabel->setText(QString::fromUtf8(txt = g_markup_printf_escaped("%s", tr("on").toUtf8().constData()))); - g_free(txt); - - terminate->setText(tr("Terminate Playback")); -} - -SinkInputWidget::~SinkInputWidget(void) { -} - -void SinkInputWidget::setSinkIndex(uint32_t idx) { - mSinkIndex = idx; - - if (mpMainWindow->sinkWidgets.count(idx)) { - SinkWidget *w = mpMainWindow->sinkWidgets[idx]; - deviceButton->setText(QString::fromUtf8(w->description)); - } - else - deviceButton->setText(tr("Unknown output")); -} - -uint32_t SinkInputWidget::sinkIndex() { - return mSinkIndex; -} - -void SinkInputWidget::executeVolumeUpdate() { - pa_operation* o; - - if (!(o = pa_context_set_sink_input_volume(get_context(), index, &volume, nullptr, nullptr))) { - show_error(tr("pa_context_set_sink_input_volume() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkInputWidget::onMuteToggleButton() { - StreamWidget::onMuteToggleButton(); - - if (updating) - return; - - pa_operation* o; - if (!(o = pa_context_set_sink_input_mute(get_context(), index, muteToggleButton->isChecked(), nullptr, nullptr))) { - show_error(tr("pa_context_set_sink_input_mute() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkInputWidget::onKill() { - pa_operation* o; - if (!(o = pa_context_kill_sink_input(get_context(), index, nullptr, nullptr))) { - show_error(tr("pa_context_kill_sink_input() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkInputWidget::buildMenu() { - for (auto & sinkWidget : mpMainWindow->sinkWidgets) { - menu->addAction(new SinkMenuItem{this, sinkWidget.second->description.constData(), sinkWidget.second->index, sinkWidget.second->index == mSinkIndex, menu}); - } -} - -void SinkInputWidget::SinkMenuItem::onToggle() { - if (widget->updating) - return; - - if (!isChecked()) - return; - - /*if (!mpMainWindow->sinkWidgets.count(widget->index)) - return;*/ - - pa_operation* o; - if (!(o = pa_context_move_sink_input_by_index(get_context(), widget->index, index, nullptr, nullptr))) { - show_error(tr("pa_context_move_sink_input_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkInputWidget::onDeviceChangePopup() { - menu->clear(); - buildMenu(); - menu->popup(QCursor::pos()); -} diff --git a/src/sinkinputwidget.h b/src/sinkinputwidget.h deleted file mode 100644 index fda790c..0000000 --- a/src/sinkinputwidget.h +++ /dev/null @@ -1,77 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef sinkinputwidget_h -#define sinkinputwidget_h - -#include "pavucontrol.h" - -#include "streamwidget.h" -#include - -class MainWindow; -class QMenu; - -class SinkInputWidget : public StreamWidget { - Q_OBJECT -public: - SinkInputWidget(MainWindow *parent); - ~SinkInputWidget(void); - - SinkInputType type; - - uint32_t index, clientIndex; - void setSinkIndex(uint32_t idx); - uint32_t sinkIndex(); - virtual void executeVolumeUpdate(); - virtual void onMuteToggleButton(); - virtual void onDeviceChangePopup(); - virtual void onKill(); - -private: - uint32_t mSinkIndex; - - void buildMenu(); - - QMenu * menu; - - struct SinkMenuItem : public QAction - { - SinkMenuItem(SinkInputWidget *w - , const char *label - , uint32_t i - , bool active - , QObject * parent = nullptr) - : QAction(QString::fromUtf8(label), parent) - , widget(w) - , index(i) - { - setCheckable(true); - setChecked(active); - connect(this, &QAction::toggled, [this] { onToggle(); }); - } - - SinkInputWidget *widget; - uint32_t index; - void onToggle(); - }; -}; - -#endif diff --git a/src/sinkwidget.cc b/src/sinkwidget.cc deleted file mode 100644 index f404a0b..0000000 --- a/src/sinkwidget.cc +++ /dev/null @@ -1,175 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "sinkwidget.h" - -// #include -#if HAVE_EXT_DEVICE_RESTORE_API -# include -# include -#endif - -SinkWidget::SinkWidget(MainWindow *parent) : - DeviceWidget(parent, "sink") { - -#if HAVE_EXT_DEVICE_RESTORE_API - uint8_t i = 0; - - encodings[i].encoding = PA_ENCODING_PCM; - encodings[i].widget = encodingFormatPCM; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - - ++i; - encodings[i].encoding = PA_ENCODING_AC3_IEC61937; - encodings[i].widget = encodingFormatAC3; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - - ++i; - encodings[i].encoding = PA_ENCODING_EAC3_IEC61937; - encodings[i].widget = encodingFormatEAC3; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - - ++i; - encodings[i].encoding = PA_ENCODING_MPEG_IEC61937; - encodings[i].widget = encodingFormatMPEG; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - - ++i; - encodings[i].encoding = PA_ENCODING_DTS_IEC61937; - encodings[i].widget = encodingFormatDTS; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - - ++i; - encodings[i].encoding = PA_ENCODING_INVALID; - encodings[i].widget = encodingFormatAAC; - encodings[i].widget->setEnabled(false); -#ifdef PA_ENCODING_MPEG2_AAC_IEC61937 - if (pa_context_get_server_protocol_version(get_context()) >= 28) { - encodings[i].encoding = PA_ENCODING_MPEG2_AAC_IEC61937; - connect(encodings[i].widget, &QCheckBox::toggled, this, &SinkWidget::onEncodingsChange); - encodings[i].widget->setEnabled(true); - } -#endif -#endif - -} - -void SinkWidget::executeVolumeUpdate() { - pa_operation* o; - if (!(o = pa_context_set_sink_volume_by_index(get_context(), index, &volume, nullptr, nullptr))) { - show_error(tr("pa_context_set_sink_volume_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkWidget::onMuteToggleButton() { - DeviceWidget::onMuteToggleButton(); - - if (updating) - return; - - pa_operation* o; - if (!(o = pa_context_set_sink_mute_by_index(get_context(), index, muteToggleButton->isChecked(), nullptr, nullptr))) { - show_error(tr("pa_context_set_sink_mute_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SinkWidget::onDefaultToggleButton() { - pa_operation* o; - - if (updating) - return; - - if (!(o = pa_context_set_default_sink(get_context(), name.constData(), nullptr, nullptr))) { - show_error(tr("pa_context_set_default_sink() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - update_default_sinks(mpMainWindow); -} - -void SinkWidget::onPortChange() { - if (updating) - return; - - int sel = portList->currentIndex(); - if (sel != -1) { - pa_operation* o; - QByteArray port = portList->itemData(sel).toString().toUtf8(); - - if (!(o = pa_context_set_sink_port_by_index(get_context(), index, port.constData(), nullptr, nullptr))) { - show_error(tr("pa_context_set_sink_port_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); - } -} - -void SinkWidget::setDigital(bool digital) { -#if HAVE_EXT_DEVICE_RESTORE_API - if (digital) { - encodingSelect->show(); - advancedOptions->setEnabled(true); - } else { - /* advancedOptions is disabled by default */ - encodingSelect->hide(); - } -#endif -} - -void SinkWidget::onEncodingsChange() { -#if HAVE_EXT_DEVICE_RESTORE_API - pa_operation* o; - uint8_t n_formats = 0; - pa_format_info **formats; - - if (updating) - return; - - formats = (pa_format_info**)malloc(sizeof(pa_format_info*) * PAVU_NUM_ENCODINGS); - - for (auto & encoding : encodings) { - if (encoding.widget->isChecked()) { - formats[n_formats] = pa_format_info_new(); - formats[n_formats]->encoding = encoding.encoding; - ++n_formats; - } - } - - if (!(o = pa_ext_device_restore_save_formats(get_context(), PA_DEVICE_TYPE_SINK, index, n_formats, formats, nullptr, nullptr))) { - show_error(tr("pa_ext_device_restore_save_sink_formats() failed").toUtf8().constData()); - free(formats); - return; - } - - free(formats); - pa_operation_unref(o); -#endif -} diff --git a/src/sinkwidget.h b/src/sinkwidget.h deleted file mode 100644 index 74c3b30..0000000 --- a/src/sinkwidget.h +++ /dev/null @@ -1,64 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef sinkwidget_h -#define sinkwidget_h - -#include "pavucontrol.h" -#include "devicewidget.h" - - -#if HAVE_EXT_DEVICE_RESTORE_API -# include - -# define PAVU_NUM_ENCODINGS 6 - -class QCheckBox; - -typedef struct { - pa_encoding encoding; - QCheckBox *widget; -} encodingList; -#endif - -class SinkWidget : public DeviceWidget { - Q_OBJECT -public: - SinkWidget(MainWindow *parent); - - SinkType type; - uint32_t monitor_index; - bool can_decibel; - -#if HAVE_EXT_DEVICE_RESTORE_API - encodingList encodings[PAVU_NUM_ENCODINGS]; -#endif - - virtual void onMuteToggleButton(); - virtual void executeVolumeUpdate(); - virtual void onDefaultToggleButton(); - void setDigital(bool); - -protected Q_SLOTS: - virtual void onPortChange(); - virtual void onEncodingsChange(); -}; - -#endif diff --git a/src/slxoutput.cpp b/src/slxoutput.cpp new file mode 100644 index 0000000..d46b0e9 --- /dev/null +++ b/src/slxoutput.cpp @@ -0,0 +1,82 @@ +#include "slxoutput.h" +#include "main.h" + +SlxOutput::SlxOutput(QWidget *parent, const QString &id) + : unused(false), + QWidget(parent), + _id(id) +{ + setupUi(this); + volumeSlider->setMaximum(65535); + volumeSlider->setSingleStep(200); + volumeSlider->setSingleStep(2000); + _volumeTimer.setInterval(100); + _volumeTimer.setSingleShot(true); + // Events + connect(muteToggleButton, &QToolButton::toggled, [this]() { + if (g_IgnoreGui) + return; + if (_sink.isEmpty()) + return; + setMuted(_sink, muteToggleButton->isChecked()); + }); + connect(defaultToggleButton, &QToolButton::toggled, [this]() { + if (g_IgnoreGui) + return; + if (!defaultToggleButton->isChecked()) { + defaultToggleButton->setChecked(true); + } + if (_sink.isEmpty()) { + enableCard(_card, _port); + } else { + enableSink(_sink, _port); + } + }); + connect(volumeSlider, &QSlider::sliderMoved, this, &SlxOutput::volumeSliderChanged); + connect(volumeSlider, &QSlider::valueChanged, this, &SlxOutput::volumeSliderChanged); + connect(&_volumeTimer, &QTimer::timeout, [this]() { + if (g_IgnoreGui || !isSink()) + return; + setSinkVolume(_sink, volumeSlider->value()); + }); +} + +SlxOutput::~SlxOutput() +{ + +} + +void SlxOutput::volumeSliderChanged(int value) +{ + if (g_IgnoreGui) + return; + if (_volumeTimer.isActive()) + return; + _volumeTimer.start(); +} + +void SlxOutput::updateOutput(const QString &name, bool isDefault, bool isMuted, int volume, const QString &card, const QString &sink, const QString &port) +{ + nameLabel->setText(name); + if (sink != _sink) { + QFont fi = nameLabel->font(); + fi.setBold(!sink.isEmpty()); + nameLabel->setFont(fi); + } + _card = card; + _sink = sink; + _port = port; + defaultToggleButton->setChecked(isDefault); + muteToggleButton->setChecked(isMuted); + if (volume == -1) { + volumeSlider->setEnabled(false); + } else { + if (volume > volumeSlider->maximum()) { + volumeSlider->setMaximum(volume); + } + volumeSlider->setValue(volume); + volumeSlider->setEnabled(isSink()); + } + muteToggleButton->setEnabled(isSink()); + unused = false; +} diff --git a/src/slxoutput.h b/src/slxoutput.h new file mode 100644 index 0000000..15f8554 --- /dev/null +++ b/src/slxoutput.h @@ -0,0 +1,33 @@ +#ifndef _SLX_OUTPUT_H_ +#define _SLX_OUTPUT_H_ + +#include +#include + +#include "ui_slxoutput.h" + +class SlxOutput : public QWidget, public Ui::SlxOutput +{ + Q_OBJECT +public: + SlxOutput(QWidget *parent, const QString &id); + virtual ~SlxOutput(); + + void updateOutput(const QString &name, bool isDefault, bool isMuted, int volume, const QString &card, const QString &sink, const QString &port); + const QString &sink() const { return _sink; } + const bool isSink() const { return !_sink.isEmpty(); } + + bool unused; + +private: + QString _id; + QString _card; + QString _sink; + QString _port; + QTimer _volumeTimer; + +private slots: + void volumeSliderChanged(int value); +}; + +#endif diff --git a/src/slxoutput.ui b/src/slxoutput.ui new file mode 100644 index 0000000..3516d82 --- /dev/null +++ b/src/slxoutput.ui @@ -0,0 +1,103 @@ + + + SlxOutput + + + + 0 + 0 + 400 + 81 + + + + Form + + + + + + + + Set as fallback + + + + :/none + :/checkmark + + + + + 24 + 24 + + + + true + + + + + + + Device Title + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Mute audio + + + + :/mute-off + :/mute-on + + + + + 24 + 24 + + + + true + + + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + + diff --git a/src/sourceoutputwidget.cc b/src/sourceoutputwidget.cc deleted file mode 100644 index 3927dba..0000000 --- a/src/sourceoutputwidget.cc +++ /dev/null @@ -1,136 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "sourceoutputwidget.h" -#include "mainwindow.h" -#include "sourcewidget.h" -#include - -SourceOutputWidget::SourceOutputWidget(MainWindow *parent) : - StreamWidget(parent), - menu{new QMenu{this}} -{ - - gchar *txt = g_markup_printf_escaped("%s", tr("from").toUtf8().constData()); - directionLabel->setText(QString::fromUtf8(static_cast(txt))); - g_free(txt); - - terminate->setText(tr("Terminate Recording")); - -#if !HAVE_SOURCE_OUTPUT_VOLUMES - /* Source Outputs do not have volume controls in versions of PA < 1.0 */ - muteToggleButton->hide(); - lockToggleButton->hide(); -#endif -} - - -SourceOutputWidget::~SourceOutputWidget(void) { -} - -void SourceOutputWidget::setSourceIndex(uint32_t idx) { - mSourceIndex = idx; - - if (mpMainWindow->sourceWidgets.count(idx)) { - SourceWidget *w = mpMainWindow->sourceWidgets[idx]; - deviceButton->setText(QString::fromUtf8(w->description)); - } - else - deviceButton->setText(tr("Unknown input")); -} - -uint32_t SourceOutputWidget::sourceIndex() { - return mSourceIndex; -} - -#if HAVE_SOURCE_OUTPUT_VOLUMES -void SourceOutputWidget::executeVolumeUpdate() { - pa_operation* o; - - if (!(o = pa_context_set_source_output_volume(get_context(), index, &volume, nullptr, nullptr))) { - show_error(tr("pa_context_set_source_output_volume() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SourceOutputWidget::onMuteToggleButton() { - StreamWidget::onMuteToggleButton(); - - if (updating) - return; - - pa_operation* o; - if (!(o = pa_context_set_source_output_mute(get_context(), index, muteToggleButton->isChecked(), nullptr, nullptr))) { - show_error(tr("pa_context_set_source_output_mute() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} -#endif - -void SourceOutputWidget::onKill() { - pa_operation* o; - if (!(o = pa_context_kill_source_output(get_context(), index, nullptr, nullptr))) { - show_error(tr("pa_context_kill_source_output() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - - -void SourceOutputWidget::buildMenu() { - for (auto & sourceWidget : mpMainWindow->sourceWidgets) { - menu->addAction(new SourceMenuItem{this, sourceWidget.second->description.constData(), sourceWidget.second->index, sourceWidget.second->index == mSourceIndex, menu}); - } -} - -void SourceOutputWidget::SourceMenuItem::onToggle() { - - if (widget->updating) - return; - - if (!isChecked()) - return; - - /*if (!mpMainWindow->sourceWidgets.count(widget->index)) - return;*/ - - pa_operation* o; - if (!(o = pa_context_move_source_output_by_index(get_context(), widget->index, index, nullptr, nullptr))) { - show_error(tr("pa_context_move_source_output_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SourceOutputWidget::onDeviceChangePopup() { - menu->clear(); - buildMenu(); - menu->popup(QCursor::pos()); -} diff --git a/src/sourceoutputwidget.h b/src/sourceoutputwidget.h deleted file mode 100644 index d30f83a..0000000 --- a/src/sourceoutputwidget.h +++ /dev/null @@ -1,80 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef sourceoutputwidget_h -#define sourceoutputwidget_h - -#include "pavucontrol.h" - -#include "streamwidget.h" -#include - -class MainWindow; -class QMenu; - -class SourceOutputWidget : public StreamWidget { - Q_OBJECT -public: - SourceOutputWidget(MainWindow *parent); - ~SourceOutputWidget(void); - - SourceOutputType type; - - uint32_t index, clientIndex; - void setSourceIndex(uint32_t idx); - uint32_t sourceIndex(); -#if HAVE_SOURCE_OUTPUT_VOLUMES - virtual void executeVolumeUpdate(); - virtual void onMuteToggleButton(); -#endif - virtual void onDeviceChangePopup(); - virtual void onKill(); - -private: - uint32_t mSourceIndex; - - void clearMenu(); - void buildMenu(); - - QMenu * menu; - - struct SourceMenuItem : public QAction - { - SourceMenuItem(SourceOutputWidget *w - , const char *label - , uint32_t i - , bool active - , QObject * parent = nullptr) - : QAction{QString::fromUtf8(label), parent} - , widget(w) - , index(i) - { - setCheckable(true); - setChecked(active); - connect(this, &QAction::toggled, [this] { onToggle(); }); - } - - SourceOutputWidget *widget; - uint32_t index; - void onToggle(); - }; -}; - -#endif diff --git a/src/sourcewidget.cc b/src/sourcewidget.cc deleted file mode 100644 index 6dbfeea..0000000 --- a/src/sourcewidget.cc +++ /dev/null @@ -1,87 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "sourcewidget.h" - -SourceWidget::SourceWidget(MainWindow *parent) : - DeviceWidget(parent, "source") { -} - -void SourceWidget::executeVolumeUpdate() { - pa_operation* o; - - if (!(o = pa_context_set_source_volume_by_index(get_context(), index, &volume, nullptr, nullptr))) { - show_error(tr("pa_context_set_source_volume_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SourceWidget::onMuteToggleButton() { - DeviceWidget::onMuteToggleButton(); - - if (updating) - return; - - pa_operation* o; - if (!(o = pa_context_set_source_mute_by_index(get_context(), index, muteToggleButton->isChecked(), nullptr, nullptr))) { - show_error(tr("pa_context_set_source_mute_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); -} - -void SourceWidget::onDefaultToggleButton() { - pa_operation* o; - - if (updating) - return; - - if (!(o = pa_context_set_default_source(get_context(), name.constData(), nullptr, nullptr))) { - show_error(tr("pa_context_set_default_source() failed").toUtf8().constData()); - return; - } - pa_operation_unref(o); - update_default_sinks(mpMainWindow); -} - -void SourceWidget::onPortChange() { - if (updating) - return; - - int current = portList->currentIndex(); - if (current != -1) { - pa_operation* o; - QByteArray port = portList->itemData(current).toByteArray(); - - if (!(o = pa_context_set_source_port_by_index(get_context(), index, port.constData(), nullptr, nullptr))) { - show_error(tr("pa_context_set_source_port_by_index() failed").toUtf8().constData()); - return; - } - - pa_operation_unref(o); - } -} diff --git a/src/sourcewidget.h b/src/sourcewidget.h deleted file mode 100644 index c329c77..0000000 --- a/src/sourcewidget.h +++ /dev/null @@ -1,45 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef sourcewidget_h -#define sourcewidget_h - -#include "pavucontrol.h" - -#include "devicewidget.h" - -class SourceWidget : public DeviceWidget { - Q_OBJECT -public: - SourceWidget(MainWindow *parent); - static SourceWidget* create(MainWindow* mainWindow); - - SourceType type; - bool can_decibel; - - virtual void onMuteToggleButton(); - virtual void executeVolumeUpdate(); - virtual void onDefaultToggleButton(); - -protected: - virtual void onPortChange(); -}; - -#endif diff --git a/src/streamwidget.cc b/src/streamwidget.cc deleted file mode 100644 index f7b06e0..0000000 --- a/src/streamwidget.cc +++ /dev/null @@ -1,134 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "streamwidget.h" -#include "mainwindow.h" -#include "channel.h" -#include - -/*** StreamWidget ***/ -StreamWidget::StreamWidget(MainWindow *parent) : - MinimalStreamWidget(parent), - mpMainWindow(parent), - terminate{new QAction{tr("Terminate"), this}} { - - setupUi(this); - initPeakProgressBar(channelsGrid); - - timeout.setSingleShot(true); - timeout.setInterval(100); - connect(&timeout, &QTimer::timeout, this, &StreamWidget::timeoutEvent); - - connect(muteToggleButton, &QToolButton::toggled, this, &StreamWidget::onMuteToggleButton); - connect(lockToggleButton, &QToolButton::toggled, this, &StreamWidget::onLockToggleButton); - connect(deviceButton, &QAbstractButton::released, this, &StreamWidget::onDeviceChangePopup); - - connect(terminate, &QAction::triggered, this, &StreamWidget::onKill); - addAction(terminate); - setContextMenuPolicy(Qt::ActionsContextMenu); - - for (auto & channel : channels) - channel = nullptr; -} - -void StreamWidget::setChannelMap(const pa_channel_map &m, bool can_decibel) { - channelMap = m; - - for (int i = 0; i < m.channels; i++) { - Channel *ch = channels[i] = new Channel(channelsGrid); - ch->channel = i; - ch->can_decibel = can_decibel; - ch->minimalStreamWidget = this; - char text[64]; - snprintf(text, sizeof(text), "%s", pa_channel_position_to_pretty_string(m.map[i])); - ch->channelLabel->setText(QString::fromUtf8(text)); - } - channels[m.channels-1]->last = true; - channels[m.channels-1]->setBaseVolume(PA_VOLUME_NORM); - - lockToggleButton->setEnabled(m.channels > 1); - hideLockedChannels(lockToggleButton->isChecked()); -} - -void StreamWidget::setVolume(const pa_cvolume &v, bool force) { - g_assert(v.channels == channelMap.channels); - - volume = v; - - if (!timeout.isActive() || force) { /* do not update the volume when a volume change is still in flux */ - for (int i = 0; i < volume.channels; i++) - channels[i]->setVolume(volume.values[i]); - } -} - -void StreamWidget::updateChannelVolume(int channel, pa_volume_t v) { - pa_cvolume n; - g_assert(channel < volume.channels); - - n = volume; - if (lockToggleButton->isChecked()) { - for (int i = 0; i < n.channels; i++) - n.values[i] = v; - } else - n.values[channel] = v; - - setVolume(n, true); - - if(!timeout.isActive()) { - timeout.start(); - } -} - -void StreamWidget::hideLockedChannels(bool hide) { - for (int i = 0; i < channelMap.channels - 1; i++) - channels[i]->setVisible(!hide); - - channels[channelMap.channels - 1]->channelLabel->setVisible(!hide); -} - -void StreamWidget::onMuteToggleButton() { - - lockToggleButton->setEnabled(!muteToggleButton->isChecked()); - - for (int i = 0; i < channelMap.channels; i++) - channels[i]->setEnabled(!muteToggleButton->isChecked()); -} - -void StreamWidget::onLockToggleButton() { - hideLockedChannels(lockToggleButton->isChecked()); -} - -bool StreamWidget::timeoutEvent() { - executeVolumeUpdate(); - return false; -} - -void StreamWidget::executeVolumeUpdate() { -} - -void StreamWidget::onDeviceChangePopup() { -} - -void StreamWidget::onKill() { -} diff --git a/src/streamwidget.h b/src/streamwidget.h deleted file mode 100644 index 7db5251..0000000 --- a/src/streamwidget.h +++ /dev/null @@ -1,68 +0,0 @@ -/*** - This file is part of pavucontrol. - - Copyright 2006-2008 Lennart Poettering - Copyright 2009 Colin Guthrie - - pavucontrol is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 2 of the License, or - (at your option) any later version. - - pavucontrol is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with pavucontrol. If not, see . -***/ - -#ifndef streamwidget_h -#define streamwidget_h - -#include "pavucontrol.h" - -#include "minimalstreamwidget.h" -#include "ui_streamwidget.h" -#include - -class MainWindow; -class Channel; -class QAction; - -class StreamWidget : public MinimalStreamWidget, public Ui::StreamWidget { - Q_OBJECT -public: - StreamWidget(MainWindow *parent); - - void setChannelMap(const pa_channel_map &m, bool can_decibel); - void setVolume(const pa_cvolume &volume, bool force = false); - virtual void updateChannelVolume(int channel, pa_volume_t v); - - void hideLockedChannels(bool hide = true); - - pa_channel_map channelMap; - pa_cvolume volume; - - Channel *channels[PA_CHANNELS_MAX]; - - virtual void onMuteToggleButton(); - virtual void onLockToggleButton(); - virtual void onDeviceChangePopup(); - // virtual bool onContextTriggerEvent(GdkEventButton*); - - QTimer timeout; - - bool timeoutEvent(); - - virtual void executeVolumeUpdate(); - virtual void onKill(); - -protected: - MainWindow* mpMainWindow; - - QAction * terminate; -}; - -#endif diff --git a/src/streamwidget.ui b/src/streamwidget.ui deleted file mode 100644 index b4f7d69..0000000 --- a/src/streamwidget.ui +++ /dev/null @@ -1,115 +0,0 @@ - - - StreamWidget - - - - 0 - 0 - 416 - 103 - - - - Form - - - - - - - - - - - - - - - - - - Device Title - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - direction - - - - - - - device - - - - - - - Mute audio - - - - - - true - - - - - - - Lock channels together - - - - - - true - - - true - - - - - - - - - - - - Qt::Horizontal - - - - - - - - ElidingLabel - QLabel -
elidinglabel.h
-
-
- - -
diff --git a/src/translations/CMakeLists.txt b/src/translations/CMakeLists.txt deleted file mode 100644 index 59d51bd..0000000 --- a/src/translations/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -project(pavucontrol-qt) - -build_component("." "${CMAKE_INSTALL_FULL_DATADIR}/pavucontrol-qt/translations") diff --git a/src/translations/pavucontrol-qt.desktop.yaml b/src/translations/pavucontrol-qt.desktop.yaml deleted file mode 100644 index c7e2ba0..0000000 --- a/src/translations/pavucontrol-qt.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio Volume Control" -Desktop Entry/GenericName: "Volume Control" -Desktop Entry/Comment: "Adjust the volume level" diff --git a/src/translations/pavucontrol-qt.ts b/src/translations/pavucontrol-qt.ts deleted file mode 100644 index 3b80447..0000000 --- a/src/translations/pavucontrol-qt.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - - - - - <i>No application is currently playing audio.</i> - - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - <i>No application is currently recording audio.</i> - - - - - <i>No output devices available</i> - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Playback - - - - - &Recording - - - - - &Output Devices - - - - - &Input Devices - - - - - <i>No input devices available</i> - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - - - - - <i>No cards available for configuration</i> - - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - - - - - Peak detect - - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - - - - - pa_ext_stream_restore_read() failed - - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - - - - - pa_context_get_source_info_by_index() failed - - - - - - pa_context_get_sink_input_info() failed - - - - - pa_context_get_client_info() failed - - - - - - pa_context_get_server_info() failed - - - - - pa_context_get_card_info_by_index() failed - - - - - pa_context_subscribe() failed - - - - - pa_context_client_info_list() failed - - - - - pa_context_get_card_info_list() failed - - - - - pa_context_get_sink_info_list() failed - - - - - pa_context_get_source_info_list() failed - - - - - pa_context_get_sink_input_info_list() failed - - - - - pa_context_get_source_output_info_list() failed - - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - - - - - pa_context_set_sink_input_mute() failed - - - - - pa_context_kill_sink_input() failed - - - - - pa_context_move_sink_input_by_index() failed - - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - - - - - pa_context_set_sink_mute_by_index() failed - - - - - pa_context_set_default_sink() failed - - - - - pa_context_set_sink_port_by_index() failed - - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - - - - - pa_context_move_source_output_by_index() failed - - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - - - - - pa_context_set_source_mute_by_index() failed - - - - - pa_context_set_default_source() failed - - - - - pa_context_set_source_port_by_index() failed - - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - - - - diff --git a/src/translations/pavucontrol-qt_arn.ts b/src/translations/pavucontrol-qt_arn.ts deleted file mode 100644 index 0383dac..0000000 --- a/src/translations/pavucontrol-qt_arn.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - - - - - <i>No application is currently playing audio.</i> - - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - <i>No application is currently recording audio.</i> - - - - - <i>No output devices available</i> - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Playback - - - - - &Recording - - - - - &Output Devices - - - - - &Input Devices - - - - - <i>No input devices available</i> - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - - - - - <i>No cards available for configuration</i> - - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - - - - - Peak detect - - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - - - - - pa_ext_stream_restore_read() failed - - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - - - - - pa_context_get_source_info_by_index() failed - - - - - - pa_context_get_sink_input_info() failed - - - - - pa_context_get_client_info() failed - - - - - - pa_context_get_server_info() failed - - - - - pa_context_get_card_info_by_index() failed - - - - - pa_context_subscribe() failed - - - - - pa_context_client_info_list() failed - - - - - pa_context_get_card_info_list() failed - - - - - pa_context_get_sink_info_list() failed - - - - - pa_context_get_source_info_list() failed - - - - - pa_context_get_sink_input_info_list() failed - - - - - pa_context_get_source_output_info_list() failed - - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - - - - - pa_context_set_sink_input_mute() failed - - - - - pa_context_kill_sink_input() failed - - - - - pa_context_move_sink_input_by_index() failed - - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - - - - - pa_context_set_sink_mute_by_index() failed - - - - - pa_context_set_default_sink() failed - - - - - pa_context_set_sink_port_by_index() failed - - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - - - - - pa_context_move_source_output_by_index() failed - - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - - - - - pa_context_set_source_mute_by_index() failed - - - - - pa_context_set_default_source() failed - - - - - pa_context_set_source_port_by_index() failed - - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - - - - diff --git a/src/translations/pavucontrol-qt_as.ts b/src/translations/pavucontrol-qt_as.ts deleted file mode 100644 index 6b8f5bf..0000000 --- a/src/translations/pavucontrol-qt_as.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - কাৰ্ডৰ নাম - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() বিফল - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>নিঃশব্দ</small> - - - - <small>Min</small> - <small>সৰ্বাধিক</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>আধাৰ</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>left-front</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>পৰিলেখ:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - শব্দৰ মাত্ৰা নিয়ন্ত্ৰণকাৰী - - - - &Playback - প্লেবেক (&P) - - - - <i>No application is currently playing audio.</i> - <i>বৰ্ত্তমানে কোনো অনুপ্ৰয়োগে অ'ডিঅ' বজোৱা নাই</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - ৰেকৰ্ডিং (&R) - - - - <i>No application is currently recording audio.</i> - <i>বৰ্ত্তমানে কোনো অনুপ্ৰয়োগে অ'ডিঅ' ৰেকৰ্ড কৰা নাই</i> - - - - &Output Devices - নিৰ্গম যন্ত্ৰ (&O) - - - - <i>No output devices available</i> - <i>কোনো নিৰ্গম যন্ত্ৰ নাই</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - নিবেশ যন্ত্ৰ (&I) - - - - <i>No input devices available</i> - <i>কোনো নিবেশ যন্ত্ৰ নাই</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - বিন্যাস (&C) - - - - <i>No cards available for configuration</i> - <i>বিন্যাসৰ কাৰণে কোনো কাৰ্ড নাই</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - স্ট্ৰিমৰ পৰা তথ্য পঢ়িবলৈ বিফল - - - - Peak detect - সৰ্বাধিক মাত্ৰা চিনাক্ত - - - - Failed to create monitoring stream - monitoring stream নিৰ্মাণ কৰোঁতে ব্যৰ্থ - - - - Failed to connect monitoring stream - monitoring stream লৈ সংয়োগ কৰিবলৈ অক্ষম - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - ব্যৱস্থাপ্ৰণালীৰ শব্দ - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - কাৰ্ডৰ callback বিফলতা - - - - Sink callback failure - Sink callback বিফলতা - - - - Source callback failure - উৎসৰ callback বিফলতা - - - - Sink input callback failure - Sink নিবেশ callback বিফলতা - - - - Source output callback failure - উৎসৰ নিৰ্গমৰ callback বিফলতা - - - - Client callback failure - গ্ৰাহক callback বিফলতা - - - - Server info callback failure - সেৱক তথ্য callback বিফলতা - - - - - Failed to initialize stream_restore extension: %s - stream restore সম্প্ৰসাৰণ আৰম্ভ কৰিবলৈ বিফলতা (_r): %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() বিফল - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() বিফল - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() বিফল - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() বিফল - - - - pa_context_get_client_info() failed - pa_context_get_client_info() বিফল - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() বিফল - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() বিফল - - - - pa_context_subscribe() failed - pa_context_subscribe() বিফল - - - - pa_context_client_info_list() failed - pa_context_client_info_list() বিফল - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() বিফল - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() বিফল - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() বিফল - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() বিফল - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() বিফল - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio শব্দৰ মাত্ৰা নিয়ন্ত্ৰণকাৰী - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() বিফল - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() বিফল - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() বিফল - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() বিফল - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() বিফল - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() বিফল - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() বিফল - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() বিফল - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_mute_by_index() বিফল - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() বিফল - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() বিফল - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() বিফল - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() বিফল - - - - pa_context_set_default_source() failed - pa_context_set_default_source() বিফল - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_mute_by_index() বিফল - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - স্ট্ৰিম বন্ধ কৰক (&T) - - - diff --git a/src/translations/pavucontrol-qt_ast.ts b/src/translations/pavucontrol-qt_ast.ts deleted file mode 100644 index edff082..0000000 --- a/src/translations/pavucontrol-qt_ast.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - - - - - <i>No application is currently playing audio.</i> - - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - <i>No application is currently recording audio.</i> - - - - - <i>No output devices available</i> - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Playback - - - - - &Recording - - - - - &Output Devices - - - - - &Input Devices - - - - - <i>No input devices available</i> - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - - - - - <i>No cards available for configuration</i> - - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - - - - - Peak detect - - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - - - - - pa_ext_stream_restore_read() failed - - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - - - - - pa_context_get_source_info_by_index() failed - - - - - - pa_context_get_sink_input_info() failed - - - - - pa_context_get_client_info() failed - - - - - - pa_context_get_server_info() failed - - - - - pa_context_get_card_info_by_index() failed - - - - - pa_context_subscribe() failed - - - - - pa_context_client_info_list() failed - - - - - pa_context_get_card_info_list() failed - - - - - pa_context_get_sink_info_list() failed - - - - - pa_context_get_source_info_list() failed - - - - - pa_context_get_sink_input_info_list() failed - - - - - pa_context_get_source_output_info_list() failed - - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - - - - - pa_context_set_sink_input_mute() failed - - - - - pa_context_kill_sink_input() failed - - - - - pa_context_move_sink_input_by_index() failed - - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - - - - - pa_context_set_sink_mute_by_index() failed - - - - - pa_context_set_default_sink() failed - - - - - pa_context_set_sink_port_by_index() failed - - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - - - - - pa_context_move_source_output_by_index() failed - - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - - - - - pa_context_set_source_mute_by_index() failed - - - - - pa_context_set_default_source() failed - - - - - pa_context_set_source_port_by_index() failed - - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - - - - diff --git a/src/translations/pavucontrol-qt_bg.desktop.yaml b/src/translations/pavucontrol-qt_bg.desktop.yaml deleted file mode 100644 index 86c3b09..0000000 --- a/src/translations/pavucontrol-qt_bg.desktop.yaml +++ /dev/null @@ -1,4 +0,0 @@ -Desktop Entry/Name: "Контрол на звука" -Desktop Entry/GenericName: "PulseAudio настройки на звука" -Desktop Entry/Comment: "Конфигуриране на устройствата за възпроизвеждане и запис на\ - \ звук" diff --git a/src/translations/pavucontrol-qt_bg.ts b/src/translations/pavucontrol-qt_bg.ts deleted file mode 100644 index f8486d7..0000000 --- a/src/translations/pavucontrol-qt_bg.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Форма - - - - Card Name - Име на звукова карта - - - - Profile: - Профил: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() неуспешно - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - Заглушаване - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - База - - - - ChannelWidget - - - Form - Форма - - - - <b>left-front</b> - <b>лява-предна</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Форма - - - - Device Title - Заглавие на устройство - - - - Mute audio - Заглушаване - - - - Lock channels together - Свързване на каналите - - - - Set as fallback - Задаване като резервно устройство - - - - <b>Port:</b> - <b>Порт:</b> - - - - Show advanced options - Показване на разширени опции - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Изместване на латентност:</b> - - - - ms - ms - - - - Rename device... - Преименуване на устройство... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() неуспешно - - - - Sorry, but device renaming is not supported. - За съжаление преименуване на устройството не се поддържа. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Необходимо е зареждане на module-device-manager в PulseAudio за преименуване на устройство - - - - Rename device %1 to: - Преименуване на устройство %1 като: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() неуспешно - - - - MainWindow - - - Volume Control - Контрол на звука - - - - <i>No application is currently playing audio.</i> - <i>Понастоящем нито едно приложение не възпроизвежда аудио.</i> - - - - - - - Show: - Показване: - - - - - All Streams - Всички потоци - - - - - Applications - Приложения - - - - - Virtual Streams - Виртуални потоци - - - - <i>No application is currently recording audio.</i> - <i>Понастоящем нито едно приложение не записва аудио.</i> - - - - <i>No output devices available</i> - <i>Не е налично изходно устройство</i> - - - - All Output Devices - Всички изходни устройства - - - - Hardware Output Devices - Хардуерни изходни устройства - - - - Virtual Output Devices - Виртуални изходни устройства - - - - &Playback - &Възпроизвеждане - - - - &Recording - &Записване - - - - &Output Devices - &Изходни устройства - - - - &Input Devices - &Входни устройства - - - - <i>No input devices available</i> - <i>Не е налично входно устройство</i> - - - - All Input Devices - Всички входни устройства - - - - All Except Monitors - Всички без монитори - - - - Hardware Input Devices - Хардуерни входни устройства - - - - Virtual Input Devices - Виртуални входни устройства - - - - Monitors - Монитори - - - - &Configuration - &Конфигуриране - - - - <i>No cards available for configuration</i> - <i>Не са налични устройства за конфигуриране</i> - - - - Show volume meters - Показване скалите за силата на звука - - - - ... - ... - - - - (plugged in) - (включен) - - - - - (unavailable) - (не е налично) - - - - - (unplugged) - (изключен) - - - - Failed to read data from stream - Четенето на данни от потока неуспешно - - - - Peak detect - Детекция на пикове - - - - Failed to create monitoring stream - Създаването на поток за мониториране неуспешно - - - - Failed to connect monitoring stream - Свързването към поток за мониториране неуспешно - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Игнориране на входните данни на устройството поради това, че са определени като събитие и по този начин се обработват от Event widget - - - - System Sounds - Системни звуци - - - - Establishing connection to PulseAudio. Please wait... - Установяване връзка с PulseAudio. Моля изчакайте... - - - - QObject - - - Error - Грешка - - - - Card callback failure - Неуспешен обратен отговор на картата - - - - Sink callback failure - Неуспешен обратен отговор на дигиталния вход - - - - Source callback failure - Неуспешен обратен отговор на дигиталния източник - - - - Sink input callback failure - Неуспешен обратен отговор на дигиталния вход - - - - Source output callback failure - Неуспешен обратен отговор на дигиталния вход - - - - Client callback failure - Неуспешен обратен отговор на клиента - - - - Server info callback failure - Неуспешен обратен отговор от сървъра - - - - - Failed to initialize stream_restore extension: %s - Неуспешно инициализиране на stream_restore разширение: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() неуспешно - - - - - Failed to initialize device restore extension: %s - Неуспешно инициализиране на device restore разширение: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() неуспешно - - - - - Failed to initialize device manager extension: %s - Неуспешно инициализиране на device manager разширение: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() неуспешно - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() неуспешно - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() неуспешно - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() неуспешно - - - - pa_context_get_client_info() failed - pa_context_get_client_info() неуспешно - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() неуспешно - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() неуспешно - - - - pa_context_subscribe() failed - pa_context_subscribe() неуспешно - - - - pa_context_client_info_list() failed - pa_context_client_info_list() неуспешно - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() неуспешно - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() неуспешно - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() неуспешно - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() неуспешно - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() неуспешно - - - - - Connection failed, attempting reconnect - Свързването неуспешно, опитване повторно свързване - - - - - PulseAudio Volume Control - PulseAudio Контрол на звука - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Връзката с PulseAudio не бе успешна. Автоматичен повторен опит след 5 секунди - -Вероятна причина за това е неправилно конфигуриране на PULSE_SERVER в Environment / X11 Root Window Properties -или сървърът по подразбиране в client.conf . -Тази ситуация може също да възникне, когато PulseAudio се срине и остави неактуални детайли в X11 Root Window. -Ако случаят е такъв, тогава PulseAudio трябва да се стартира автоматично отново или ако това не е конфигурирано, трябва -да изпълните ръчно start-pulseaudio-x11. - - - - Select a specific tab on load. - Избиране на определен раздел при зареждане. - - - - Retry forever if pa quits (every 5 seconds). - Повторни опитвания без прекъсване, ако pa прекъсне (всеки 5 секунди). - - - - Maximize the window. - Максимализиране на прозореца. - - - - Fatal Error: Unable to connect to PulseAudio - Фатална грешка: Невъзможна връзка с PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() неуспешно - - - - SinkInputWidget - - - on - включен - - - - Terminate Playback - Спиране на възпроизвеждането - - - - Unknown output - Неизвестен изход - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() неуспешно - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() неуспешно - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() неуспешно - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() неуспешно - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() неуспешно - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() неуспешно - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() неуспешно - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() неуспешно - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() неуспешно - - - - SourceOutputWidget - - - from - от - - - - Terminate Recording - Спиране на записването - - - - Unknown input - Неизвестен вход - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() неуспешно - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() неуспешно - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() неуспешно - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() неуспешно - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() неуспешно - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() неуспешно - - - - pa_context_set_default_source() failed - pa_context_set_default_source() неуспешно - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() неуспешно - - - - StreamWidget - - - Form - Форма - - - - Device Title - Заглавие на устройство - - - - direction - посока - - - - device - устройство - - - - Mute audio - Заглушаване - - - - Lock channels together - Свързване на каналите - - - - Terminate - Спиране - - - diff --git a/src/translations/pavucontrol-qt_bn_IN.ts b/src/translations/pavucontrol-qt_bn_IN.ts deleted file mode 100644 index c9d59ae..0000000 --- a/src/translations/pavucontrol-qt_bn_IN.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - কার্ডের নাম - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ব্যর্থ - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>নিঃশব্দ</small> - - - - <small>Min</small> - <small>সর্বনিম্ন</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>বেস</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>সামনে বাঁদিকে</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>পোর্ট:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - শব্দের মাত্রা নিয়ন্ত্রণ - - - - &Playback - প্লে-ব্যাক (&P) - - - - <i>No application is currently playing audio.</i> - <i>কোনো অ্যাপ্লিকেশন দ্বারা বর্তমানে অডিও বাজানো হচ্ছে না।</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - রেকর্ডিং (&R) - - - - <i>No application is currently recording audio.</i> - <i>কোনো অ্যাপ্লিকেশন দ্বারা বর্তমানে অডিও রেকর্ড হচ্ছে না।</i> - - - - &Output Devices - আউটপুট ডিভাইস (&O) - - - - <i>No output devices available</i> - <i>কোনো আউটপুট ডিভাইস উপলব্ধ নেই</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - ইনপুট ডিভাইস (&I) - - - - <i>No input devices available</i> - <i>কোনো ইনপুট ডিভাইস উপলব্ধ নেই</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - কনফিগারেশন (&C) - - - - <i>No cards available for configuration</i> - <i>কনফিগারেশনের জন্য কোনো কার্ড উপলব্ধ নেই</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - স্ট্রিম থেকে তথ্য পড়তে ব্যর্থ - - - - Peak detect - চুড়ান্ত মাপ সনাক্ত হয়েছে - - - - Failed to create monitoring stream - নিরীক্ষণের স্ট্রিম নির্মাণ করতে ব্যর্থ - - - - Failed to connect monitoring stream - নিরীক্ষণের স্ট্রিম সংযুক্ত করতে ব্যর্থ - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - সিস্টেমের শব্দ - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - কার্ড কল-ব্যাক বিফল - - - - Sink callback failure - সিংক কল-ব্যাক বিফল - - - - Source callback failure - সোর্স কল-ব্যাক বিফল - - - - Sink input callback failure - সিংক ইনপুট কল-ব্যাক বিফল - - - - Source output callback failure - সোর্স আউটপুট কল-ব্যাক বিফল - - - - Client callback failure - ক্লায়েন্ট কল-ব্যাক বিফল - - - - Server info callback failure - সার্ভার ইনফো কল-ব্যাক বিফল - - - - - Failed to initialize stream_restore extension: %s - stream_restore এক্সটেনশন আরম্ভ করতে ব্যর্থ: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ব্যর্থ - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ব্যর্থ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ব্যর্থ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ব্যর্থ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ব্যর্থ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ব্যর্থ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ব্যর্থ - - - - pa_context_subscribe() failed - pa_context_subscribe() ব্যর্থ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ব্যর্থ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ব্যর্থ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ব্যর্থ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ব্যর্থ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ব্যর্থ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ব্যর্থ - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio শব্দের মাত্রা নিয়ন্ত্রণ ব্যবস্থা - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ব্যর্থ - - - - SinkInputWidget - - - on - চালু - - - - Terminate Playback - - - - - Unknown output - অজানা আউটপুট - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ব্যর্থ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ব্যর্থ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ব্যর্থ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ব্যর্থ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ব্যর্থ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ব্যর্থ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ব্যর্থ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ব্যর্থ - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - আরম্ভ - - - - Terminate Recording - - - - - Unknown input - অজানা ইনপুট - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ব্যর্থ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ব্যর্থ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ব্যর্থ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ব্যর্থ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ব্যর্থ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ব্যর্থ - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - দিশা - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - প্লে-ব্যাক বন্ধ করুন - - - diff --git a/src/translations/pavucontrol-qt_ca.desktop.yaml b/src/translations/pavucontrol-qt_ca.desktop.yaml deleted file mode 100644 index 022525a..0000000 --- a/src/translations/pavucontrol-qt_ca.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Control del volum de PulseAudio" -Desktop Entry/GenericName: "Control del volum" -Desktop Entry/Comment: "Ajusteu el nivell del volum" diff --git a/src/translations/pavucontrol-qt_ca.ts b/src/translations/pavucontrol-qt_ca.ts deleted file mode 100644 index 0c0d398..0000000 --- a/src/translations/pavucontrol-qt_ca.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulari - - - - Card Name - Nom de la targeta - - - - Profile: - Perfil: - - - - pa_context_set_card_profile_by_index() failed - Ha fallat pa_context_set_card_profile_by_index() - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2 dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Silenci</small> - - - - <small>Min</small> - <small>Mín.</small> - - - - <small>100% (0dB)</small> - <small>100% (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Base</i></small> - - - - ChannelWidget - - - Form - Formulari - - - - <b>left-front</b> - <b>esquerra-davant</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulari - - - - Device Title - Títol del dispositiu - - - - Mute audio - Silencia l'àudio - - - - Lock channels together - Bloqueja els canals junts - - - - Set as fallback - Estableix com a alternativa - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Mostra les opcions avançades - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Desplaçament de la latència:</b> - - - - ms - ms - - - - Rename device... - Reanomena el dispositiu... - - - - pa_context_set_port_latency_offset() failed - Ha fallat pa_context_set_port_latency_offset() - - - - Sorry, but device renaming is not supported. - Ho sentim, però el reanomenament del dispositiu no és compatible. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Heu de carregar el mòdul del gestor de dispositius al servidor de PulseAudio per a reanomenar dispositius - - - - Rename device %1 to: - Reanomena el dispositiu %1 a: - - - - pa_ext_device_manager_set_device_description() failed - Ha fallat pa_ext_device_manager_set_device_description() - - - - MainWindow - - - Volume Control - Control del volum - - - - &Playback - Re&producció - - - - <i>No application is currently playing audio.</i> - <i>Cap aplicació està reproduint àudio actualment</i> - - - - - - - Show: - Mostra: - - - - - All Streams - Totes les transmissions - - - - - Applications - Aplicacions - - - - - Virtual Streams - Transmissions virtuals - - - - &Recording - En&registrament - - - - <i>No application is currently recording audio.</i> - <i>Cap aplicació està enregistrant àudio actualment.</i> - - - - &Output Devices - Dispositius de s&ortida - - - - <i>No output devices available</i> - <i>No hi ha cap dispositiu de sortida disponible</i> - - - - All Output Devices - Tots els dispositius de sortida - - - - Hardware Output Devices - Dispositius de sortida de maquinari - - - - Virtual Output Devices - Dispositius de sortida virtuals - - - - &Input Devices - D&ispositius d'entrada - - - - <i>No input devices available</i> - <i>No hi ha cap dispositiu d'entrada disponible</i> - - - - All Input Devices - Tots els dispositius d'entrada - - - - All Except Monitors - Tots excepte els monitors - - - - Hardware Input Devices - Dispositius d'entrada de maquinari - - - - Virtual Input Devices - Dispositius d'entrada virtuals - - - - Monitors - Monitors - - - - &Configuration - &Configuració - - - - <i>No cards available for configuration</i> - <i>No hi ha cap targeta disponible per a la configuració</i> - - - - Show volume meters - Mostra les mètriques del volum - - - - ... - ... - - - - (plugged in) - (endollat) - - - - - (unavailable) - (no disponible) - - - - - (unplugged) - (desendollat) - - - - Failed to read data from stream - No s'han pogut llegir les dades del flux - - - - Peak detect - Detecta els pics - - - - Failed to create monitoring stream - No s'ha pogut crear el flux de monitoratge - - - - Failed to connect monitoring stream - No s'ha pogut connectar al flux de monitoratge - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - S'ignora l'entrada sink a causa que és designada com a un esdeveniment i per tant tractada pel giny d'esdeveniments - - - - System Sounds - Sons del sistema - - - - Establishing connection to PulseAudio. Please wait... - S'està establint la connexió a PulseAudio. Espereu... - - - - QObject - - - Error - Error - - - - Card callback failure - Ha fallat la crida de retorn a la targeta - - - - Sink callback failure - Ha fallat la crida de retorn del conducte - - - - Source callback failure - Ha fallat la crida de retorn de l'origen - - - - Sink input callback failure - Ha fallat la crida de retorn del conducte d'entrada - - - - Source output callback failure - Ha fallat la crida de retorn de l'origen de la sortida - - - - Client callback failure - Ha fallat la crida de retorn del client - - - - Server info callback failure - Ha fallat la crida de retorn de la informació del servidor - - - - - Failed to initialize stream_restore extension: %s - No s'ha pogut inicialitzar l'extensió stream_restore: %s - - - - pa_ext_stream_restore_read() failed - Ha fallat pa_ext_stream_restore_read() - - - - - Failed to initialize device restore extension: %s - No s'ha pogut inicialitzar l'extensió de restauració de dispositius: %s - - - - pa_ext_device_restore_read_sink_formats() failed - Ha fallat pa_ext_device_restore_read_sink_formats() - - - - - Failed to initialize device manager extension: %s - No s'ha pogut inicialitzar l'extensió del gestor de dispositius: %s - - - - pa_ext_device_manager_read() failed - Ha fallat pa_ext_device_manager_read() - - - - pa_context_get_sink_info_by_index() failed - Ha fallat pa_context_get_sink_info_by_index() - - - - pa_context_get_source_info_by_index() failed - Ha fallat pa_context_get_source_info_by_index() - - - - - pa_context_get_sink_input_info() failed - Ha fallat pa_context_get_sink_input_info() - - - - pa_context_get_client_info() failed - Ha fallat pa_context_get_client_info() - - - - - pa_context_get_server_info() failed - Ha fallat pa_context_get_server_info() - - - - pa_context_get_card_info_by_index() failed - Ha fallat pa_context_get_card_info_by_index() - - - - pa_context_subscribe() failed - Ha fallat pa_context_subscribe() - - - - pa_context_client_info_list() failed - Ha fallat pa_context_client_info_list() - - - - pa_context_get_card_info_list() failed - Ha fallat pa_context_get_card_info_list() - - - - pa_context_get_sink_info_list() failed - Ha fallat pa_context_get_sink_info_list() - - - - pa_context_get_source_info_list() failed - Ha fallat pa_context_get_source_info_list() - - - - pa_context_get_sink_input_info_list() failed - Ha fallat pa_context_get_sink_input_info_list() - - - - pa_context_get_source_output_info_list() failed - Ha fallat pa_context_get_source_output_info_list() - - - - - Connection failed, attempting reconnect - La conneció ha fallat, s'intenta la reconnexió - - - - - PulseAudio Volume Control - Control del volum del PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Ha fallat la connexió a PulseAudio. Reintent automàtic en 5 s - -En aquest cas, això és probablement a causa de PULSE_SERVER a l'entorn o a les propietats de la finestra arrel de X11, -o bé el servidor predeterminat està configurat de forma incorrecta al client.conf. -Aquesta situació també pot donar-se quan PulseAudio s'estrella i perd els detalls de l'estat a la finestra arrel de X11. -Si aquest és el cas, llavors PulseAudio s'hauria d'autogenerar un altre cop, o bé si això no estigués configurat hauríeu -d'executar manualment-pulseaudio-x11. - - - - Select a specific tab on load. - Selecciona una pestanya específica amb la càrrega. - - - - Retry forever if pa quits (every 5 seconds). - Torna a intentar-ho per sempre si pa surt (cada 5 segons). - - - - Maximize the window. - Maximitza la finestra. - - - - Fatal Error: Unable to connect to PulseAudio - Error fatal: no s'ha pogut connectar a PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Ha fallat pa_ext_stream_restore_write() - - - - SinkInputWidget - - - on - a - - - - Terminate Playback - Acaba la reproducció - - - - Unknown output - Sortida desconeguda - - - - pa_context_set_sink_input_volume() failed - Ha fallat pa_context_set_sink_input_volume() - - - - pa_context_set_sink_input_mute() failed - Ha fallat pa_context_set_sink_input_mute() - - - - pa_context_kill_sink_input() failed - Ha fallat pa_context_kill_sink_input() - - - - pa_context_move_sink_input_by_index() failed - Ha fallat pa_context_move_sink_input_by_index() - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Ha fallat pa_context_set_sink_volume_by_index() - - - - pa_context_set_sink_mute_by_index() failed - Ha fallat pa_context_set_sink_mute_by_index() - - - - pa_context_set_default_sink() failed - Ha fallat pa_context_set_default_sink() - - - - pa_context_set_sink_port_by_index() failed - Ha fallat pa_context_set_sink_port_by_index() - - - - pa_ext_device_restore_save_sink_formats() failed - Ha fallat pa_ext_device_restore_save_sink_formats() - - - - SourceOutputWidget - - - from - des de - - - - Terminate Recording - Acaba l'enregistrament - - - - Unknown input - Entrada desconeguda - - - - pa_context_set_source_output_volume() failed - Ha fallat pa_context_set_source_output_volume() - - - - pa_context_set_source_output_mute() failed - Ha fallat pa_context_set_source_output_mute() - - - - pa_context_kill_source_output() failed - Ha fallat pa_context_kill_source_output() - - - - pa_context_move_source_output_by_index() failed - Ha fallat pa_context_move_source_output_by_index() - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Ha fallat pa_context_set_source_volume_by_index() - - - - pa_context_set_source_mute_by_index() failed - Ha fallat pa_context_set_source_mute_by_index() - - - - pa_context_set_default_source() failed - Ha fallat pa_context_set_default_source() - - - - pa_context_set_source_port_by_index() failed - Ha fallat pa_context_set_source_port_by_index() - - - - StreamWidget - - - Form - Formulari - - - - Device Title - Títol del dispositiu - - - - direction - direcció - - - - device - dispositiu - - - - Mute audio - Silencia l'àudio - - - - Lock channels together - Bloqueja els canals junts - - - - Terminate - Finalitza la reproducció - - - diff --git a/src/translations/pavucontrol-qt_cs.desktop.yaml b/src/translations/pavucontrol-qt_cs.desktop.yaml deleted file mode 100644 index 80a8c47..0000000 --- a/src/translations/pavucontrol-qt_cs.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio ovládání hlasitosti" -Desktop Entry/GenericName: "Ovládání hlasitosti" -Desktop Entry/Comment: "Upravit hlasitost" diff --git a/src/translations/pavucontrol-qt_cs.ts b/src/translations/pavucontrol-qt_cs.ts deleted file mode 100644 index f945b09..0000000 --- a/src/translations/pavucontrol-qt_cs.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulář - - - - Card Name - Název karty - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - volání funkce pa_context_set_card_profile_by_index() neproběhlo úspěšně - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Ztišit</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - <small>100% (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Základ</i></small> - - - - ChannelWidget - - - Form - Formulář - - - - <b>left-front</b> - <b>levý přední</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulář - - - - Device Title - Název zařízení - - - - Mute audio - Ztlumit zvuk - - - - Lock channels together - Ovládat kanály společně - - - - Set as fallback - Nastavit jako náhradní - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Zobrazit pokročilé volby - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Posun prodlevy:</b> - - - - ms - ms - - - - Rename device... - Přejmenovat zařízení… - - - - pa_context_set_port_latency_offset() failed - volání funkce pa_context_set_port_latency_offset() neproběhlo úspěšně - - - - Sorry, but device renaming is not supported. - Omlouváme se, ale přejmenování zařízení není podporováno. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Pro přejmenovávání zařízení je potřeba do zvukového serveru PulseAudio nahrát modul module-device-manager (správa zařízení) - - - - Rename device %1 to: - Přejmenovat zařízení %1 na: - - - - pa_ext_device_manager_set_device_description() failed - volání funkce pa_ext_device_manager_set_device_description() neproběhlo úspěšně - - - - MainWindow - - - Volume Control - Ovládání hlasitosti - - - - &Playback - &Přehrávání - - - - <i>No application is currently playing audio.</i> - <i>Žádná aplikace momentálně nepřehrává zvuk.</i> - - - - - - - Show: - Ukázat: - - - - - All Streams - Všechny proudy - - - - - Applications - Aplikace - - - - - Virtual Streams - Virtuální proudy - - - - &Recording - Nah&rávání - - - - <i>No application is currently recording audio.</i> - <i>Žádná aplikace momentálně nenahrává zvuk.</i> - - - - &Output Devices - &Výstupní zařízení - - - - <i>No output devices available</i> - <i>Nejsou k dispozici žádná výstupní zařízení.</i> - - - - All Output Devices - Všechna výstupní zařízení - - - - Hardware Output Devices - Fyzická výstupní zařízení - - - - Virtual Output Devices - Virtuální výstupní zařízení - - - - &Input Devices - &Vstupní zařízení - - - - <i>No input devices available</i> - <i>Nejsou k dispozici žádná vstupní zařízení.</i> - - - - All Input Devices - Všechna vstupní zařízení - - - - All Except Monitors - Vše vyjma monitorů - - - - Hardware Input Devices - Fyzická vstupní zařízení - - - - Virtual Input Devices - Virtuální vstupní zařízení - - - - Monitors - Monitory - - - - &Configuration - &Nastavení - - - - <i>No cards available for configuration</i> - <i>Nejsou k dispozici žádná zvuková zařízení, která by bylo možné nastavovat</i> - - - - Show volume meters - Zobrazovat ukazatele hlasitosti - - - - ... - - - - - (plugged in) - (zapojeno) - - - - - (unavailable) - (nedostupné) - - - - - (unplugged) - (vypojeno) - - - - Failed to read data from stream - Nepodařilo se přečíst data z proudu - - - - Peak detect - Rozpoznávání špiček - - - - Failed to create monitoring stream - Nepodařilo se vytvořit sledovací proud - - - - Failed to connect monitoring stream - Nepodařilo se připojit sledovací proud - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignoruje se vstup do odchodu protože je označen jako událost a proto obsloužen ovládacím prvkem pro události - - - - System Sounds - Systémové zvuky - - - - Establishing connection to PulseAudio. Please wait... - Navazuje se spojení s PulseAudio. Čekejte… - - - - QObject - - - Error - Chyba - - - - Card callback failure - Zpětné volání karty se nezdařilo - - - - Sink callback failure - Cílové zpětné volání se nezdařilo - - - - Source callback failure - Zdrojové zpětné volání se nezdařilo - - - - Sink input callback failure - Cílové vstupní zpětné volání se nezdařilo - - - - Source output callback failure - Zdrojové výstupní zpětné volání se nezdařilo - - - - Client callback failure - Zpětné volání klienta se nezdařilo - - - - Server info callback failure - Zpětné volání serverových informací se nezdařilo - - - - - Failed to initialize stream_restore extension: %s - Nepodařilo se inicializovat rozšíření stream_restore (obnovení proudu): %s - - - - pa_ext_stream_restore_read() failed - volání funkce pa_ext_stream_restore_read() se nezdařilo - - - - - Failed to initialize device restore extension: %s - Nepodařilo se inicializovat rozšíření pro obnovení zařízení: %s - - - - pa_ext_device_restore_read_sink_formats() failed - volání funkce pa_ext_device_restore_read_sink_formats() se nezdařilo - - - - - Failed to initialize device manager extension: %s - Nepodařilo se spustit rozšíření pro správu zařízení: %s - - - - pa_ext_device_manager_read() failed - volání funkce pa_ext_device_manager_read() se nezdařilo - - - - pa_context_get_sink_info_by_index() failed - volání funkce pa_context_get_sink_info_by_index() se nezdařilo - - - - pa_context_get_source_info_by_index() failed - volání funkce pa_context_get_source_info_by_index() se nezdařilo - - - - - pa_context_get_sink_input_info() failed - volání funkce pa_context_get_sink_input_info() se nezdařilo - - - - pa_context_get_client_info() failed - volání funkce pa_context_get_client_info() se nezdařilo - - - - - pa_context_get_server_info() failed - volání funkce pa_context_get_server_info() se nezdařilo - - - - pa_context_get_card_info_by_index() failed - volání funkce pa_context_get_card_info_by_index() se nezdařilo - - - - pa_context_subscribe() failed - volání funkce pa_context_subscribe() se nezdařilo - - - - pa_context_client_info_list() failed - volání funkce pa_context_client_info_list() se nezdařilo - - - - pa_context_get_card_info_list() failed - volání funkce pa_context_get_card_info_list() se nezdařilo - - - - pa_context_get_sink_info_list() failed - volání funkce pa_context_get_sink_info_list() se nezdařilo - - - - pa_context_get_source_info_list() failed - volání funkce pa_context_get_source_info_list() se nezdařilo - - - - pa_context_get_sink_input_info_list() failed - volání funkce pa_context_get_sink_input_info_list() se nezdařilo - - - - pa_context_get_source_output_info_list() failed - volání funkce pa_context_get_source_output_info_list() se nezdařilo - - - - - Connection failed, attempting reconnect - Spojení se nezdařilo, probíhá pokus o opětovné připojení - - - - - PulseAudio Volume Control - Ovládání hlasitosti PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Spojení s PulseAudio vypadlo. Pokus o automatické opětovné navázání za 5 s - -V tomto případě je to nejspíš proto, že je chybně nastavená proměnná PULSE_SERVER v -Prostředí/Vlastnosti X11 kořenového okna nebo je v client.conf chybně nastaven parametr default-server. -Tato situace také může nastat když PulseAudio zhavaruje a zanechá staré údaje v kořenovém okně X11. -Pokud tomu je tak, PulseAudio by se mělo automaticky znovu spustit, nebo pokud tak není nastavené, -je třeba ručně spustit start-pulseaudio-x11. - - - - Select a specific tab on load. - Při načítání vybrat konkrétní panel. - - - - Retry forever if pa quits (every 5 seconds). - Pokud PulseAudio skončí, opakovat neustále (každých 5 sekund). - - - - Maximize the window. - Maximalizovat okno. - - - - Fatal Error: Unable to connect to PulseAudio - Vážná chyba: nedaří se spojit s PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - volání funkce pa_ext_stream_restore_write() se nezdařilo - - - - SinkInputWidget - - - on - na - - - - Terminate Playback - Ukončit přehrávání - - - - Unknown output - Neznámý výstup - - - - pa_context_set_sink_input_volume() failed - volání funkce pa_context_set_sink_input_volume() se nezdařilo - - - - pa_context_set_sink_input_mute() failed - volání funkce pa_context_set_sink_input_mute() se nezdařilo - - - - pa_context_kill_sink_input() failed - volání funkce pa_context_kill_sink_input() se nezdařilo - - - - pa_context_move_sink_input_by_index() failed - volání funkce pa_context_move_sink_input_by_index() se nezdařilo - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - volání funkce pa_context_set_sink_volume_by_index() se nezdařilo - - - - pa_context_set_sink_mute_by_index() failed - volání funkce pa_context_set_sink_mute_by_index() se nezdařilo - - - - pa_context_set_default_sink() failed - volání funkce pa_context_set_default_sink() se nezdařilo - - - - pa_context_set_sink_port_by_index() failed - volání funkce pa_context_set_sink_port_by_index() se nezdařilo - - - - pa_ext_device_restore_save_sink_formats() failed - volání funkce pa_ext_device_restore_save_sink_formats() se nezdařilo - - - - SourceOutputWidget - - - from - z - - - - Terminate Recording - Ukončit nahrávání - - - - Unknown input - Neznámý vstup - - - - pa_context_set_source_output_volume() failed - volání funkce pa_context_set_source_output_volume() se nezdařilo - - - - pa_context_set_source_output_mute() failed - volání funkce pa_context_set_source_output_mute() se nezdařilo - - - - pa_context_kill_source_output() failed - volání funkce pa_context_kill_source_output() se nezdařilo - - - - pa_context_move_source_output_by_index() failed - volání funkce pa_context_move_source_output_by_index() se nezdařilo - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - volání funkce pa_context_set_source_volume_by_index() se nezdařilo - - - - pa_context_set_source_mute_by_index() failed - volání funkce pa_context_set_source_mute_by_index() se nezdařilo - - - - pa_context_set_default_source() failed - volání funkce pa_context_set_default_source() se nezdařilo - - - - pa_context_set_source_port_by_index() failed - volání funkce pa_context_set_source_port_by_index() se nezdařilo - - - - StreamWidget - - - Form - Formulář - - - - Device Title - Název zařízení - - - - direction - směr - - - - device - zařízení - - - - Mute audio - Ztlumit zvuk - - - - Lock channels together - Ovládat kanály společně - - - - Terminate - Ukončit - - - diff --git a/src/translations/pavucontrol-qt_cy.ts b/src/translations/pavucontrol-qt_cy.ts deleted file mode 100644 index 0922be9..0000000 --- a/src/translations/pavucontrol-qt_cy.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - - - - - <i>No application is currently playing audio.</i> - - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - <i>No application is currently recording audio.</i> - - - - - <i>No output devices available</i> - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Playback - - - - - &Recording - - - - - &Output Devices - - - - - &Input Devices - - - - - <i>No input devices available</i> - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - - - - - <i>No cards available for configuration</i> - - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - - - - - Peak detect - - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - - - - - pa_ext_stream_restore_read() failed - - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - - - - - pa_context_get_source_info_by_index() failed - - - - - - pa_context_get_sink_input_info() failed - - - - - pa_context_get_client_info() failed - - - - - - pa_context_get_server_info() failed - - - - - pa_context_get_card_info_by_index() failed - - - - - pa_context_subscribe() failed - - - - - pa_context_client_info_list() failed - - - - - pa_context_get_card_info_list() failed - - - - - pa_context_get_sink_info_list() failed - - - - - pa_context_get_source_info_list() failed - - - - - pa_context_get_sink_input_info_list() failed - - - - - pa_context_get_source_output_info_list() failed - - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - - - - - pa_context_set_sink_input_mute() failed - - - - - pa_context_kill_sink_input() failed - - - - - pa_context_move_sink_input_by_index() failed - - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - - - - - pa_context_set_sink_mute_by_index() failed - - - - - pa_context_set_default_sink() failed - - - - - pa_context_set_sink_port_by_index() failed - - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - - - - - pa_context_move_source_output_by_index() failed - - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - - - - - pa_context_set_source_mute_by_index() failed - - - - - pa_context_set_default_source() failed - - - - - pa_context_set_source_port_by_index() failed - - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - - - - diff --git a/src/translations/pavucontrol-qt_da.desktop.yaml b/src/translations/pavucontrol-qt_da.desktop.yaml deleted file mode 100644 index 1093d30..0000000 --- a/src/translations/pavucontrol-qt_da.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio-lydstyrkekontrol" -Desktop Entry/GenericName: "Lydstyrkekontrol" -Desktop Entry/Comment: "Justér lydstyrkeniveauet" diff --git a/src/translations/pavucontrol-qt_da.ts b/src/translations/pavucontrol-qt_da.ts deleted file mode 100644 index 986204f..0000000 --- a/src/translations/pavucontrol-qt_da.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formular - - - - Card Name - Kortnavn - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() mislykkedes - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Lydløs</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Basis</i></small> - - - - ChannelWidget - - - Form - Formular - - - - <b>left-front</b> - <b>venstre-front</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formular - - - - Device Title - Enhedens titel - - - - Mute audio - Mute lyd - - - - Lock channels together - Lås kanaler sammen - - - - Set as fallback - Sæt som reserve - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Vis avanceret valgmuligheder - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Forskydning af forsinkelse:</b> - - - - ms - ms - - - - Rename device... - Omdøb enhed... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() mislykkedes - - - - Sorry, but device renaming is not supported. - Beklager, men omdøbning af enhed understøttes ikke. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Du kan indlæse module-device-manager i PulseAudio-servere for at kunne omdøbe enheder - - - - Rename device %1 to: - Omdøb enhed %1 til: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() mislykkedes - - - - MainWindow - - - Volume Control - Lydstyrkekontrol - - - - &Playback - &Afspilning - - - - <i>No application is currently playing audio.</i> - <i>Intet program spiller lyd i øjeblikket.</i> - - - - - - - Show: - Vis: - - - - - All Streams - Alle strømme - - - - - Applications - Programmer - - - - - Virtual Streams - Virtuelle strømme - - - - &Recording - &Optagelse - - - - <i>No application is currently recording audio.</i> - <i>Intet program optager lyd i øjeblikket.</i> - - - - &Output Devices - &Output-enheder - - - - <i>No output devices available</i> - <i>Ingen output-enheder tilgængelige</i> - - - - All Output Devices - Alle output-enheder - - - - Hardware Output Devices - Hardware output-enheder - - - - Virtual Output Devices - Virtuelle output-enheder - - - - &Input Devices - &Inputenheder - - - - <i>No input devices available</i> - <i>Ingen inputenheder tilgængelige</i> - - - - All Input Devices - Alle inputenheder - - - - All Except Monitors - Alle, undtagen monitorer - - - - Hardware Input Devices - Hardware inputenheder - - - - Virtual Input Devices - Virtuelle inputenheder - - - - Monitors - Monitorer - - - - &Configuration - &Konfiguration - - - - <i>No cards available for configuration</i> - <i>Ingen kort tilgængelige til konfiguration</i> - - - - Show volume meters - Vis lydstyrkemetre - - - - ... - ... - - - - (plugged in) - (tilkoblet) - - - - - (unavailable) - (utilgængelig) - - - - - (unplugged) - (frakoblet) - - - - Failed to read data from stream - Kunne ikke læse data fra lydstrøm - - - - Peak detect - Detektér højeste udslag - - - - Failed to create monitoring stream - Kunne ikke oprette kontrol af lydstrøm - - - - Failed to connect monitoring stream - Kunne ikke forbinde kontrollydstrøm - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorerer sink-input da det bliver udpeget som en begivenhed og derfor håndteret af Event-widget'en - - - - System Sounds - Systemlyde - - - - Establishing connection to PulseAudio. Please wait... - Etablerer forbindelse til PulseAudio. Vent venligst... - - - - QObject - - - Error - Fejl - - - - Card callback failure - Tilbagekaldsfejl for kort - - - - Sink callback failure - Tilbagekaldsfejl for sink - - - - Source callback failure - Tilbagekaldsfejl for kilde - - - - Sink input callback failure - Tilbagekaldsfejl for sinkinput - - - - Source output callback failure - Tilbagekaldsfejl for kilde-output - - - - Client callback failure - Tilbagekaldsfejl for klient - - - - Server info callback failure - Tilbagekaldsfejl for serverinformation - - - - - Failed to initialize stream_restore extension: %s - Kunne ikke initiere stream_restore-udvidelse: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() mislykkedes - - - - - Failed to initialize device restore extension: %s - Kunne ikke initialisere device restore-udvidelse: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() mislykkedes - - - - - Failed to initialize device manager extension: %s - Kunne ikke initiere device manager-udvidelse: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() mislykkedes - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() mislykkedes - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() mislykkedes - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() mislykkedes - - - - pa_context_get_client_info() failed - pa_context_get_client_info() mislykkedes - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() mislykkedes - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() mislykkedes - - - - pa_context_subscribe() failed - pa_context_subscribe() mislykkedes - - - - pa_context_client_info_list() failed - pa_context_client_info_list() mislykkedes - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() mislykkedes - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() mislykkedes - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() mislykkedes - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() mislykkedes - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() mislykkedes - - - - - Connection failed, attempting reconnect - Forbindelsen mislykkedes, forsøger at oprette forbindelsen igen - - - - - PulseAudio Volume Control - Lydstyrkekontrol for PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Forbindelsen til PulseAudio mislykkedes. Forsøger automatisk igen om 5 sekunder - -I dette tilfælde er det sansynligvis på grund af at PULSE_SERVER i miljøet/X11 rod-vindue-egenskaber -eller default-server i client.conf er fejlkonfigureret. -Dette kan også ske når PulseAudio holder op med at virke og efterlod gamle detaljer i X11 rod-vinduet. -Hvis dette er tilfældet, bør PulseAudio automatisk genopstå og hvis dette ikke er konfigureret skal du -køre start-pulseaudio-x11 manuelt. - - - - Select a specific tab on load. - Vælg et bestemt faneblad ved start. - - - - Retry forever if pa quits (every 5 seconds). - Gentag uendeligt hvis pa afslutter (hvert 5. sekund). - - - - Maximize the window. - Maksimer vinduet. - - - - Fatal Error: Unable to connect to PulseAudio - Fatal fejl: kan ikke oprette forbindelse til PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() mislykkedes - - - - SinkInputWidget - - - on - tændt - - - - Terminate Playback - Afslut afspilning - - - - Unknown output - Ukendt output - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() mislykkedes - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() mislykkedes - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() mislykkedes - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() mislykkedes - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() mislykkedes - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() mislykkedes - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() mislykkedes - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() mislykkedes - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() mislykkedes - - - - SourceOutputWidget - - - from - fra - - - - Terminate Recording - Afslut optagelse - - - - Unknown input - Ukendt input - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() mislykkedes - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() mislykkedes - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() mislykkedes - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() mislykkedes - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() mislykkedes - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() mislykkedes - - - - pa_context_set_default_source() failed - pa_context_set_default_source() mislykkedes - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() mislykkedes - - - - StreamWidget - - - Form - Formular - - - - Device Title - Enhedens titel - - - - direction - retning - - - - device - enhed - - - - Mute audio - Mute lyd - - - - Lock channels together - Lås kanaler sammen - - - - Terminate - Afslut afspilning - - - diff --git a/src/translations/pavucontrol-qt_de.ts b/src/translations/pavucontrol-qt_de.ts deleted file mode 100644 index c1e0d62..0000000 --- a/src/translations/pavucontrol-qt_de.ts +++ /dev/null @@ -1,738 +0,0 @@ - - - - - CardWidget - - - Form - Form - - - - Card Name - Soundkarten-Name - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() gescheitert - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1 % (%2 dB) - - - - %1% - volume slider label [X%] - %1 % - - - - <small>Silence</small> - <small>Stumm</small> - - - - <small>Min</small> - <small>Minimum</small> - - - - <small>100% (0dB)</small> - <small>100 % (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Basis</i></small> - - - - ChannelWidget - - - Form - Form - - - - <b>left-front</b> - <b>vorne links</b> - - - - <small>50%</small> - <small>50 %</small> - - - - DeviceWidget - - - Form - Form - - - - Device Title - Gerätetitel - - - - Mute audio - Audio stummschalten - - - - Lock channels together - Kanäle zusammenschließen - - - - Set as fallback - Als Rückfallebene setzen - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Erweiterte Optionen anzeigen - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Latenzversatz:</b> - - - - ms - ms - - - - Rename device... - Gerät umbenennen... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() fehlgeschlagen - - - - Sorry, but device renaming is not supported. - Entschuldigung, aber Geräteumbenennung wird nicht unterstützt. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Es muss der module-device-manager im PulseAudio Server geladen sein um Geräte umzubenennen - - - - Rename device %1 to: - Gerät %1 umbenennen nach: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() fehlgeschlagen - - - - MainWindow - - - Volume Control - Lautstärkeregler - - - - &Playback - &Wiedergabe - - - - <i>No application is currently playing audio.</i> - <i>Keine Applikation gibt zur Zeit Ton wieder.</i> - - - - - - - Show: - Zeige: - - - - - All Streams - Alle Streams - - - - - Applications - Anwendungen - - - - - Virtual Streams - Virtuelle Streams - - - - &Recording - &Aufnahme - - - - <i>No application is currently recording audio.</i> - <i>Keine Applikation nimmt zur Zeit Ton auf.</i> - - - - &Output Devices - A&usgabegeräte - - - - <i>No output devices available</i> - <i>Keine Ausgabegeräte verfügbar</i> - - - - All Output Devices - Alle Ausgabegeräte - - - - Hardware Output Devices - Hardware Ausgabegeräte - - - - Virtual Output Devices - Virtuelle Ausgabegeräte - - - - &Input Devices - &Eingabegeräte - - - - <i>No input devices available</i> - <i>Keine Eingabegeräte verfügbar.</i> - - - - All Input Devices - Alle Eingabegeräte - - - - All Except Monitors - Alle außer Monitore - - - - Hardware Input Devices - Hardware Eingabegeräte - - - - Virtual Input Devices - Virtuelle Eingabegeräte - - - - Monitors - Monitore - - - - &Configuration - &Konfiguration - - - - <i>No cards available for configuration</i> - <i>Keine Karten zur Konfiguration verfügbar</i> - - - - Show volume meters - Lautstärkemesser anzeigen - - - - ... - ... - - - - (plugged in) - (eingesteckt) - - - - - (unavailable) - (nicht verfügbar) - - - - - (unplugged) - (abgesteckt) - - - - Failed to read data from stream - Lesen des Datenstroms gescheitert - - - - Peak detect - Ausschlagsserkennung - - - - Failed to create monitoring stream - Erstellung des Beobachterdatenstroms gescheitert - - - - Failed to connect monitoring stream - Verbindungsaufbau zum Beobachterdatenstrom gescheitert - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignoriere sink-input, weil es als ein Ereignis festgelegt wurde und somit vom Ereignis 'widget' gehandhabt wird - - - - System Sounds - Systemtöne - - - - Establishing connection to PulseAudio. Please wait... - Errichte Verbindung zu PulseAudio. Bitte warten... - - - - QObject - - - Error - Fehler - - - - Card callback failure - Soundkarten Callback-Fehler - - - - Sink callback failure - Senke Callback-Fehler - - - - Source callback failure - Quellen Callback-Fehler - - - - Sink input callback failure - Senken-Eingabe Callback-Fehler - - - - Source output callback failure - Quellen-Ausgabe Callback-Fehler - - - - Client callback failure - Client Callback-Fehler - - - - Server info callback failure - Server-Information Callback-Fehler - - - - - Failed to initialize stream_restore extension: %s - Initialisierung der »stream_restore«-Erweiterung gescheitert: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() gescheitert - - - - - Failed to initialize device restore extension: %s - Initialisierung der Gerätewiederherstellungserweiterung fehlgeschlagen: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() fehlgeschlagen - - - - - Failed to initialize device manager extension: %s - Initialisierung der Geräteverwaltungserweiterung fehlgeschlagen: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() fehlgeschlagen - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() gescheitert - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() gescheitert - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() gescheitert - - - - pa_context_get_client_info() failed - pa_context_get_client_info() gescheitert - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() gescheitert - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() gescheitert - - - - pa_context_subscribe() failed - pa_context_subscribe() gescheitert - - - - pa_context_client_info_list() failed - pa_context_client_info_list() gescheitert - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() gescheitert - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() gescheitert - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() gescheitert - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() gescheitert - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() gescheitert - - - - - Connection failed, attempting reconnect - Verbindung fehlgeschlagen, versuche erneut zu verbinden - - - - - PulseAudio Volume Control - PulseAudio-Lautstärkeregler - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Verbindung zu PulseAudio fehlgeschlagen. Automatische Wiederholung in 5s - -In diesem Fall ist es wahrscheinlich, dass PULSE_SERVER in der Umgebung/X11 Root Fenster Eigenschaften -oder default-server in client.conf fehlconfiguriert ist. -Diese Situation kann auch entstehen, wenn PulseAudio abgestürzt ist und alte Details im X11 Root Fenster hinterlassen hat. -Wenn dies der Fall ist, sollte PulseAudio wieder automatisch starten. Wenn automatisches Starten nicht konfiguriert ist, ist 'start-pulseaudio-x11' manuell auszuführen. - - - - Select a specific tab on load. - Eine bestimmte Registerkarte beim Start auswählen. - - - - Retry forever if pa quits (every 5 seconds). - Wiederhole für immer, wenn pa sich beendet (alle 5 Sekunden). - - - - Maximize the window. - Fenster maximieren. - - - - Fatal Error: Unable to connect to PulseAudio - Schwerwiegender Fehler: Verbindung zu PulseAudio nicht möglich - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() gescheitert - - - - SinkInputWidget - - - on - ein - - - - Terminate Playback - Wiedergabe beenden - - - - Unknown output - Unbekannte Ausgabe - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() gescheitert - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() gescheitert - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() gescheitert - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() gescheitert - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() gescheitert - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() gescheitert - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() gescheitert - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() gescheitert - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() fehlgeschlagen - - - - SourceOutputWidget - - - from - von - - - - Terminate Recording - Aufnahme beenden - - - - Unknown input - Unbekannte Eingabe - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() fehlgeschlagen - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() fehlgeschlagen - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() gescheitert - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() gescheitert - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() gescheitert - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() gescheitert - - - - pa_context_set_default_source() failed - pa_context_set_default_source() gescheitert - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() gescheitert - - - - StreamWidget - - - Form - Form - - - - Device Title - Gerätetitel - - - - direction - Richtung - - - - device - Gerät - - - - Mute audio - Audio stummschalten - - - - Lock channels together - Kanäle zusammenschließen - - - - Terminate - Beenden - - - diff --git a/src/translations/pavucontrol-qt_el.ts b/src/translations/pavucontrol-qt_el.ts deleted file mode 100644 index 8ba226e..0000000 --- a/src/translations/pavucontrol-qt_el.ts +++ /dev/null @@ -1,738 +0,0 @@ - - - - - CardWidget - - - Form - Φόρμα - - - - Card Name - Όνομα κάρτας - - - - Profile: - Ταυτότητα: - - - - pa_context_set_card_profile_by_index() failed - το pa_context_set_card_profile_by_index() απέτυχε - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Σίγαση</small> - - - - <small>Min</small> - <small>Ελάχ</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Βάση</i></small> - - - - ChannelWidget - - - Form - Φόρμα - - - - <b>left-front</b> - <b>εμπρός-αριστερά</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Φόρμα - - - - Device Title - Τίτλος συσκευής - - - - Mute audio - Σίγαση ήχου - - - - Lock channels together - Κλείδωμα των καναλιών μαζί - - - - Set as fallback - Ορισμός ως συσκευή μετάπτωσης - - - - <b>Port:</b> - <b>Θύρα:</b> - - - - Show advanced options - Προβολή προηγμένων επιλογών - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Μετατόπιση του χρόνου καθυστέρησης:</b> - - - - ms - ms - - - - Rename device... - Μετονομασία συσκευής... - - - - pa_context_set_port_latency_offset() failed - το pa_context_set_port_latency_offset() απέτυχε - - - - Sorry, but device renaming is not supported. - Λυπάμαι, αλλά η μετονομασία της συσκευής δεν υποστηρίζεται. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Πρέπει να φορτώσετε το module-device-manager στον εξυπηρετητή PulseAudio προκειμένου να μετονομάσετε συσκευές - - - - Rename device %1 to: - Μετονομασία της συσκευής %1 σε: - - - - pa_ext_device_manager_set_device_description() failed - το pa_ext_device_manager_set_device_description() απέτυχε - - - - MainWindow - - - Volume Control - Έλεγχος έντασης ήχου - - - - &Playback - &Αναπαραγωγή - - - - <i>No application is currently playing audio.</i> - <i>Καμιά εφαρμογή δεν αναπαράγει ήχο αυτήν την στιγμή.</i> - - - - - - - Show: - Εμφάνιση: - - - - - All Streams - Όλες οι ροές - - - - - Applications - Εφαρμογές - - - - - Virtual Streams - Εικονικές ροές - - - - &Recording - &Ηχογράφηση - - - - <i>No application is currently recording audio.</i> - <i>Καμιά εφαρμογή δεν ηχογραφεί αυτήν την στιγμή.</i> - - - - &Output Devices - Συσκευές ε&ξόδου - - - - <i>No output devices available</i> - <i>Δεν υπάρχουν διαθέσιμες συσκευές εξόδου</i> - - - - All Output Devices - Όλες οι συσκευές εξόδου - - - - Hardware Output Devices - Συσκευές εξόδου υλικού - - - - Virtual Output Devices - Εικονικές συσκευές εξόδου - - - - &Input Devices - &Συσκευές εισόδου - - - - <i>No input devices available</i> - <i>Δεν υπάρχουν διαθέσιμες συσκευές εισόδου</i> - - - - All Input Devices - Όλες οι συσκευές εισόδου - - - - All Except Monitors - Όλες εκτός των οθονών - - - - Hardware Input Devices - Συσκευές εισόδου υλικού - - - - Virtual Input Devices - Εικονικές συσκευές εισόδου - - - - Monitors - Οθόνες - - - - &Configuration - &Διαμόρφωση - - - - <i>No cards available for configuration</i> - <i>Δεν υπάρχουν διαθέσιμες κάρτες για διαμόρφωση</i> - - - - Show volume meters - Εμφάνιση των μετρητών έντασης - - - - ... - ... - - - - (plugged in) - (συνδεδεμένο) - - - - - (unavailable) - (μη διαθέσιμο) - - - - - (unplugged) - (αποσυνδεδεμένο) - - - - Failed to read data from stream - Αποτυχία ανάγνωσης δεδομένων από την ροή - - - - Peak detect - Εντοπισμός αιχμής - - - - Failed to create monitoring stream - Αποτυχία δημιουργίας της ροής εποπτείας - - - - Failed to connect monitoring stream - Αποτυχία σύνδεσης της ροής εποπτείας - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Αγνόηση του αποδέκτη εισόδου διότι είναι καθορισμένη ως ένα συμβάν και ως εκ τούτου διαχειρίζεται από το συστατικό των συμβάντων - - - - System Sounds - Ήχοι συστήματος - - - - Establishing connection to PulseAudio. Please wait... - Εδραίωση της σύνδεσης με το PulseAudio. Παρακαλώ περιμένετε... - - - - QObject - - - Error - Σφάλμα - - - - Card callback failure - Αποτυχία επανάκλησης κάρτας - - - - Sink callback failure - Αποτυχία επανάκλησης αποδέκτη - - - - Source callback failure - Αποτυχία επανάκλησης πηγής - - - - Sink input callback failure - Αποτυχία επανάκλησης αποδέκτη εισόδου - - - - Source output callback failure - Αποτυχία επανάκλησης πηγής εξόδου - - - - Client callback failure - Αποτυχία επανάκλησης πελάτη - - - - Server info callback failure - Αποτυχία επανάκλησης πληροφοριών εξυπηρετητή - - - - - Failed to initialize stream_restore extension: %s - Αποτυχία αρχικοποίησης της επέκτασης επαναφοράς ροής: %s - - - - pa_ext_stream_restore_read() failed - το pa_ext_stream_restore_read() απέτυχε - - - - - Failed to initialize device restore extension: %s - Αποτυχία αρχικοποίησης της επέκτασης επαναφοράς συσκευής: %s - - - - pa_ext_device_restore_read_sink_formats() failed - το pa_ext_device_restore_read_sink_formats() απέτυχε - - - - - Failed to initialize device manager extension: %s - Αποτυχία αρχικοποίησης της επέκτασης διαχειριστή συσκευών: %s - - - - pa_ext_device_manager_read() failed - το pa_ext_device_manager_read() απέτυχε - - - - pa_context_get_sink_info_by_index() failed - το pa_context_get_sink_info_by_index() απέτυχε - - - - pa_context_get_source_info_by_index() failed - το pa_context_get_source_info_by_index() απέτυχε - - - - - pa_context_get_sink_input_info() failed - το pa_context_get_sink_input_info() απέτυχε - - - - pa_context_get_client_info() failed - το pa_context_get_client_info() απέτυχε - - - - - pa_context_get_server_info() failed - το pa_context_get_server_info() απέτυχε - - - - pa_context_get_card_info_by_index() failed - το pa_context_get_card_info_by_index() απέτυχε - - - - pa_context_subscribe() failed - το pa_context_subscribe() απέτυχε - - - - pa_context_client_info_list() failed - το pa_context_client_info_list() απέτυχε - - - - pa_context_get_card_info_list() failed - το pa_context_get_card_info_list() απέτυχε - - - - pa_context_get_sink_info_list() failed - το pa_context_get_sink_info_list() απέτυχε - - - - pa_context_get_source_info_list() failed - το pa_context_get_source_info_list() απέτυχε - - - - pa_context_get_sink_input_info_list() failed - το pa_context_get_sink_input_info_list() απέτυχε - - - - pa_context_get_source_output_info_list() failed - το pa_context_get_source_output_info_list() απέτυχε - - - - - Connection failed, attempting reconnect - Αποτυχία της σύνδεσης, προσπάθεια επανασύνδεσης - - - - - PulseAudio Volume Control - Έλεγχος έντασης ήχου PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Η σύνδεση στο PulseAudio απέτυχε. Αυτόματη επανάληψη σε 5 δευτ. - -Αυτό μπορεί να συμβαίνει διότι ο PULSE_SERVER είναι κακώς διαμορφωμένος στο παράθυρο διαχειριστή Ιδιότητες Environment/X11 -ή το default-server στο client.conf. -Αυτή η κατάσταση συναντάται επίσης μετά από κατάρρευση του PulseAudio και παραμονή υπολειμμάτων στο παράθυρο διαχειριστή X11. -Αν πρόκειται για αυτήν την περίπτωση, τότε το PulseAudio θα πρέπει να αυτοδημιουργηθεί εκ νέου, ή αν αυτό δεν έχει ρυθμιστεί θα πρέπει να εκτελέσετε χειροκίνητα το start-pulseaudio-x11. - - - - Select a specific tab on load. - Επιλογή μιας συγκεκριμένης καρτέλας κατά την φόρτωση. - - - - Retry forever if pa quits (every 5 seconds). - Επαναφορά αέναα κατά την εγκατάλειψη του pa (κάθε 5 δευτερόλεπτα). - - - - Maximize the window. - Μεγιστοποίηση του παράθυρου. - - - - Fatal Error: Unable to connect to PulseAudio - Ανεπανόρθωτο σφάλμα: Αδύνατη η σύνδεση στο PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - το pa_ext_stream_restore_write() απέτυχε - - - - SinkInputWidget - - - on - σε - - - - Terminate Playback - Τερματισμός αναπαραγωγής - - - - Unknown output - Άγνωστη έξοδος - - - - pa_context_set_sink_input_volume() failed - το pa_context_set_sink_input_volume() απέτυχε - - - - pa_context_set_sink_input_mute() failed - το pa_context_set_sink_input_mute() απέτυχε - - - - pa_context_kill_sink_input() failed - το pa_context_kill_sink_input() απέτυχε - - - - pa_context_move_sink_input_by_index() failed - το pa_context_move_sink_input_by_index() απέτυχε - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - το pa_context_set_sink_volume_by_index() απέτυχε - - - - pa_context_set_sink_mute_by_index() failed - το pa_context_set_sink_mute_by_index() απέτυχε - - - - pa_context_set_default_sink() failed - το pa_context_set_default_sink() απέτυχε - - - - pa_context_set_sink_port_by_index() failed - το pa_context_set_sink_port_by_index() απέτυχε - - - - pa_ext_device_restore_save_sink_formats() failed - το pa_ext_device_restore_save_sink_formats() απέτυχε - - - - SourceOutputWidget - - - from - από - - - - Terminate Recording - Τερματισμός ηχογράφησης - - - - Unknown input - Άγνωστη είσοδος - - - - pa_context_set_source_output_volume() failed - το pa_context_set_source_output_volume() απέτυχε - - - - pa_context_set_source_output_mute() failed - το pa_context_set_source_output_mute() απέτυχε - - - - pa_context_kill_source_output() failed - το pa_context_kill_source_output() απέτυχε - - - - pa_context_move_source_output_by_index() failed - το pa_context_move_source_output_by_index() απέτυχε - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - το pa_context_set_source_volume_by_index() απέτυχε - - - - pa_context_set_source_mute_by_index() failed - το pa_context_set_source_mute_by_index() απέτυχε - - - - pa_context_set_default_source() failed - το pa_context_set_default_source() απέτυχε - - - - pa_context_set_source_port_by_index() failed - το pa_context_set_source_port_by_index() απέτυχε - - - - StreamWidget - - - Form - Φόρμα - - - - Device Title - Τίτλος συσκευής - - - - direction - κατεύθυνση - - - - device - συσκευή - - - - Mute audio - Σίγαση ήχου - - - - Lock channels together - Κλείδωμα των καναλιών μαζί - - - - Terminate - Τερματισμός - - - diff --git a/src/translations/pavucontrol-qt_es.desktop.yaml b/src/translations/pavucontrol-qt_es.desktop.yaml deleted file mode 100644 index 3c4ced8..0000000 --- a/src/translations/pavucontrol-qt_es.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Control de volumen de PulseAudio" -Desktop Entry/GenericName: "Control de volumen" -Desktop Entry/Comment: "Ajustar el nivel del volumen" diff --git a/src/translations/pavucontrol-qt_es.ts b/src/translations/pavucontrol-qt_es.ts deleted file mode 100644 index bb15cdd..0000000 --- a/src/translations/pavucontrol-qt_es.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulario - - - - Card Name - Nombre de la tarjeta - - - - Profile: - Perfil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ha fallado - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1 % (%2 dB) - - - - %1% - volume slider label [X%] - %1 % - - - - <small>Silence</small> - <small>Silencio</small> - - - - <small>Min</small> - <small>Mín</small> - - - - <small>100% (0dB)</small> - <small>100 % (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Base</i></small> - - - - ChannelWidget - - - Form - Formulario - - - - <b>left-front</b> - <b>frente-izquierda</b> - - - - <small>50%</small> - <small>50 %</small> - - - - DeviceWidget - - - Form - Formulario - - - - Device Title - Título del dispositivo - - - - Mute audio - Silenciar el sonido - - - - Lock channels together - Bloquear juntos los canales - - - - Set as fallback - Establecer como alternativa - - - - <b>Port:</b> - <b>Puerto:</b> - - - - Show advanced options - Mostrar opciones avanzadas - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Desviación de la latencia:</b> - - - - ms - ms - - - - Rename device... - Cambiar nombre del dispositivo… - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() ha fallado - - - - Sorry, but device renaming is not supported. - No se admite el cambio de nombre del dispositivo. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Necesita cargar module-device-manager en el servidor de PulseAudio para cambiar los nombres de los dispositivos - - - - Rename device %1 to: - Cambiar nombre del dispositivo %1 a: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() ha fallado - - - - MainWindow - - - Volume Control - Control de volumen - - - - &Playback - &Reproducción - - - - <i>No application is currently playing audio.</i> - <i>Ninguna aplicación está actualmente reproduciendo sonidos.</i> - - - - - - - Show: - Mostrar: - - - - - All Streams - Todos los flujos - - - - - Applications - Aplicaciones - - - - - Virtual Streams - Flujos virtuales - - - - &Recording - &Grabación - - - - <i>No application is currently recording audio.</i> - <i>Ninguna aplicación está actualmente grabando audio.</i> - - - - &Output Devices - Dispositivos de &salida - - - - <i>No output devices available</i> - <i>No hay dispositivos de salida disponibles</i> - - - - All Output Devices - Todos los dispositivos de salida - - - - Hardware Output Devices - Dispositivos de salida por hardware - - - - Virtual Output Devices - Dispositivos de salida virtuales - - - - &Input Devices - &Dispositivos de entrada - - - - <i>No input devices available</i> - <i>No hay dispositivos de entrada disponibles</i> - - - - All Input Devices - Todos los dispositivos de entrada - - - - All Except Monitors - Todos excepto los monitores - - - - Hardware Input Devices - Dispositivos de entrada por hardware - - - - Virtual Input Devices - Dispositivos de entrada virtuales - - - - Monitors - Monitores - - - - &Configuration - &Configuración - - - - <i>No cards available for configuration</i> - <i>No hay tarjetas disponibles para configurar</i> - - - - Show volume meters - Mostrar los medidores de volumen - - - - ... - ... - - - - (plugged in) - (conectado) - - - - - (unavailable) - (no disponible) - - - - - (unplugged) - (desconectado) - - - - Failed to read data from stream - Fallo al leer datos del flujo - - - - Peak detect - Detección de picos - - - - Failed to create monitoring stream - Fallo al crear flujo de monitoreo - - - - Failed to connect monitoring stream - Fallo al conectarse al flujo de monitoreo - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Se ignora la entrada del receptor por haberse designado como un suceso, siendo por tanto gestionado por la miniaplicación Sucesos - - - - System Sounds - Sonidos del sistema - - - - Establishing connection to PulseAudio. Please wait... - Estableciendo la conexión con PulseAudio. Espere… - - - - QObject - - - Error - Error - - - - Card callback failure - Fallo en la devolución de llamada de la tarjeta - - - - Sink callback failure - Fallo en la devolución de llamada al receptor - - - - Source callback failure - Fallo en la devolución de llamada a la fuente - - - - Sink input callback failure - Fallo en la devolución de llamada de la entrada del receptor - - - - Source output callback failure - Fallo en la devolución de llamada de la salida de la fuente - - - - Client callback failure - Fallo en la devolución de llamada al cliente - - - - Server info callback failure - Fallo en la devolución de llamada por información del servidor - - - - - Failed to initialize stream_restore extension: %s - Fallo al iniciar la extensión stream_restore: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ha fallado - - - - - Failed to initialize device restore extension: %s - Error al inicializar la extensión de restauración del dispositivo: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() ha fallado - - - - - Failed to initialize device manager extension: %s - Error al inicializar la extensión de gestión del dispositivo: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() ha fallado - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ha fallado - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ha fallado - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ha fallado - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ha fallado - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ha fallado - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ha fallado - - - - pa_context_subscribe() failed - pa_context_subscribe() ha fallado - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ha fallado - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ha fallado - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ha fallado - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ha fallado - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ha fallado - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ha fallado - - - - - Connection failed, attempting reconnect - La conexión ha fallado; intentando reconectar - - - - - PulseAudio Volume Control - Control de volumen de PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - La conexión a PulseAudio ha fallado. Reintento automático en 5s - -En este caso es probable porque PULSE_SERVER en las propiedades de Entorno/Ventana raíz de X11 -o servidor por omisión en client.conf esté mal configurada. -Esta situación también puede surgir cuando PulseAudio ha fallado y dejado restos en la Ventana raíz de X11. -Si este es el caso, entonces PulseAudio debería reiniciarse de nuevo, o, si esto no está configurado, usted debería -ejecutar start-pulseaudio-x11 manualmente. - - - - Select a specific tab on load. - Seleccionar una pestaña específica al cargar. - - - - Retry forever if pa quits (every 5 seconds). - Reintentar indefinidamente si pa termina (cada 5 segundos). - - - - Maximize the window. - Maximizar la ventana. - - - - Fatal Error: Unable to connect to PulseAudio - Error fatal: no se puede reconectar con PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ha fallado - - - - SinkInputWidget - - - on - encendido - - - - Terminate Playback - Terminar la reproducción - - - - Unknown output - Salida desconocida - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ha fallado - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ha fallado - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ha fallado - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ha fallado - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ha fallado - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ha fallado - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ha fallado - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ha fallado - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() ha fallado - - - - SourceOutputWidget - - - from - desde - - - - Terminate Recording - Terminar la grabación - - - - Unknown input - Entrada desconocida - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() ha fallado - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() ha fallado - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ha fallado - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ha fallado - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ha fallado - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ha fallado - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ha fallado - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ha fallado - - - - StreamWidget - - - Form - Formulario - - - - Device Title - Título del dispositivo - - - - direction - dirección - - - - device - dispositivo - - - - Mute audio - Silenciar el sonido - - - - Lock channels together - Sincronizar canales - - - - Terminate - Terminar - - - diff --git a/src/translations/pavucontrol-qt_et.desktop.yaml b/src/translations/pavucontrol-qt_et.desktop.yaml deleted file mode 100644 index 8b100d7..0000000 --- a/src/translations/pavucontrol-qt_et.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio helitugevuse juhtimine" -Desktop Entry/GenericName: "Helitugevuse juhtimine" -Desktop Entry/Comment: "Seadista heli valjust" diff --git a/src/translations/pavucontrol-qt_et.ts b/src/translations/pavucontrol-qt_et.ts deleted file mode 100644 index 34b5cf3..0000000 --- a/src/translations/pavucontrol-qt_et.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Vorm - - - - Card Name - Kaardi nimi - - - - Profile: - Profiil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() päring nurjus - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Vaikus</small> - - - - <small>Min</small> - <small>Vaikne</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Tavavaljus</i></small> - - - - ChannelWidget - - - Form - Vorm - - - - <b>left-front</b> - <b>vasak-esimene</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Vorm - - - - Device Title - Seadme pealkiri - - - - Mute audio - Summuta heli - - - - Lock channels together - Liida kanalid kokku - - - - Set as fallback - Määra varuvariandiks - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Näita lisaseadistusi - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Viivituse nihe:</b> - - - - ms - ms - - - - Rename device... - Anna seadmele uus nimi... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() ebaõnnestus - - - - Sorry, but device renaming is not supported. - Vabandus, aga seadmele uue nime andmine pole hetkel toetatud. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Seadmete nimede muutmiseks peab PulseAudio serveris olema laaditud module-device-manager moodul - - - - Rename device %1 to: - Muuda %1 seadme uueks nimeks: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() ebaõnnestus - - - - MainWindow - - - Volume Control - Helivaljuse juhtimine - - - - <i>No application is currently playing audio.</i> - <i>Mitte ükski seade hetkel ei esita heli.</i> - - - - - - - Show: - Näita: - - - - - All Streams - Kõiki helivoogusid - - - - - Applications - Rakendusi - - - - - Virtual Streams - Virtuaalseid helivoogusid - - - - <i>No application is currently recording audio.</i> - <i>Mitte ükski seade hetkel ei salvesta heli.</i> - - - - <i>No output devices available</i> - <i>Väljudseadmeid ei leidu</i> - - - - All Output Devices - Kõiki väljundseadmeid - - - - Hardware Output Devices - Raudvaralisi väljundseadmeid - - - - Virtual Output Devices - Virtuaalseid väljundseadmeid - - - - &Playback - Heli &esitamine - - - - &Recording - Heli &salvestamine - - - - &Output Devices - &Väljundseadmed - - - - &Input Devices - S&isendseadmed - - - - <i>No input devices available</i> - <i>Sisendseadmeid ei leidu</i> - - - - All Input Devices - Kõiki sisendseadmeid - - - - All Except Monitors - Kõiki peale monitoride - - - - Hardware Input Devices - Raudvara-põhiseid sisendseadmeid - - - - Virtual Input Devices - Virtuaalseid sisendseadmeid - - - - Monitors - Monitore - - - - &Configuration - Sea&distused - - - - <i>No cards available for configuration</i> - <i>Ei leidu ühtegi seadistatavat helikaarti</i> - - - - Show volume meters - Kuva helivaljuse näidikuid - - - - ... - ... - - - - (plugged in) - (ühendatud) - - - - - (unavailable) - (pole saadaval) - - - - - (unplugged) - (ei ole ühendatud) - - - - Failed to read data from stream - Helivoost ei õnnestunud teavet lugeda - - - - Peak detect - Kasuta tippvaljuse tuvastamist - - - - Failed to create monitoring stream - Kontrollvoo loomine ei õnnestunud - - - - Failed to connect monitoring stream - Kontrollvooga ühendamine ei õnnestunud - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Kuna ta on määratud sündmuseks, siis eiran neelusisendit ja käsitlen seda sündmuste vidina vahendusel - - - - System Sounds - Süsteemihelid - - - - Establishing connection to PulseAudio. Please wait... - Ühendan PulseAudio taustateenusega. Palun oota... - - - - QObject - - - Error - Viga - - - - Card callback failure - Tagasiside kaardiga ei toimi - - - - Sink callback failure - Tagasiside neelus ei toimi - - - - Source callback failure - Tagasiside helivoo allikaga ei toimi - - - - Sink input callback failure - Tagasiside neelu sisendiga ei toimi - - - - Source output callback failure - Tagasiside helivoo väljundiga ei toimi - - - - Client callback failure - Tagasiside kliendiga ei toimi - - - - Server info callback failure - Tagasiside serveri teabega ei toimi - - - - - Failed to initialize stream_restore extension: %s - stream_restore laiendust ei õnnestu käivitada: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ebaõnnestus - - - - - Failed to initialize device restore extension: %s - Seadme taastamise laiendust ei õnnestu käivitada: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() ebaõnnestus - - - - - Failed to initialize device manager extension: %s - Seadme haldamise laiendust ei õnnestu käivitada: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() ebaõnnestus - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ebaõnnestus - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ebaõnnestus - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ebaõnnestus - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ebaõnnestus - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ebaõnnestus - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ebaõnnestus - - - - pa_context_subscribe() failed - pa_context_subscribe() ebaõnnestus - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ebaõnnestus - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ebaõnnestus - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ebaõnnestus - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ebaõnnestus - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ebaõnnestus - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ebaõnnestus - - - - - Connection failed, attempting reconnect - Ühendamine ei õnnestunud, kohe proovin uuesti - - - - - PulseAudio Volume Control - PulseAudio helivaljuse seadistused - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Ühendus PulseAudio taustateenusega katkes. Proovin uuesti 5 sekundi möödumisel. - -Antud juhul on tõenäoline, et PULSE_SERVER on kas Environment/X11 Root Window Properties all -või client.conf failis default-server on valesti seadistatud. -Samuti võib niisugune ühenduse katkemine tekkida, kui PulseAudio on kokku jooksnud ja X11 Root Window sisaldab vigaseid andmeid. -Viimasel juhul peaks PulseAudio protsess ise uuesti käivituma või see pole seadistustes lubatud, -siis palun käivita start-pulseaudio-x11 käsitsi. - - - - Select a specific tab on load. - Vali laetav kaart. - - - - Retry forever if pa quits (every 5 seconds). - Kui PulseAudio lõpetab töö, siis proovi lõputult uuesti (iga 5 sekundi järel). - - - - Maximize the window. - Suurenda aken. - - - - Fatal Error: Unable to connect to PulseAudio - Lõplik viga: PulseAudio taustateenusega ei saa ühendust - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ebaõnnestus - - - - SinkInputWidget - - - on - sisse lülitatud - - - - Terminate Playback - Lõpeta heli esitamine - - - - Unknown output - Tundmatu väljund - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ebaõnnestus - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ebaõnnestus - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ebaõnnestus - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ebaõnnestus - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ebaõnnestus - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ebaõnnestus - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ebaõnnestus - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ebaõnnestus - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() ebaõnnestus - - - - SourceOutputWidget - - - from - seadmest - - - - Terminate Recording - Lõpeta salvestamine - - - - Unknown input - Tundmatu sisend - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() ebaõnnestus - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() ebaõnnestus - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ebaõnnestus - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ebaõnnestus - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ebaõnnestus - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ebaõnnestus - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ebaõnnestus - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ebaõnnestus - - - - StreamWidget - - - Form - Vorm - - - - Device Title - Seadme nimi - - - - direction - suund - - - - device - seade - - - - Mute audio - Summuta heli - - - - Lock channels together - Lukusta kanalid kokku - - - - Terminate - Lõpeta esitamine - - - diff --git a/src/translations/pavucontrol-qt_fi.ts b/src/translations/pavucontrol-qt_fi.ts deleted file mode 100644 index 2b8d6a5..0000000 --- a/src/translations/pavucontrol-qt_fi.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Lomake - - - - Card Name - Kortin nimi - - - - Profile: - Profiili: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() epäonnistui - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Hiljaisuus</small> - - - - <small>Min</small> - <small>Minimi</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Perus</i></small> - - - - ChannelWidget - - - Form - Lomake - - - - <b>left-front</b> - <b>vasen-etu</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Lomake - - - - Device Title - Laitteen otsikko - - - - Mute audio - Vaimenna äänet - - - - Lock channels together - Lukitse kanavat yhteen - - - - Set as fallback - Aseta varalle - - - - <b>Port:</b> - <b>Portti:</b> - - - - Show advanced options - Näytä edistyneet asetukset - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Viiveen kompensaatio:</b> - - - - ms - ms - - - - Rename device... - Uudelleennimeä laite... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() epäonnistui - - - - Sorry, but device renaming is not supported. - Laitteen uudelleennimeämistä ei tueta. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - PulseAudio serverin module-device-manager täytyy olla ladattuna jotta laitteita voidaan uudelleennimetä - - - - Rename device %1 to: - Laitteen %1 uusi nimi: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() epäonnistui - - - - MainWindow - - - Volume Control - Äänenvoimakkuus - - - - &Playback - &Toisto - - - - <i>No application is currently playing audio.</i> - <i>Yksikään sovellus ei tällä hetkellä toista ääntä.</i> - - - - - - - Show: - Näytä: - - - - - All Streams - Kaikki äänilähteet - - - - - Applications - Sovellukset - - - - - Virtual Streams - Virtuaalilähteet - - - - &Recording - &Nauhoitus - - - - <i>No application is currently recording audio.</i> - <i>Yksikään sovellus ei tällä hetkellä nauhoita ääntä.</i> - - - - &Output Devices - Ul&ostulolaitteet - - - - <i>No output devices available</i> - <i>Ulostulolaitteita ei saatavilla</i> - - - - All Output Devices - Kaikki ulostulo laitteet - - - - Hardware Output Devices - Ulostulolaitteet - - - - Virtual Output Devices - Virtuaaliulostulolaitteet - - - - &Input Devices - S&isääntulolaitteet - - - - <i>No input devices available</i> - <i>Sisääntulolaitteita ei saatavilla</i> - - - - All Input Devices - Kaikki sisääntulolaitteet - - - - All Except Monitors - Kaikki paitsi näytöt - - - - Hardware Input Devices - Sisääntulolaitteet - - - - Virtual Input Devices - Virtuaalisisääntulolaitteet - - - - Monitors - Näytöt - - - - &Configuration - &Asetukset - - - - <i>No cards available for configuration</i> - <i>Yhtäkään äänikorttia ei ole käytettävissä</i> - - - - Show volume meters - Näytä äänenvoimakkuuden mittarit - - - - ... - ... - - - - (plugged in) - (liitetty) - - - - - (unavailable) - (ei saatavilla) - - - - - (unplugged) - (ei liitetty) - - - - Failed to read data from stream - Datan lukeminen virrasta epäonnistui - - - - Peak detect - Huipun tunnistus - - - - Failed to create monitoring stream - Tarkkailuvirran luonti epäonnistui - - - - Failed to connect monitoring stream - Tarkkailuvirtaan yhdistäminen epäonnistui - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Jätetään huomiotta sink-syöte, sillä se on nimetty tapahtumaksi ja sen hoitaa Tapahtuma widgetti - - - - System Sounds - Järjestelmän äänet - - - - Establishing connection to PulseAudio. Please wait... - Muodostetaan PulseAudio yhteyttä. Ole hyvä, ja odota... - - - - QObject - - - Error - Virhe - - - - Card callback failure - Kortin takaisinkutsu epäonnistui - - - - Sink callback failure - Nielun takaisinkutsu epäonnistui - - - - Source callback failure - Lähteen takaisinkutsu epäonnistui - - - - Sink input callback failure - Nielun sisääntulon takaisinkutsu epäonnistui - - - - Source output callback failure - Lähteen ulostulon takaisinkutsu epäonnistui - - - - Client callback failure - Asiakkaan takaisinkutsu - - - - Server info callback failure - Palvelintietojen takaisinkutsu epäonnistui - - - - - Failed to initialize stream_restore extension: %s - stream_restore-laajennoksen alustus epäonnistui: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() epäonnistui - - - - - Failed to initialize device restore extension: %s - Epäonnistuttiin alustamaan laitteen palatuslaajennos: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() epäonnistui - - - - - Failed to initialize device manager extension: %s - Epäonnistuttiin alustamaan laitehallinnan laajennos: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() epäonnistui - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() epäonnistui - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() epäonnistui - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() epäonnistui - - - - pa_context_get_client_info() failed - pa_context_get_client_info() epäonnistui - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() epäonnistui - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() epäonnistui - - - - pa_context_subscribe() failed - pa_context_subscribe() epäonnistui - - - - pa_context_client_info_list() failed - pa_context_client_info_list() epäonnistui - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() epäonnistui - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() epäonnistui - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() epäonnistui - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() epäonnistui - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() epäonnistui - - - - - Connection failed, attempting reconnect - Yhdistäminen epäonnistui, yritetään uudelleen - - - - - PulseAudio Volume Control - PulseAudion äänenvoimakkuuden hallinta - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Yhdistäminen PulseAudioon epäonnistui. Yritetään automaattisesti 5s kuluttua - -Todennäköisesti PULSE_SEVER ympäristömuuttujissa tai X11 juuri-ikkunan asetukissa tai -oletuspalvelin client.conf-tiedostossa on väärin asetettu. -Näin voi käydä jos PulseAudio kaatuu ja jättää vanhoja tietoja X11 juuri-ikkunaan. -Tässä tapauksessa PulseAudion tulisi automaattisesti käynnistyä uudelleen, mutta jos näin ei ole -asetettu, käynnistä start-pulseaudio-x11 käsin. - - - - Select a specific tab on load. - Valitse välilehti latauksen yhteydessä. - - - - Retry forever if pa quits (every 5 seconds). - Yritä uudelleen jos pa lopettaa (joka 5 sekunti). - - - - Maximize the window. - Suurenna ikkuna. - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() epäonnistui - - - - SinkInputWidget - - - on - päällä - - - - Terminate Playback - - - - - Unknown output - Tuntematon ulostulo - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() epäonnistui - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() epäonnistui - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() epäonnistui - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() epäonnistui - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() epäonnistui - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() epäonnistui - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() epäonnistui - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() epäonnistui - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - lähteestä - - - - Terminate Recording - Pysäytä tallennus - - - - Unknown input - Tuntematon sisääntulo - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() epäonnistui - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() epäonnistui - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() epäonnistui - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() epäonnistui - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() epäonnistui - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() epäonnistui - - - - pa_context_set_default_source() failed - pa_context_set_default_source() epäonnistui - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() epäonnistui - - - - StreamWidget - - - Form - - - - - Device Title - Laitteen nimi - - - - direction - suunta - - - - device - laite - - - - Mute audio - Mykistä ääni - - - - Lock channels together - Lukitse kanavat yhteen - - - - Terminate - Lopeta toisto - - - diff --git a/src/translations/pavucontrol-qt_fr.desktop.yaml b/src/translations/pavucontrol-qt_fr.desktop.yaml deleted file mode 100644 index 2d068ec..0000000 --- a/src/translations/pavucontrol-qt_fr.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Contrôle du volume PulseAudio" -Desktop Entry/GenericName: "Contrôle du volume" -Desktop Entry/Comment: "Ajuster le niveau de volume" diff --git a/src/translations/pavucontrol-qt_fr.ts b/src/translations/pavucontrol-qt_fr.ts deleted file mode 100644 index 4f4e696..0000000 --- a/src/translations/pavucontrol-qt_fr.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulaire - - - - Card Name - Nom de la carte - - - - Profile: - Profil : - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() a échoué - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Muet</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Base </i></small> - - - - ChannelWidget - - - Form - Formulaire - - - - <b>left-front</b> - <b>avant-gauche</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulaire - - - - Device Title - Titre du périphérique - - - - Mute audio - Couper l'audio - - - - Lock channels together - Verrouiller les canaux ensemble - - - - Set as fallback - Définir comme solution de secours - - - - <b>Port:</b> - <b>Port :</b> - - - - Show advanced options - Afficher les options avancées - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Offset de la latence :</b> - - - - ms - ms - - - - Rename device... - Renommer le périphérique... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() a échoué - - - - Sorry, but device renaming is not supported. - Désolé, le changement de nom du périphérique n'est pas pris en charge. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Vous devez charger module-device-manager dans le serveur PulseAudio afin de pouvoir renommer les périphériques - - - - Rename device %1 to: - Renommer le périphérique %1 en : - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() a échoué - - - - MainWindow - - - Volume Control - Contrôle du volume - - - - &Playback - &Lecture - - - - <i>No application is currently playing audio.</i> - <i>Aucune application ne joue actuellement du son.</i> - - - - - - - Show: - Afficher : - - - - - All Streams - Tous les flux - - - - - Applications - Applications - - - - - Virtual Streams - Flux virtuels - - - - &Recording - &Enregistrement - - - - <i>No application is currently recording audio.</i> - <i>Aucune application n'enregistre actuellement du son.</i> - - - - &Output Devices - Périphériques de s&ortie - - - - <i>No output devices available</i> - <i>Aucun périphérique de sortie disponible</i> - - - - All Output Devices - Tous les périphériques de sortie - - - - Hardware Output Devices - Périphériques de sortie matériels - - - - Virtual Output Devices - Périphériques de sortie virtuels - - - - &Input Devices - Périphériques d'&entrée - - - - <i>No input devices available</i> - <i>Aucun périphérique d'entrée disponible</i> - - - - All Input Devices - Tous les périphériques d'entrée - - - - All Except Monitors - Tous sauf les écrans - - - - Hardware Input Devices - Périphériques d'entrée matériels - - - - Virtual Input Devices - Périphériques d'entrée virtuels - - - - Monitors - Écrans - - - - &Configuration - &Configuration - - - - <i>No cards available for configuration</i> - <i>Aucune carte n'est disponible pour la configuration</i> - - - - Show volume meters - Afficher les volumètres - - - - ... - ... - - - - (plugged in) - (branché) - - - - - (unavailable) - (non disponible) - - - - - (unplugged) - (débranché) - - - - Failed to read data from stream - Échec de la lecture de données du flux - - - - Peak detect - Détection de crête - - - - Failed to create monitoring stream - Échec de la création du flux de surveillance - - - - Failed to connect monitoring stream - Échec de la connexion au flux de surveillance - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorer l'entrée du récepteur car il est désigné comme événement et donc traité par le widget des événements - - - - System Sounds - Sons du système - - - - Establishing connection to PulseAudio. Please wait... - Établissement de la connexion à PulseAudio. Patientez... - - - - QObject - - - Error - Erreur - - - - Card callback failure - Échec de la fonction de rappel de la carte - - - - Sink callback failure - Échec du rappel de la destination - - - - Source callback failure - Échec du rappel de la source - - - - Sink input callback failure - Échec du rappel de l'entrée du récepteur - - - - Source output callback failure - Échec du rappel de la sortie source - - - - Client callback failure - Échec du rappel du client - - - - Server info callback failure - Échec du rappel des informations sur le serveur - - - - - Failed to initialize stream_restore extension: %s - Échec d'initialisation de l'extension stream_restore : %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() a échoué - - - - - Failed to initialize device restore extension: %s - Échec d'initialisation de l'extension de restauration du périphérique : %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() a échoué - - - - - Failed to initialize device manager extension: %s - Échec d'initialisation de l'extension du gestionnaire de périphériques : %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() a échoué - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() a échoué - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() a échoué - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() a échoué - - - - pa_context_get_client_info() failed - pa_context_get_client_info() a échoué - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() a échoué - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() a échoué - - - - pa_context_subscribe() failed - pa_context_subscribe() a échoué - - - - pa_context_client_info_list() failed - pa_context_client_info_list() a échoué - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() a échoué - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() a échoué - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() a échoué - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() a échoué - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() a échoué - - - - - Connection failed, attempting reconnect - Échec de la connexion, tentative de reconnexion - - - - - PulseAudio Volume Control - Contrôle du volume PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - La connexion à PulseAudio a échoué. Nouvelle tentative automatique dans 5s - -Dans ce cas, cela est probablement dû au fait que PULSE_SERVER est dans les propriétés de la fenêtre racine Environnement/X11 -ou default-server dans client.conf est mal configuré. -Cette situation peut également se produire lorsque PulseAudio a cessé de fonctionner et laisser des détails obsolètes dans la fenêtre racine X11. -Si tel est le cas, PulseAudio doit à nouveau lancer automatiquement l’auto-génération, ou si cela n’est pas configuré, vous devez -lancer manuellement start-pulseaudio-x11. - - - - Select a specific tab on load. - Sélectionner un onglet spécifique lors du chargement. - - - - Retry forever if pa quits (every 5 seconds). - Toujours réessayer si pavucontrol quitte (toutes les 5s). - - - - Maximize the window. - Maximiser la fenêtre. - - - - Fatal Error: Unable to connect to PulseAudio - Erreur fatale : connexion impossible à PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() a échoué - - - - SinkInputWidget - - - on - en fonction - - - - Terminate Playback - Terminer la lecture - - - - Unknown output - Sortie inconnue - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() a échoué - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() a échoué - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() a échoué - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() a échoué - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() a échoué - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() a échoué - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() a échoué - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() a échoué - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() a échoué - - - - SourceOutputWidget - - - from - de - - - - Terminate Recording - Mettre fin à l'enregistrement - - - - Unknown input - Entrée inconnue - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() a échoué - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() a échoué - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() a échoué - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() a échoué - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() a échoué - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() a échoué - - - - pa_context_set_default_source() failed - pa_context_set_default_source() a échoué - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() a échoué - - - - StreamWidget - - - Form - Formulaire - - - - Device Title - Titre du périphérique - - - - direction - direction - - - - device - périphérique - - - - Mute audio - Couper l'audio - - - - Lock channels together - Verrouiller les canaux ensembles - - - - Terminate - Terminer la lecture - - - diff --git a/src/translations/pavucontrol-qt_gl.desktop.yaml b/src/translations/pavucontrol-qt_gl.desktop.yaml deleted file mode 100644 index dfea2c2..0000000 --- a/src/translations/pavucontrol-qt_gl.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Control de volume do PulseAudio" -Desktop Entry/GenericName: "Control de volume" -Desktop Entry/Comment: "Axustar o nivel do volume" diff --git a/src/translations/pavucontrol-qt_gl.ts b/src/translations/pavucontrol-qt_gl.ts deleted file mode 100644 index 7546e3d..0000000 --- a/src/translations/pavucontrol-qt_gl.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulario - - - - Card Name - Nome da tarxeta - - - - Profile: - Perfil: - - - - pa_context_set_card_profile_by_index() failed - Produciuse un fallo de pa_context_set_card_profile_by_index() - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>Silencio</small> - - - - <small>Min</small> - <small>Mín</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - Formulario - - - - <b>left-front</b> - <b>frontal-esquerdo</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - Formulario - - - - Device Title - Título do dispositivo - - - - Mute audio - Silenciar o son - - - - Lock channels together - Bloquear as canles xuntas - - - - Set as fallback - Estabelecer como alternativa - - - - <b>Port:</b> - <b>Porto:</b> - - - - Show advanced options - Amosar as opcións avanzadas - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>Desviación da latencia:</b> - - - - ms - - - - - Rename device... - Renomear o dispositivo... - - - - pa_context_set_port_latency_offset() failed - Produciuse un fallo de pa_context_set_port_latency_offset() - - - - Sorry, but device renaming is not supported. - Sentímolo, non é posíbel renomear o dispositivo. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - É necesario cargar «module-device-manager» no servidor de PulseAudio para poder renomear dispositivos - - - - Rename device %1 to: - Renomear o dispositivo %1 como: - - - - pa_ext_device_manager_set_device_description() failed - Produciuse un fallo de pa_ext_device_manager_set_device_description() - - - - MainWindow - - - Volume Control - Control do volume - - - - <i>No application is currently playing audio.</i> - <i>Non hai ningunha aplicación reproducindo son.</i> - - - - - - - Show: - Amosar: - - - - - All Streams - Todos os fluxos - - - - - Applications - Aplicacións - - - - - Virtual Streams - Fluxos virtuais - - - - <i>No application is currently recording audio.</i> - <i>Non hai ningunha aplicación gravando son.</i> - - - - <i>No output devices available</i> - <i>Non hai dispositivos de saída dispoñíbeis</i> - - - - All Output Devices - Todos os dispositivos de saída - - - - Hardware Output Devices - Dispositivos de saída por hardware - - - - Virtual Output Devices - Dispositivos de saída virtuais - - - - &Playback - &Reprodución - - - - &Recording - &Gravación - - - - &Output Devices - Dispositivos de &saída - - - - &Input Devices - Dispositivos de &entrada - - - - <i>No input devices available</i> - <i>Non hai dispositivos de entrada dispoñíbeis</i> - - - - All Input Devices - Todos os dispositivos de entrada - - - - All Except Monitors - Todos, agás os monitores - - - - Hardware Input Devices - Dispositivos de entrada por hardware - - - - Virtual Input Devices - Dispositivos de entrada virtuais - - - - Monitors - Monitores - - - - &Configuration - &Configuración - - - - <i>No cards available for configuration</i> - <i>Non hai tarxetas dispoñíbeis para configurar</i> - - - - Show volume meters - Amosar os medidores de volume - - - - ... - - - - - (plugged in) - (conectado) - - - - - (unavailable) - (non dispoñíbel) - - - - - (unplugged) - (desconectado) - - - - Failed to read data from stream - Produciuse un fallo ao ler datos do fluxo - - - - Peak detect - Detección de picos - - - - Failed to create monitoring stream - Produciuse un fallo ao crear o fluxo de monitorización - - - - Failed to connect monitoring stream - Produciuse un fallo ao conectarse co fluxo de monitorización - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorarase o colector de entrada por ter sido designado como un evento, sendo polo tanto administrado polo trebello de eventos - - - - System Sounds - Sons do sistema - - - - Establishing connection to PulseAudio. Please wait... - Estabelecendo a conexión co PulseAudio. Agarde... - - - - QObject - - - Error - Erro - - - - Card callback failure - Produciuse un fallo na chamada de resposta da tarxeta - - - - Sink callback failure - Produciuse un fallo na chamada de resposta do colector - - - - Source callback failure - Produciuse un fallo na chamada de resposta da fonte - - - - Sink input callback failure - Produciuse un fallo na chamada de entrada do colector - - - - Source output callback failure - Produciuse un fallo na chamada de resposta da saída da fonte - - - - Client callback failure - Produciuse un fallo na chamada de resposta do cliente - - - - Server info callback failure - Produciuse un fallo na chamada de información do servidor - - - - - Failed to initialize stream_restore extension: %s - Produciuse un fallo ao iniciar a extensión «stream_restore»: %s - - - - pa_ext_stream_restore_read() failed - Produciuse un fallo de pa_ext_stream_restore_read() - - - - - Failed to initialize device restore extension: %s - Produciuse un fallo ao iniciar a extensión de restauración do dispositivo: %s - - - - pa_ext_device_restore_read_sink_formats() failed - Produciuse un fallo de pa_ext_device_restore_read_sink_formats() - - - - - Failed to initialize device manager extension: %s - Produciuse un fallo ao iniciar a extensión de xestión do dispositivo: %s - - - - pa_ext_device_manager_read() failed - Produciuse un fallo de pa_ext_device_manager_read() - - - - pa_context_get_sink_info_by_index() failed - Produciuse un fallo de pa_context_get_sink_info_by_index() - - - - pa_context_get_source_info_by_index() failed - Produciuse un fallo de pa_context_get_source_info_by_index() - - - - - pa_context_get_sink_input_info() failed - Produciuse un fallo de pa_context_get_sink_input_info() - - - - pa_context_get_client_info() failed - Produciuse un fallo de pa_context_get_client_info() - - - - - pa_context_get_server_info() failed - Produciuse un fallo de pa_context_get_server_info() - - - - pa_context_get_card_info_by_index() failed - Produciuse un fallo de pa_context_get_card_info_by_index() - - - - pa_context_subscribe() failed - Produciuse un fallo de pa_context_subscribe() - - - - pa_context_client_info_list() failed - Produciuse un fallo de pa_context_client_info_list() - - - - pa_context_get_card_info_list() failed - Produciuse un fallo de pa_context_get_card_info_list() - - - - pa_context_get_sink_info_list() failed - Produciuse un fallo de pa_context_get_sink_info_list() - - - - pa_context_get_source_info_list() failed - Produciuse un fallo de pa_context_get_source_info_list() - - - - pa_context_get_sink_input_info_list() failed - Produciuse un fallo de pa_context_get_sink_input_info_list() - - - - pa_context_get_source_output_info_list() failed - Produciuse un fallo de pa_context_get_source_output_info_list() - - - - - Connection failed, attempting reconnect - Produciuse un fallo na conexión, tentando volver conectar - - - - - PulseAudio Volume Control - Control de volume do PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Produciuse un fallo na conexión a PulseAudio. Tentarase de novo en 5s - -Neste caso é probábel, por mor de que PULSE_SERVER estea mal configurado nas propiedades do -contorno/xanela raíz de X11 ou en «client.conf» no servidor predeterminado. -Esta situación tamén pode xurdir cando falla PulseAudio e deixa restos na xanela raíz de X11. -Se é este o caso, deberá reiniciarse o PulseAudio, ou, se iso non está configurado, vostede debe -executar «start-pulseaudio-x11» manualmente. - - - - Select a specific tab on load. - Seleccionar unha lapela específica ao cargar. - - - - Retry forever if pa quits (every 5 seconds). - Reintentar indefinidamente se PA se pecha (cada 5 segundos). - - - - Maximize the window. - Maximizar a xanela. - - - - Fatal Error: Unable to connect to PulseAudio - Produciuse un erro grave: Non é posíbel volver conectar co PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Produciuse un fallo de pa_ext_stream_restore_write() - - - - SinkInputWidget - - - on - acendido - - - - Terminate Playback - Rematar a reprodución - - - - Unknown output - Saída descoñecida - - - - pa_context_set_sink_input_volume() failed - Produciuse un fallo de pa_context_set_sink_input_volume() - - - - pa_context_set_sink_input_mute() failed - Produciuse un fallo de pa_context_set_sink_input_mute() - - - - pa_context_kill_sink_input() failed - Produciuse un fallo de pa_context_kill_sink_input() - - - - pa_context_move_sink_input_by_index() failed - Produciuse un fallo de pa_context_move_sink_input_by_index() - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Produciuse un fallo de pa_context_set_sink_volume_by_index() - - - - pa_context_set_sink_mute_by_index() failed - Produciuse un fallo de pa_context_set_sink_mute_by_index() - - - - pa_context_set_default_sink() failed - Produciuse un fallo de pa_context_set_default_sink() - - - - pa_context_set_sink_port_by_index() failed - Produciuse un fallo de pa_context_set_sink_port_by_index() - - - - pa_ext_device_restore_save_sink_formats() failed - Produciuse un fallo de pa_ext_device_restore_save_sink_formats() - - - - SourceOutputWidget - - - from - dende - - - - Terminate Recording - Rematar a gravación - - - - Unknown input - Entrada descoñecida - - - - pa_context_set_source_output_volume() failed - Produciuse un fallo de pa_context_set_source_output_volume() - - - - pa_context_set_source_output_mute() failed - Produciuse un fallo de pa_context_set_source_output_mute() - - - - pa_context_kill_source_output() failed - Produciuse un fallo de pa_context_kill_source_output() - - - - pa_context_move_source_output_by_index() failed - Produciuse un fallo de pa_context_move_source_output_by_index() - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Produciuse un fallo de pa_context_set_source_volume_by_index() - - - - pa_context_set_source_mute_by_index() failed - Produciuse un fallo de pa_context_set_source_mute_by_index() - - - - pa_context_set_default_source() failed - Produciuse un fallo de pa_context_set_default_source() - - - - pa_context_set_source_port_by_index() failed - Produciuse un fallo de pa_context_set_source_port_by_index() - - - - StreamWidget - - - Form - Formulario - - - - Device Title - Título do dispositivo - - - - direction - dirección - - - - device - dispositivo - - - - Mute audio - Silenciar o son - - - - Lock channels together - Bloquear as canles xuntas - - - - Terminate - Rematar - - - diff --git a/src/translations/pavucontrol-qt_gu.ts b/src/translations/pavucontrol-qt_gu.ts deleted file mode 100644 index df6430a..0000000 --- a/src/translations/pavucontrol-qt_gu.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - કાર્ડ નામ - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() નિષ્ફળ - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>શાંત</small> - - - - <small>Min</small> - <small>ન્યૂનત્તમ</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>આધાર</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ડાબે-આગળ</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>પોર્ટ:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - વોલ્યમ નિયંત્રણ - - - - &Playback - પ્લેબેક (&P) - - - - <i>No application is currently playing audio.</i> - <i>કાર્યક્રમ એ હાલમાં ઓડિયોને વગાડતી નથી.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - રેકોર્ડ કરી રહ્યા છે (&R) - - - - <i>No application is currently recording audio.</i> - <i>કાર્યક્રમ એ હાલમાં ઓડિયોને રેકોર્ડ કરતી નથી.</i> - - - - &Output Devices - આઉટપુટ ઉપકરણો (&O) - - - - <i>No output devices available</i> - <i>આઉટપુટ ઉપકરણો ઉપલ્બધ નથી</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - ઇનપુટ ઉપકરણો (&I) - - - - <i>No input devices available</i> - <i>ઇનપુટ ઉપકરણો ઉપલ્બધ નથી</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - રૂપરેખાંકન (&C) - - - - <i>No cards available for configuration</i> - <i>રૂપરેખાંકન માટે કાર્ડો ઉપલ્બધ નથી</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - સ્ટ્રીમમાંથી માહિતી વાંચવામાં નિષ્ફળ - - - - Peak detect - શોધની ટોચ - - - - Failed to create monitoring stream - મોનિટરીંગ સ્ટ્રીમને બનાવવામાં નિષ્ફળ - - - - Failed to connect monitoring stream - મોનિટરીંગ સ્ટ્રીમને જોડવામાં નિષ્ફળ - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - સિસ્ટમ સાઉન્ડો - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - કાર્ડ કોલબેક નિષ્ફળ - - - - Sink callback failure - સિન્ક કોલબેક નિષ્ફળ - - - - Source callback failure - સ્ત્રોત કોલબેક નિષ્ફળ - - - - Sink input callback failure - સિન્ક ઇનપુટ કોલબેક નિષ્ફળ - - - - Source output callback failure - સ્ત્રોત આઉટપુટ કોલબેક નિષ્ફળ - - - - Client callback failure - ક્લાઇન્ટ કોલબેક નિષ્ફળ - - - - Server info callback failure - સર્વર જાણકારી કોલબેક નિષ્ફળ - - - - - Failed to initialize stream_restore extension: %s - સ્ટ્રીમ પુન:સંગ્રહ એક્સટેન્શનને પ્રારંભ કરવામાં નિષ્ફળ (_r): %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() નિષ્ફળ - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() નિષ્ફળ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() નિષ્ફળ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() નિષ્ફળ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() નિષ્ફળ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() નિષ્ફળ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() નિષ્ફળ - - - - pa_context_subscribe() failed - pa_context_subscribe() નિષ્ફળ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() નિષ્ફળ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() નિષ્ફળ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() નિષ્ફળ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() નિષ્ફળ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() નિષ્ફળ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() નિષ્ફળ - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio વોલ્યુમ નિયંત્રણ - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() નિષ્ફળ - - - - SinkInputWidget - - - on - પર - - - - Terminate Playback - - - - - Unknown output - અજ્ઞાત આઉટપુટ - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() નિષ્ફળ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() નિષ્ફળ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() નિષ્ફળ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() નિષ્ફળ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() નિષ્ફળ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() નિષ્ફળ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() નિષ્ફળ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() નિષ્ફળ - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - માંથી - - - - Terminate Recording - - - - - Unknown input - અજ્ઞાત ઇનપુટ - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() નિષ્ફળ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() નિષ્ફળ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() નિષ્ફળ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() નિષ્ફળ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() નિષ્ફળ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() નિષ્ફળ - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - દિશા - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - પ્લેબેકનો અંત લાવો - - - diff --git a/src/translations/pavucontrol-qt_he.desktop.yaml b/src/translations/pavucontrol-qt_he.desktop.yaml deleted file mode 100644 index effd084..0000000 --- a/src/translations/pavucontrol-qt_he.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "בקרת עצמת השמע של PulseAudio" -Desktop Entry/GenericName: "בקרת עצמת שמע" -Desktop Entry/Comment: "כוונון עצמת השמע" diff --git a/src/translations/pavucontrol-qt_he.ts b/src/translations/pavucontrol-qt_he.ts deleted file mode 100644 index 4e930fe..0000000 --- a/src/translations/pavucontrol-qt_he.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - טופס - - - - Card Name - שם כרטיס - - - - Profile: - פרופיל: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index()‎ נכשל - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>שקט</small> - - - - <small>Min</small> - <small>מזערי</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small>בסיס</small> - - - - ChannelWidget - - - Form - טופס - - - - <b>left-front</b> - <b>שמאל-קדמי</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - טופס - - - - Device Title - כותרת התקן - - - - Mute audio - השתקת שמע - - - - Lock channels together - נעילת הערוצים זה לזה - - - - Set as fallback - הגדרה כמוצא אחרון - - - - <b>Port:</b> - <b>פתחה:</b> - - - - Show advanced options - הצגת אפשרויות מתקדמות - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>היסט עיכוב:</b> - - - - ms - מ״ש - - - - Rename device... - שינוי שם התקן… - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset()‎ נכשל - - - - Sorry, but device renaming is not supported. - אין תמיכה בשינוי שמות של התקנים, עמך הסליחה. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - עליך לטעון module-device-manager בשרת ה־PulseAudio כדי לשנות שמות של התקנים - - - - Rename device %1 to: - שינוי שם ההתקן %1 לשם: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description()‎ נכשל - - - - MainWindow - - - Volume Control - בקרת עצמת שמע - - - - <i>No application is currently playing audio.</i> - אף יישום לא מנגן שמע כרגע. - - - - - - - Show: - הצגה: - - - - - All Streams - כל התזרימים - - - - - Applications - יישומים - - - - - Virtual Streams - תזרימים וירטואליים - - - - <i>No application is currently recording audio.</i> - אף יישום לא מקליט שמע כרגע. - - - - <i>No output devices available</i> - אין התקני פלט זמינים - - - - All Output Devices - כל התקני הפלט - - - - Hardware Output Devices - התקני פלט חומרתיים - - - - Virtual Output Devices - התקני פלט וירטואליים - - - - &Playback - &נגינה - - - - &Recording - ה&קלטה - - - - &Output Devices - התקני &פלט - - - - &Input Devices - התקני &קלט - - - - <i>No input devices available</i> - אין התקני קלט זמינים - - - - All Input Devices - כל התקני הקלט - - - - All Except Monitors - הכול למעט צגים - - - - Hardware Input Devices - התקני קלט חומרתיים - - - - Virtual Input Devices - התקני קלט וירטואליים - - - - Monitors - צגים - - - - &Configuration - ה&גדרות - - - - <i>No cards available for configuration</i> - אין כרטיסים שאפשר להגדיר - - - - Show volume meters - הצגת מחווני עצמת שמע - - - - ... - - - - - (plugged in) - (מחובר) - - - - - (unavailable) - (לא זמין) - - - - - (unplugged) - (לא מחובר) - - - - Failed to read data from stream - קריאת נתונים מהתזרים נכשלה - - - - Peak detect - זיהוי פסגות - - - - Failed to create monitoring stream - יצירת תזרים ניטור נכשלה - - - - Failed to connect monitoring stream - ההתחברות לתזרים הניטור נכשלה - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - התעלמות מקלט משטף כיוון שהוא מוקצה כאירוע ולכן מטופל על ידי וידג׳ט האירועים - - - - System Sounds - צלילי המערכת - - - - Establishing connection to PulseAudio. Please wait... - מתבצע חיבור ל־PulseAudio, נא להמתין… - - - - QObject - - - Error - שגיאה - - - - Card callback failure - הקריאה החוזרת מהכרטיס נכשלה - - - - Sink callback failure - הקריאה החוזרת מהמשטף נכשלה - - - - Source callback failure - הקריאה החוזרת מהמקור נכשלה - - - - Sink input callback failure - קריאת קלט חוזרת מהמשטף נכשלה - - - - Source output callback failure - קריאת פלט חוזרת מהמקור נכשלה - - - - Client callback failure - קריאת לקוח חוזרת נכשלה - - - - Server info callback failure - קריאת מידע שרת חוזרת נכשלה - - - - - Failed to initialize stream_restore extension: %s - הפעלת ההרחבה stream_restore נכשלה: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read()‎ נכשל - - - - - Failed to initialize device restore extension: %s - הפעלת הרחבת שחזור התקן נכשלה: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats()‎ נכשל - - - - - Failed to initialize device manager extension: %s - הפעלת הרחבת מנהל ההתקנים נכשלה: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read()‎ נכשל - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index()‎ נכשל - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index()‎ נכשל - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info()‎ נכשל - - - - pa_context_get_client_info() failed - pa_context_get_client_info()‎ נכשל - - - - - pa_context_get_server_info() failed - pa_context_get_server_info()‎ נכשל - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index()‎ נכשל - - - - pa_context_subscribe() failed - pa_context_subscribe()‎ נכשל - - - - pa_context_client_info_list() failed - pa_context_client_info_list()‎ נכשל - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list()‎ נכשל - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list()‎ נכשל - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list()‎ נכשל - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list()‎ נכשל - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list()‎ נכשל - - - - - Connection failed, attempting reconnect - החיבור נכשל, מתבצע ניסיון חיבור מחודש - - - - - PulseAudio Volume Control - בקרת עצמת שמע PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - החיבור ל־PulseAudio נכשל. יתבצע ניסיון נוסף עוד 5 שניות - -במקרה שכזה יתכן שההגדרה של PULSE_SERVER במאפייני הסביבה/חלון הבסיס של X11 -או default-server ב־client.conf אינה נכונה. -מצב זה יכול להיגרם עקב קריסה של PulseAudio שהשאיר נתונים מיושנים בחלון הבסיס של X11. -אם זה המצב אז יש להפעיל את PulseAudio פנימית פעם נוספת, או אם הוא לא מוגדר לפעול פנימית -עליך להפעיל את start-pulseaudio-x11 ידנית. - - - - Select a specific tab on load. - בחירת לשונית מסוימת לטעינה. - - - - Retry forever if pa quits (every 5 seconds). - לנסות לעד אם הפעילות של pa הסתיימה (כל 5 שניות). - - - - Maximize the window. - הגדלת החלון. - - - - Fatal Error: Unable to connect to PulseAudio - שגיאה מכרעת: לא ניתן להתחבר ל־PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write()‎ נכשל - - - - SinkInputWidget - - - on - - - - - Terminate Playback - השמדת ניגון - - - - Unknown output - פלט לא ידוע - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume()‎ נכשל - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute()‎ נכשל - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input()‎ נכשל - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index()‎ נכשל - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index()‎ נכשל - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index()‎ נכשל - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink()‎ נכשל - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index()‎ נכשל - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats()‎ נכשל - - - - SourceOutputWidget - - - from - מ־ - - - - Terminate Recording - חיסול הקלטה - - - - Unknown input - קלט לא ידוע - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume()‎‏ נכשל - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute()‎ נכשל - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output()‎ נכשל - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index()‎ נכשל - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index()‎ נכשל - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index()‎ נכשל - - - - pa_context_set_default_source() failed - pa_context_set_default_source()‎ נכשל - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index()‎ נכשל - - - - StreamWidget - - - Form - טופס - - - - Device Title - כותרת התקן - - - - direction - כיוון - - - - device - התקן - - - - Mute audio - השתקת שמע - - - - Lock channels together - נעילת הערוצים זה לזה - - - - Terminate - חיסול - - - diff --git a/src/translations/pavucontrol-qt_hi.ts b/src/translations/pavucontrol-qt_hi.ts deleted file mode 100644 index 85b9e76..0000000 --- a/src/translations/pavucontrol-qt_hi.ts +++ /dev/null @@ -1,737 +0,0 @@ - - - - - CardWidget - - - Form - फॉर्म - - - - Card Name - कार्ड नाम - - - - Profile: - प्रोफ़ाइल: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() विफल - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2 डेसिबल) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>शांत</small> - - - - <small>Min</small> - <small>न्यूनतम</small> - - - - <small>100% (0dB)</small> - <small>100% (0 डेसिबल)</small> - - - - <small><i>Base</i></small> - <small><i>बेस</i></small> - - - - ChannelWidget - - - Form - फॉर्म - - - - <b>left-front</b> - <b>बायां-सामने</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - फॉर्म - - - - Device Title - उपकरण का शीर्षक - - - - Mute audio - ऑडियो को म्यूट करें - - - - Lock channels together - चैनलों को साथ लॉक करें - - - - Set as fallback - बैकअप विकल्प सेट करें - - - - <b>Port:</b> - <b>पोर्ट:</b> - - - - Show advanced options - एडवांस ऑप्शन देखें - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>विलंबता ओफ़्सेट</b> - - - - ms - ms - - - - Rename device... - उपकरण का नाम बदलें... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() असफल रहा - - - - Sorry, but device renaming is not supported. - क्षमा कीजिए, उपकरण का नाम बदलना समर्थित नहीं है. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - उपकरणों का नाम बदलने के लिए, आपको PulseAudio server में module-device-manager को लोड करने की आवश्यकता है - - - - Rename device %1 to: - उपकरण %1 का नाम बदल कर ये करें : - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() असफल रहा - - - - MainWindow - - - Volume Control - आवाज निर्धारक - - - - &Playback - प्लेबैक (&P) - - - - <i>No application is currently playing audio.</i> - <i>कोई अनुप्रयोग अभी ऑडियो नहीं बजा रहा है.</i> - - - - - - - Show: - दिखाएं: - - - - - All Streams - सभी स्ट्रीम - - - - - Applications - एप्लिकेशन - - - - - Virtual Streams - विर्चुअल स्ट्रीम - - - - &Recording - रिकॉर्ड कर रहा है (&R) - - - - <i>No application is currently recording audio.</i> - <i>कोई अनुप्रयोग अभी ऑडियो नहीं रिकार्ड कर रहा है.</i> - - - - &Output Devices - आउटपुट युक्ति (&O) - - - - <i>No output devices available</i> - <i>कोई आउटपुट उपकरण उपलब्ध नहीं</i> - - - - All Output Devices - सभी उत्पादन उपकरण - - - - Hardware Output Devices - हार्डवेयर उत्पादन उपकरण - - - - Virtual Output Devices - वर्चुअल उत्पादन उपकरण - - - - &Input Devices - इनपुट युक्तियाँ (&I) - - - - <i>No input devices available</i> - <i>कोई इनपुट उपकरण उपलब्ध नहीं</i> - - - - All Input Devices - सभी उत्पादक उपकरण - - - - All Except Monitors - मॉनिटर के सिवाय सभी - - - - Hardware Input Devices - हार्डवेयर उत्पादन उपकरण - - - - Virtual Input Devices - वर्चुअल उत्पादन उपकरण - - - - Monitors - मॉनिटर - - - - &Configuration - विन्यासन (&C) - - - - <i>No cards available for configuration</i> - <i>विन्यास के लिए कोई कार्ड उपलब्ध नहीं</i> - - - - Show volume meters - वॉल्यूम मीटर को देखें - - - - ... - ... - - - - (plugged in) - (प्लग इन किया गया) - - - - - (unavailable) - (उपलब्ध नहीं) - - - - - (unplugged) - (प्लग निकाल दिया गया) - - - - Failed to read data from stream - स्ट्रीम से डेटा पढ़ने में विफल - - - - Peak detect - शीर्ष जाँच - - - - Failed to create monitoring stream - मॉनिटरिंग स्ट्रीम बनाने में विफल - - - - Failed to connect monitoring stream - मॉनिटरिंग स्ट्रीम कनेक्ट करने में विफल - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - sink-input को इग्नोर किया जा रहा है क्यूंकि वह Event चिन्हित किया गया है और Event widget के द्वारा संभाला जायेगा - - - - System Sounds - सिस्टम ध्वनि - - - - Establishing connection to PulseAudio. Please wait... - PulseAudio से कनेक्शन स्थापित किया जा रहा है, कृपया प्रतीक्षा करें... - - - - QObject - - - Error - त्रुटि - - - - Card callback failure - कॉर्ड कॉलबैक विफलता - - - - Sink callback failure - सिंक कॉलबैक विफलता - - - - Source callback failure - स्रोत कॉलबैक विफलता - - - - Sink input callback failure - सिंक इनपुट कॉलबैक विफलता - - - - Source output callback failure - स्रोत आउटपुट कॉलबैक विफलता - - - - Client callback failure - क्लाइंट कॉलबैक विफलता - - - - Server info callback failure - सर्वर सूचना कॉलबैक विफलता - - - - - Failed to initialize stream_restore extension: %s - stream_restore विस्तार आरंभ करने में विफल: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() विफल - - - - - Failed to initialize device restore extension: %s - उपकरण पुनर्स्थापना एक्सटेंशन प्रारम्भ करने में असफलता: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() विफल - - - - - Failed to initialize device manager extension: %s - उपकरण मैनेजर एक्सटेंसन प्रारम्भ करने में असफल: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() विफल - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() विफल - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() विफल - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() विफल - - - - pa_context_get_client_info() failed - pa_context_get_client_info() विफल - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() विफल - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() विफल - - - - pa_context_subscribe() failed - pa_context_subscribe() विफल - - - - pa_context_client_info_list() failed - pa_context_client_info_list() विफल - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() विफल - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() विफल - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() विफल - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() विफल - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() विफल - - - - - Connection failed, attempting reconnect - कनेक्शन असफल, दोबारा संपर्क करने का प्रयास कर रहे हैं - - - - - PulseAudio Volume Control - पल्सऑडियो ध्वनि नियंत्रण - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - PulseAudio से संपर्क करने में असफल. 5 सेकंड में पुनः स्वचालित प्रयास किया जावेगा - -इस स्थिति में, यह Environment/X11 Root Window Properties के भीतर PULSE_SERVER या client.conf के भीतर default-server की सेटिंग में गलती की वजह से हो सकता है। -यह स्तिथि PulseAudio के क्रैश होने और X11 Root Window में पुरानी डिटेल छोड़ने की वजह से हो सकती है। -अगर यह स्थिति है, तो PulseAudio का स्वचालित ढंग से पुनरारंभ होना चाहिए। अगर यह पुनः सेट नहीं है तो आप स्वयं start-pulseaudio-x11 को चालू करें। - - - - Select a specific tab on load. - चालू होने पर विशिष्ट टैब का चयन करें। - - - - Retry forever if pa quits (every 5 seconds). - pa के ख़त्म होने पर लगातार प्रयास करते रहे (हर 5 सेकंड में). - - - - Maximize the window. - खिड़की के आकार को अधिकतम करें। - - - - Fatal Error: Unable to connect to PulseAudio - गंभीर त्रुटि : PulseAudio से संपर्क करने में असफल - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() विफल - - - - SinkInputWidget - - - on - चालू - - - - Terminate Playback - प्लेबैक समाप्त करें - - - - Unknown output - अनजान आउटपुट - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() विफल - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() विफल - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() विफल - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() विफल - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() विफल - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() विफल - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() विफल - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() विफल - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() विफल - - - - SourceOutputWidget - - - from - से - - - - Terminate Recording - रिकॉर्ड करना सम्पत करें - - - - Unknown input - अनजान इनपुट - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() विफल - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() विफल - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() विफल - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() विफल - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() विफल - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() विफल - - - - pa_context_set_default_source() failed - pa_context_set_default_source() विफल - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() विफल - - - - StreamWidget - - - Form - फॉर्म - - - - Device Title - उपकरण शीर्षक - - - - direction - दिशा - - - - device - उपकरण - - - - Mute audio - आडियो को म्यूट करें - - - - Lock channels together - चैनलों को साथ में लॉक करें - - - - Terminate - समाप्त करें - - - diff --git a/src/translations/pavucontrol-qt_hr.desktop.yaml b/src/translations/pavucontrol-qt_hr.desktop.yaml deleted file mode 100644 index 0ae8dc8..0000000 --- a/src/translations/pavucontrol-qt_hr.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio kontrola glasnoće" -Desktop Entry/GenericName: "Kontrola glasnoće" -Desktop Entry/Comment: "Podesi glasnoću" diff --git a/src/translations/pavucontrol-qt_hr.ts b/src/translations/pavucontrol-qt_hr.ts deleted file mode 100644 index 4b86781..0000000 --- a/src/translations/pavucontrol-qt_hr.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Obrazac - - - - Card Name - Ime kartice - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() neuspjelo - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1 % (%2 dB) - - - - %1% - volume slider label [X%] - %1 % - - - - <small>Silence</small> - <small>Tišina</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100 % (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Osnova</i></small> - - - - ChannelWidget - - - Form - Obrazac - - - - <b>left-front</b> - <b>lijevi-prednji</b> - - - - <small>50%</small> - <small>50 %</small> - - - - DeviceWidget - - - Form - Obrazac - - - - Device Title - Ime uređaja - - - - Mute audio - Isključi zvuk - - - - Lock channels together - Spoji kanale - - - - Set as fallback - Postavi kao rezervu - - - - <b>Port:</b> - <b>Priključak:</b> - - - - Show advanced options - Prikaži napredne opcije - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Odmak kašnjenja:</b> - - - - ms - ms - - - - Rename device... - Preimenuj uređaj … - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() neuspjelo - - - - Sorry, but device renaming is not supported. - Nažalost, preimenovanje uređaja nije podržano. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Za preimenovanje uređaja mora se učitati upravljač modula uređaja na PulseAudio poslužitelju - - - - Rename device %1 to: - Preimenuj uređaj %1 u: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() neuspjelo - - - - MainWindow - - - Volume Control - Kontrola glasnoće - - - - <i>No application is currently playing audio.</i> - <i>Trenutačno ne svira nijedan program.</i> - - - - - - - Show: - Prikaži: - - - - - All Streams - Sva emitiranja - - - - - Applications - Programe - - - - - Virtual Streams - Virtualna emitiranja - - - - <i>No application is currently recording audio.</i> - <i>Trenutačno ne snima nijedan program.</i> - - - - <i>No output devices available</i> - <i>Nema dostupnih izlaznih uređaja</i> - - - - All Output Devices - Sve izlazne uređaje - - - - Hardware Output Devices - Hardverske izlazne uređaje - - - - Virtual Output Devices - Virtualne izlazne uređaje - - - - &Playback - &Sviranje - - - - &Recording - S&nimanje - - - - &Output Devices - &Izlazni uređaji - - - - &Input Devices - &Ulazni uređaji - - - - <i>No input devices available</i> - <i>Nema dostupnih ulaznih uređaja</i> - - - - All Input Devices - Sve ulazne uređaje - - - - All Except Monitors - Sve osim monitora - - - - Hardware Input Devices - Hardverske ulazne uređaje - - - - Virtual Input Devices - Virtualne ulazne uređaje - - - - Monitors - Monitore - - - - &Configuration - &Konfiguracija - - - - <i>No cards available for configuration</i> - <i>Nema dostupnih kartica koje bi se mogle konfigurirati</i> - - - - Show volume meters - Prikaži mjerač glasnoće - - - - ... - - - - - (plugged in) - (priključeno) - - - - - (unavailable) - (nedostupno) - - - - - (unplugged) - (nepriključeno) - - - - Failed to read data from stream - Neuspjelo čitanje podataka iz emitiranja - - - - Peak detect - Otkriven maksimum - - - - Failed to create monitoring stream - Neuspjelo stvaranje praćenja emitiranja - - - - Failed to connect monitoring stream - Neuspjelo povezivanje s praćenjem emitiranja - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Zanemaruje se ulazno primanja događaja, jer je označeno kao događaj i stoga se njime barata pomoću programčića Događaji - - - - System Sounds - Zvukovi sustava - - - - Establishing connection to PulseAudio. Please wait... - Postavlja se veza s PulseAudio. Pričekaj … - - - - QObject - - - Error - Greška - - - - Card callback failure - Povratni poziv kartice nije uspio - - - - Sink callback failure - Povratni poziv primanja događaja nije uspio - - - - Source callback failure - Povratni poziv izvora nije uspio - - - - Sink input callback failure - Povratni poziv ulaznog primanja događaja nije uspio - - - - Source output callback failure - Povratni poziv izlaza izvora nije uspio - - - - Client callback failure - Povratni poziv klijenta nije uspio - - - - Server info callback failure - Povratni poziv informacija poslužitelja nije uspio - - - - - Failed to initialize stream_restore extension: %s - Neuspjelo inicijaliziranje proširenja za obnavljanje emitiranja: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() neuspjelo - - - - - Failed to initialize device restore extension: %s - Neuspjelo inicijaliziranje proširenja za obnavljanje uređaja: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() neuspjelo - - - - - Failed to initialize device manager extension: %s - Neuspjelo inicijaliziranje upravljača uređaja: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() neuspjelo - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() neuspjelo - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() neuspjelo - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() neuspjelo - - - - pa_context_get_client_info() failed - pa_context_get_client_info() neuspjelo - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() neuspjelo - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() neuspjelo - - - - pa_context_subscribe() failed - pa_context_subscribe() neuspjelo - - - - pa_context_client_info_list() failed - pa_context_client_info_list() neuspjelo - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() neuspjelo - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() neuspjelo - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() neuspjelo - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() neuspjelo - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() neuspjelo - - - - - Connection failed, attempting reconnect - Veza neuspjela, pokušava se ponovno uspostavljanje veze - - - - - PulseAudio Volume Control - Kontrola glasnoće za PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Neuspjelo povezivanje s PulseAudio. Automatski pokušaj ponovo za 5 s - -U ovom se slučaju vjerojatno radi o pogrešnoj konfiguraciji za PULSE_SERVER u postavkama -administrativnog prozora okruženja/X11 ili za standardni poslužitelj u client.conf. -Ova se situacija može dogoditi i kad se PulseAudio sruši i ostavi detalje u administrativnom prozoru X11. -Ako se radi o takvom slučaju, PulseAudio bi se trebao ponovo automatski otvoriti ili ako nije -konfigurirano, pokreni start-pulseaudio-x11 ručno. - - - - Select a specific tab on load. - Odaberi određenu karticu za učitavanje. - - - - Retry forever if pa quits (every 5 seconds). - Pokušaj ponovo unedogled, ako se PA zatvori (svakih 5 s). - - - - Maximize the window. - Maksimalno proširi prozor. - - - - Fatal Error: Unable to connect to PulseAudio - Fatalna greška: Povezivanje s PulseAudio nije moguće - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() neuspjelo - - - - SinkInputWidget - - - on - na - - - - Terminate Playback - Prekini sviranje - - - - Unknown output - Nepoznat izlaz - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() neuspjelo - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() neuspjelo - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() neuspjelo - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() neuspjelo - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() neuspjelo - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() neuspjelo - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() neuspjelo - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() neuspjelo - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() neuspjelo - - - - SourceOutputWidget - - - from - od - - - - Terminate Recording - Prekini snimanje - - - - Unknown input - Nepoznat ulaz - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() neuspjelo - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() neuspjelo - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() neuspjelo - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() neuspjelo - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() neuspjelo - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() neuspjelo - - - - pa_context_set_default_source() failed - pa_context_set_default_source() neuspjelo - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() neuspjelo - - - - StreamWidget - - - Form - Obrazac - - - - Device Title - Ime uređaja - - - - direction - smjer - - - - device - uređaj - - - - Mute audio - Isključi zvuk - - - - Lock channels together - Spoji kanale - - - - Terminate - Prekini - - - diff --git a/src/translations/pavucontrol-qt_hu.desktop.yaml b/src/translations/pavucontrol-qt_hu.desktop.yaml deleted file mode 100644 index 6b0e522..0000000 --- a/src/translations/pavucontrol-qt_hu.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio hangerőszabályzó" -Desktop Entry/GenericName: "Hangerőszabályzó" -Desktop Entry/Comment: "Hangerő beállítása" diff --git a/src/translations/pavucontrol-qt_hu.ts b/src/translations/pavucontrol-qt_hu.ts deleted file mode 100644 index 27f9611..0000000 --- a/src/translations/pavucontrol-qt_hu.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Űrlap - - - - Card Name - Kártya neve - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() meghiúsult - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>Csendes</small> - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>Alap</i></small> - - - - ChannelWidget - - - Form - Űrlap - - - - <b>left-front</b> - <b>bal-elöl</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Űrlap - - - - Device Title - Eszközcím - - - - Mute audio - Némítás - - - - Lock channels together - Csatornák összekapcsolása - - - - Set as fallback - Tartaléknak vétel - - - - <b>Port:</b> - - - - - Show advanced options - Haladó beállítások megjelenítése - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>Késleltetés:</b> - - - - ms - - - - - Rename device... - Eszköz átnevezése... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() meghiúsult - - - - Sorry, but device renaming is not supported. - Sajnos az eszköz átnevezése nem támogatott. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Az eszközök átnevezéséhez a module-device-managert be kell töltenie a PulseAudio szerverben - - - - Rename device %1 to: - A %1 eszköz átnevezése erre: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() meghiúsult - - - - MainWindow - - - Volume Control - Hangerőszabályzó - - - - <i>No application is currently playing audio.</i> - <i>Jelenleg egy alkalmazás sem játszik le hangot.</i> - - - - - - - Show: - Megjelenítés: - - - - - All Streams - Minden adatfolyam - - - - - Applications - Alkalmazások - - - - - Virtual Streams - Virtuális adatfolyamok - - - - <i>No application is currently recording audio.</i> - <i>Jelenleg egy alkalmazás sem vesz fel hangot.</i> - - - - <i>No output devices available</i> - <i>Nem állnak rendelkezésre kimeneti eszközök</i> - - - - All Output Devices - Minden kimeneti eszköz - - - - Hardware Output Devices - Hardveres kimeneti eszközök - - - - Virtual Output Devices - Virtuális kimeneti eszközök - - - - &Playback - &Lejátszás - - - - &Recording - &Felvétel - - - - &Output Devices - &Kimeneti eszközök - - - - &Input Devices - Bemenet&i eszközök - - - - <i>No input devices available</i> - <i>Nem állnak rendelkezésre bemeneti eszközök</i> - - - - All Input Devices - Minden bemeneti eszköz - - - - All Except Monitors - Minden a monitorokat kivéve - - - - Hardware Input Devices - Hardveres bemeneti eszközök - - - - Virtual Input Devices - Virtuális bementi eszközök - - - - Monitors - Monitorok - - - - &Configuration - &Beállítások - - - - <i>No cards available for configuration</i> - <i>Nem érhetők el beállítható kártyák</i> - - - - Show volume meters - hangerőmérők megjelenítése - - - - ... - - - - - (plugged in) - (csatlakoztatva) - - - - - (unavailable) - (nem elérhető) - - - - - (unplugged) - (nincs csatlakoztatva) - - - - Failed to read data from stream - Az adatok olvasása meghiúsult az adatfolyamból - - - - Peak detect - Csúcsérzékelés - - - - Failed to create monitoring stream - A megfigyelő adatfolyam létrehozása meghiúsult - - - - Failed to connect monitoring stream - Nem sikerült csatlakozni a megfigyelő adatfolyamhoz - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Nyelő bemenet figyelmen kívül hagyása, mert eseménynek minősül, és így az eseménykezelő kezeli - - - - System Sounds - Rendszerhangok - - - - Establishing connection to PulseAudio. Please wait... - Kapcsolat létrehozása a PulseAudio-val. Kérjük várjon... - - - - QObject - - - Error - Hiba - - - - Card callback failure - Függvényvisszatérési hiba a kártyán - - - - Sink callback failure - Függvényvisszatérési hiba a nyelőn - - - - Source callback failure - Függvényvisszatérési hiba a forráson - - - - Sink input callback failure - Függvényvisszatérési hiba a nyelőbemeneten - - - - Source output callback failure - Függvényvisszatérési hiba a forrás kimenetén - - - - Client callback failure - Függvényvisszatérési hiba a kliensnél - - - - Server info callback failure - Függvényvisszatérési hiba a kiszolgálónál - - - - - Failed to initialize stream_restore extension: %s - Az adatfolyam visszaállítása (stream_restore) kiterjesztés előkészítése meghiúsult: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() meghiúsult - - - - - Failed to initialize device restore extension: %s - Nem sikerült inicializálni az eszköz-visszaállítási kiterjesztést: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_stream_restore_read_sink_formats() meghiúsult - - - - - Failed to initialize device manager extension: %s - Nem sikerült inicializálni az eszközkezelő kiterjesztést: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() meghiúsult - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() meghiúsult - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() meghiúsult - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() meghiúsult - - - - pa_context_get_client_info() failed - pa_context_get_client_info() meghiúsult - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() meghiúsult - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() meghiúsult - - - - pa_context_subscribe() failed - pa_context_subscribe() meghiúsult - - - - pa_context_client_info_list() failed - pa_context_client_info_list() meghiúsult - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() meghiúsult - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() meghiúsult - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() meghiúsult - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() meghiúsult - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() meghiúsult - - - - - Connection failed, attempting reconnect - Csatlakozás sikertelen, újrapróbálkozás - - - - - PulseAudio Volume Control - PulseAudio hangerőszabályzó - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - A PulseAudio-hoz való csatlakozás sikertelen. Automatikus újrapróbálkozás 5 mp múlva - -Ebben az esetben ez valószínűleg azért van, mert a PULSE_SERVER a környezetben/X11 root ablak tulajdonságaiban -vagy a client.conf-ban az alapértelmezett kiszolgáló helytelenül van beállítva. -Ez a helyzet akkor is előfordulhat, ha a PulseAudio összeomlott, és elakadt részleteket hagyott az X11 gyökérablakban. -Ebben az esetben a PulseAudio-nak automatikusan újra kell indulnia, vagy ha ez nincs beállítva, akkor -a start-pulseaudio-x11-et manuálisan kell futtatni. - - - - Select a specific tab on load. - Válassza ki megfelelő lapot a betöltéshez. - - - - Retry forever if pa quits (every 5 seconds). - Mindig újrapróbálkozik, ha a PA kilép (5 másodpercenként). - - - - Maximize the window. - Ablak maximalizálása. - - - - Fatal Error: Unable to connect to PulseAudio - Végzetes hiba: A PulseAudio-hoz való csatlakozás sikertelen - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() meghiúsult - - - - SinkInputWidget - - - on - eszköz - - - - Terminate Playback - Lejátszás kilövése - - - - Unknown output - Ismeretlen kimenet - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() meghiúsult - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() meghiúsult - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() meghiúsult - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() meghiúsult - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() meghiúsult - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() meghiúsult - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() meghiúsult - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() meghiúsult - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() meghiúsult - - - - SourceOutputWidget - - - from - bemenet - - - - Terminate Recording - Felvétel kilövése - - - - Unknown input - Ismeretlen bemenet - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() meghiúsult - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() meghiúsult - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() meghiúsult - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() meghiúsult - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() meghiúsult - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() meghiúsult - - - - pa_context_set_default_source() failed - pa_context_set_default_source() meghiúsult - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() meghiúsult - - - - StreamWidget - - - Form - Űrlap - - - - Device Title - Eszköz név - - - - direction - irány - - - - device - eszköz - - - - Mute audio - Némítás - - - - Lock channels together - Csatornák összekapcsolása - - - - Terminate - Kilövés - - - diff --git a/src/translations/pavucontrol-qt_id.ts b/src/translations/pavucontrol-qt_id.ts deleted file mode 100644 index d7ed151..0000000 --- a/src/translations/pavucontrol-qt_id.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulir - - - - Card Name - Nama Kartu - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() gagal - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Diam</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Bas</i></small> - - - - ChannelWidget - - - Form - Formulir - - - - <b>left-front</b> - <b>depan-kiri</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulir - - - - Device Title - Nama Perangkat - - - - Mute audio - Audio bisu - - - - Lock channels together - Kunci saluran bersama - - - - Set as fallback - Tetapkan sebagai fallback - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Tampilkan opsi lanjutan - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Offset latensi:</b> - - - - ms - ms - - - - Rename device... - Ubah nama perangkat... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() gagal - - - - Sorry, but device renaming is not supported. - Maaf, tetapi mengubah nama perangkat tidak didukung. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Anda perlu memuat modul-device-manager di server PulseAudio untuk mengganti nama perangkat - - - - Rename device %1 to: - Ubah nama perangkat %1 ke: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() gagal - - - - MainWindow - - - Volume Control - Kontrol Volume - - - - <i>No application is currently playing audio.</i> - <i>Tak ada aplikasi yang sedang memutar audio.</i> - - - - - - - Show: - Tampilkan: - - - - - All Streams - Semua Aliran - - - - - Applications - Aplikasi - - - - - Virtual Streams - Aliran Virtual - - - - <i>No application is currently recording audio.</i> - <i>Tak ada aplikasi yang sedang merekam audio.</i> - - - - <i>No output devices available</i> - <i>Tak ada perangkat keluaran yang tersedia</i> - - - - All Output Devices - Semua Perangkat Keluaran - - - - Hardware Output Devices - Perangkat Keras Keluaran - - - - Virtual Output Devices - Perangkat Virtual Keluaran - - - - &Playback - &Pemutaran - - - - &Recording - Pe&rekaman - - - - &Output Devices - Perangkat &Keluaran - - - - &Input Devices - Perangkat &Masukan - - - - <i>No input devices available</i> - <i>Tak ada perangkat masukan yang tersedia</i> - - - - All Input Devices - Semua Perangkat Masukan - - - - All Except Monitors - Semua Kecuali Monitor - - - - Hardware Input Devices - Perangkat Keras Masukan - - - - Virtual Input Devices - Perangkat Virtual Masukan - - - - Monitors - Monitor - - - - &Configuration - &Konfigurasi - - - - <i>No cards available for configuration</i> - <i>Tak ada kartu yang tersedia untuk konfigurasi</i> - - - - Show volume meters - Tampilkan volume meter - - - - ... - ... - - - - (plugged in) - (terpasang) - - - - - (unavailable) - (tak tersedia) - - - - - (unplugged) - (tak terpasang) - - - - Failed to read data from stream - Gagal membaca data dari aliran - - - - Peak detect - Deteksi puncak - - - - Failed to create monitoring stream - Gagal membuat aliran pemantauan - - - - Failed to connect monitoring stream - Gagal menghubungkan aliran pemantauan - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Mengabaikan masukan-sink karena sedang ditunjuk sebagai sebuah acara dan ditangani oleh widget Acara - - - - System Sounds - Sistem Suara - - - - Establishing connection to PulseAudio. Please wait... - Membangun koneksi ke PulseAudio. Mohon tunggu... - - - - QObject - - - Error - Kesalahan - - - - Card callback failure - Card callback gagal - - - - Sink callback failure - Sink callback gagal - - - - Source callback failure - Source callback gagal - - - - Sink input callback failure - Sink input callback gagal - - - - Source output callback failure - Source output callback gagal - - - - Client callback failure - Client callback gagal - - - - Server info callback failure - Server info callback gagal - - - - - Failed to initialize stream_restore extension: %s - Gagal menginisialisasi ekstensi stream_restore: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() gagal - - - - - Failed to initialize device restore extension: %s - Gagal menginisialisasi ekstensi pemulihan perangkat: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() gagal - - - - - Failed to initialize device manager extension: %s - Gagal menginisialisasi ekstensi pengelola perangkat: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() gagal - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() gagal - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() gagal - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() gagal - - - - pa_context_get_client_info() failed - pa_context_get_client_info() gagal - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() gagal - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() gagal - - - - pa_context_subscribe() failed - pa_context_subscribe() gagal - - - - pa_context_client_info_list() failed - pa_context_client_info_list() gagal - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() gagal - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() gagal - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() gagal - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() gagal - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() gagal - - - - - Connection failed, attempting reconnect - Sambungan gagal, mencoba menyambung kembali - - - - - PulseAudio Volume Control - Kontrol Volume PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Sambungan ke PulseAudio gagal. Mengulang secara otomatis dalam 5d - -Hal ini dapat disebabkan karena kesalahan konfigurasi PULSE_SERVER di Environment/X11 Root -Window Properties atau default-server di client.conf. -Keadaan ini juga dapat terjadi saat PulseAudio bentrok dan meningggalkan rincian yang salah di -X11 Root Window. Jika demikian, PulseAudio seharusnya akan autospawn kembali atau jika tidak otomatis, -maka Anda harus menjalankan start-pulseaudio-x11 secara manual. - - - - Select a specific tab on load. - Pilih tab tertentu saat dimuat. - - - - Retry forever if pa quits (every 5 seconds). - Mencoba lagi selamanya jika pa berhenti (setiap 5 detik). - - - - Maximize the window. - Maksimalkan jendela. - - - - Fatal Error: Unable to connect to PulseAudio - Kesalahan Fatal: Tidak dapat menyambungkan ke PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() gagal - - - - SinkInputWidget - - - on - nyala - - - - Terminate Playback - Hentikan Pemutaran - - - - Unknown output - Keluaran Tidak Diketahui - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() gagal - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() gagal - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() gagal - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() gagal - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() gagal - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() gagal - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() gagal - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() gagal - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() gagal - - - - SourceOutputWidget - - - from - dari - - - - Terminate Recording - Hentikan Perekaman - - - - Unknown input - Masukan Tidak Diketahui - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() gagal - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() gagal - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() gagal - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() gagal - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() gagal - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() gagal - - - - pa_context_set_default_source() failed - pa_context_set_default_source() gagal - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() gagal - - - - StreamWidget - - - Form - Formulir - - - - Device Title - Nama Perangkat - - - - direction - arah - - - - device - perangkat - - - - Mute audio - Audio bisu - - - - Lock channels together - Kunci saluran bersama - - - - Terminate - Hentikan - - - diff --git a/src/translations/pavucontrol-qt_it.desktop.yaml b/src/translations/pavucontrol-qt_it.desktop.yaml deleted file mode 100644 index e525b4b..0000000 --- a/src/translations/pavucontrol-qt_it.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Controllo Volume" -Desktop Entry/GenericName: "Controllo volume" -Desktop Entry/Comment: "Modifica livello volume" diff --git a/src/translations/pavucontrol-qt_it.ts b/src/translations/pavucontrol-qt_it.ts deleted file mode 100644 index 862ff1a..0000000 --- a/src/translations/pavucontrol-qt_it.ts +++ /dev/null @@ -1,734 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - Nome scheda - - - - Profile: - Profilo: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() non riuscita - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>Silenzio</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>Base</i></small> - - - - ChannelWidget - - - Form - Forma - - - - <b>left-front</b> - <b>Sinistra centrale</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - - - - - Device Title - Nome del dispositivo - - - - Mute audio - Muta audio - - - - Lock channels together - Collega canali - - - - Set as fallback - Imposta come riserva - - - - <b>Port:</b> - <b>Porta:</b> - - - - Show advanced options - Mostra opzioni avanzate - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>Compensazione latenza:</b> - - - - ms - - - - - Rename device... - Rinomina dispositivo... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() non riuscito - - - - Sorry, but device renaming is not supported. - Spiacenti, la rinomina dei dispositivi non è supportata. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Si deve caricare il gestore dei moduli in PulseAudio per poter rinominare i dispositivi - - - - Rename device %1 to: - Rinomina dispositivo %1: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() non riusciito - - - - MainWindow - - - Volume Control - Regolazione del volume - - - - &Playback - &Riproduzione - - - - <i>No application is currently playing audio.</i> - <i>Nessuna applicazione sta attualmente riproducendo dell'audio.</i> - - - - - - - Show: - Mostra: - - - - - All Streams - Tutti flussi - - - - - Applications - Applicazioni - - - - - Virtual Streams - Flussi virtuali - - - - &Recording - &Registrazione - - - - <i>No application is currently recording audio.</i> - <i>Nessuna applicazione sta attualmente registrando dell'audio.</i> - - - - &Output Devices - &Dispositivi in uscita - - - - <i>No output devices available</i> - <i>Nessun dispositivo di uscita disponibile</i> - - - - All Output Devices - Tutti dispositivi in uscita - - - - Hardware Output Devices - Dispositivi in uscita hardware - - - - Virtual Output Devices - Dispositivi in uscita virtuali - - - - &Input Devices - &Dispositivi in ingresso - - - - <i>No input devices available</i> - <i>Nessun dispositivo di ingresso disponibile</i> - - - - All Input Devices - Tutti dispositivi in ingresso - - - - All Except Monitors - Tutti esclusi monitor - - - - Hardware Input Devices - Dispositivi in ingresso hardware - - - - Virtual Input Devices - Dispositivi in ingresso virtuali - - - - Monitors - Monitor - - - - &Configuration - &Configurazione - - - - <i>No cards available for configuration</i> - <i>Nessuna scheda disponibile per la configurazione</i> - - - - Show volume meters - Mostra livelli audio - - - - ... - - - - - (plugged in) - (connesso) - - - - - (unavailable) - (non disponibile) - - - - - (unplugged) - (non connesso) - - - - Failed to read data from stream - Lettura dei dati dal flusso non riuscita - - - - Peak detect - Rilevato picco - - - - Failed to create monitoring stream - Creazione di un flusso di controllo non riuscita - - - - Failed to connect monitoring stream - Connessione del flusso di controllo non riuscita - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - Suoni di sistema - - - - Establishing connection to PulseAudio. Please wait... - Connessione con PulseAudio in progresso... - - - - QObject - - - Error - Errore - - - - Card callback failure - Callback alla scheda non riuscito - - - - Sink callback failure - Callback al sink non riuscito - - - - Source callback failure - Callback alla sorgente non riuscito - - - - Sink input callback failure - Callback al sink di ingresso non riuscito - - - - Source output callback failure - Callback alla sorgente di uscita non riuscito - - - - Client callback failure - Callback al client non riuscito - - - - Server info callback failure - Callback informazioni server non riuscito - - - - - Failed to initialize stream_restore extension: %s - Inizializzazione dell'estensione stream_restore non riuscita: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() non riuscita - - - - - Failed to initialize device restore extension: %s - Initializzazione della estensione di ripristino dispositivi non riuscita: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() non riuscito - - - - - Failed to initialize device manager extension: %s - Initializzazione dell'estensione del gestore dispositivi non riuscita: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() non riuscito - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() non riuscita - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() non riuscita - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() non riuscita - - - - pa_context_get_client_info() failed - pa_context_get_client_info() non riuscita - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() non riuscita - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() non riuscita - - - - pa_context_subscribe() failed - pa_context_subscribe() non riuscita - - - - pa_context_client_info_list() failed - pa_context_client_info_list() non riuscita - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() non riuscita - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() non riuscita - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() non riuscita - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() non riuscita - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() non riuscita - - - - - Connection failed, attempting reconnect - Connessione fallita, tentativo di riconessione - - - - - PulseAudio Volume Control - Regolazione del volume PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - Seleziona una scheda specifica al avvio. - - - - Retry forever if pa quits (every 5 seconds). - Riprova in continuazione quando PA chiude (ogni 5 secondi). - - - - Maximize the window. - Masssimizza la finestra. - - - - Fatal Error: Unable to connect to PulseAudio - Errore fatale: Impossibile connettersi a PulsaAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() non riuscita - - - - SinkInputWidget - - - on - no idea where this is... - attivo - - - - Terminate Playback - Termina flusso - - - - Unknown output - Uscita sconosciuta - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() non riuscita - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() non riuscita - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() non riuscita - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() non riuscita - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() non riuscita - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() non riuscita - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() non riuscita - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_mute_by_index() non riuscita - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() non riuscito - - - - SourceOutputWidget - - - from - da - - - - Terminate Recording - Termina registrazione - - - - Unknown input - Ingresso sconosciuto - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() non riuscito - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() non riuscito - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() non riuscita - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() non riuscita - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() non riuscita - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() non riuscita - - - - pa_context_set_default_source() failed - pa_context_set_default_source() non riuscita - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_mute_by_index() non riuscita - - - - StreamWidget - - - Form - - - - - Device Title - Nome del dispositivo - - - - direction - direzione - - - - device - dispositivo - - - - Mute audio - Muta audio - - - - Lock channels together - Collega canali - - - - Terminate - Termina - - - diff --git a/src/translations/pavucontrol-qt_ja.desktop.yaml b/src/translations/pavucontrol-qt_ja.desktop.yaml deleted file mode 100644 index 7df69e2..0000000 --- a/src/translations/pavucontrol-qt_ja.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio 音量調節 Qt" -Desktop Entry/GenericName: "音量調節 Qt" -Desktop Entry/Comment: "音量レベルを調節します Qt" diff --git a/src/translations/pavucontrol-qt_ja.ts b/src/translations/pavucontrol-qt_ja.ts deleted file mode 100644 index a51fb9d..0000000 --- a/src/translations/pavucontrol-qt_ja.ts +++ /dev/null @@ -1,738 +0,0 @@ - - - - - CardWidget - - - Form - フォーム - - - - Card Name - カード名 - - - - Profile: - プロフィール: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() 失敗 - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>無音</small> - - - - <small>Min</small> - <small>最小</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>ベース</i></small> - - - - ChannelWidget - - - Form - フォーム - - - - <b>left-front</b> - <b>左前方</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - フォーム - - - - Device Title - デバイスのタイトル - - - - Mute audio - 音量をミュートします - - - - Lock channels together - 各チャンネルを同時に - - - - Set as fallback - 代替として設定します - - - - <b>Port:</b> - <b>ポート:</b> - - - - Show advanced options - 詳細オプションを表示する - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>遅延:</b> - - - - ms - ミリ秒 - - - - Rename device... - デバイス名の変更... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() 失敗しました - - - - Sorry, but device renaming is not supported. - 申し訳ありませんが、デバイス名の変更をサポートしていません。 - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - デバイス名を変更するには PulseAudio サーバーに module-device-manager をロードする必要があります - - - - Rename device %1 to: - デバイス %1 の名前を変更: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() 失敗しました - - - - MainWindow - - - Volume Control - PulseAudio 音量調節 - - - - &Playback - 再生(&P) - - - - <i>No application is currently playing audio.</i> - <i>現在音声を再生しているアプリケーションがありません。</i> - - - - - - - Show: - 表示: - - - - - All Streams - すべてのストリーム - - - - - Applications - アプリケーション - - - - - Virtual Streams - 仮想のストリーム - - - - &Recording - 録音(&R) - - - - <i>No application is currently recording audio.</i> - <i>現在録音しているアプリケーションがありません。</i> - - - - &Output Devices - 出力デバイス(&O) - - - - <i>No output devices available</i> - <i>出力デバイスがありません</i> - - - - All Output Devices - すべての出力デバイス - - - - Hardware Output Devices - ハードウェアの出力デバイス - - - - Virtual Output Devices - 仮想の出力デバイス - - - - &Input Devices - 入力デバイス(&I) - - - - <i>No input devices available</i> - <i>入力デバイスがありません</i> - - - - All Input Devices - すべての入力デバイス - - - - All Except Monitors - モニター以外のすべて - - - - Hardware Input Devices - ハードウェアの入力デバイス - - - - Virtual Input Devices - 仮想の入力デバイス - - - - Monitors - モニター - - - - &Configuration - 設定(&C) - - - - <i>No cards available for configuration</i> - <i>設定するカードがありません</i> - - - - Show volume meters - 音量メーターを表示する - - - - ... - ... - - - - (plugged in) - (プラグイン) - - - - - (unavailable) - (使用不可) - - - - - (unplugged) - (未接続) - - - - Failed to read data from stream - ストリームからのデータの読込みに失敗 - - - - Peak detect - ピーク検出 - - - - Failed to create monitoring stream - モニタリングストリームの生成に失敗 - - - - Failed to connect monitoring stream - モニタリングストリームへの接続に失敗 - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - これはイベントとして指定されていてイベントウィジェットによって処理されるため、sink-input を無視します - - - - System Sounds - システム音 - - - - Establishing connection to PulseAudio. Please wait... - PulseAudio との接続を確立中です。少々お待ち下さい... - - - - QObject - - - Error - エラー - - - - Card callback failure - カード回収失敗 - - - - Sink callback failure - 受信側回収失敗 - - - - Source callback failure - 音源回収失敗 - - - - Sink input callback failure - 受信側入力回収失敗 - - - - Source output callback failure - 音源出力回収失敗 - - - - Client callback failure - クライアント回収失敗 - - - - Server info callback failure - サーバー情報回収失敗 - - - - - Failed to initialize stream_restore extension: %s - stream_restore 拡張の初期化に失敗: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() 失敗 - - - - - Failed to initialize device restore extension: %s - デバイスの復元拡張を初期化できません: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() 失敗しました - - - - - Failed to initialize device manager extension: %s - デバイスマネージャーの拡張を初期化できません: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() 失敗しました - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() 失敗 - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() 失敗 - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() 失敗 - - - - pa_context_get_client_info() failed - pa_context_get_client_info() 失敗 - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() 失敗 - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() 失敗 - - - - pa_context_subscribe() failed - pa_context_subscribe() 失敗 - - - - pa_context_client_info_list() failed - pa_context_client_info_list() 失敗 - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() 失敗 - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() 失敗 - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() 失敗 - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() 失敗 - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() 失敗 - - - - - Connection failed, attempting reconnect - 接続に失敗しました。再接続しています - - - - - PulseAudio Volume Control - PulseAudio 音量調節 - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - PulseAudio に接続できません。 5秒後に自動的に再接続します。 - -これは、Environment/X11 Root Window Properties の PULSE_SERVER が原因の可能性があります。 -または client.conf の default-server の設定が間違っている可能性があります。 -PulseAudio がクラッシュして X11 Root Window に古い詳細が残っている時にもこの状況が起こります。 -このような場合は、PulseAudio をもう一度自動起動するか、これを設定してない場合は手動で start-pulseaudio-x11 を実行します。 - - - - Select a specific tab on load. - 起動してタブ<tab>を選択する。 - - - - Retry forever if pa quits (every 5 seconds). - PulseAudio が終了した場合、(5 秒毎に)再試行を繰り返す。 - - - - Maximize the window. - ウィンドウを最大化する。 - - - - Fatal Error: Unable to connect to PulseAudio - 致命的なエラー: PulseAudio に接続できません - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() 失敗 - - - - SinkInputWidget - - - on - オン - - - - Terminate Playback - 再生を終了 - - - - Unknown output - 不明な出力 - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() 失敗 - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() 失敗 - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() 失敗 - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() 失敗 - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() 失敗 - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() 失敗 - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() 失敗 - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() 失敗 - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() 失敗しました - - - - SourceOutputWidget - - - from - から - - - - Terminate Recording - 録音を終了 - - - - Unknown input - 不明な入力 - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() 失敗しました - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() 失敗しました - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() 失敗 - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() 失敗 - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() 失敗 - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() 失敗 - - - - pa_context_set_default_source() failed - pa_context_set_default_source() 失敗 - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() 失敗 - - - - StreamWidget - - - Form - フォーム - - - - Device Title - デバイスのタイトル - - - - direction - 方向 - - - - device - デバイス - - - - Mute audio - 音量をミュートします - - - - Lock channels together - 各チャンネルを同時に - - - - Terminate - 終了 - - - diff --git a/src/translations/pavucontrol-qt_kn.ts b/src/translations/pavucontrol-qt_kn.ts deleted file mode 100644 index 0791690..0000000 --- a/src/translations/pavucontrol-qt_kn.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - ಕಾರ್ಡಿನ ಹೆಸರು - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>ನಿಶ್ಯಬ್ಧ</small> - - - - <small>Min</small> - <small>ಕನಿಷ್ಟ</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>ಮೂಲ</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ಎಡ-ಮುಂಭಾಗ</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>ಸಂಪರ್ಕಸ್ಥಾನ:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ಧ್ವನಿಪ್ರಮಾಣ ನಿಯಂತ್ರಣ - - - - &Playback - ಪ್ಲೇಬ್ಯಾಕ್‌(&P) - - - - <i>No application is currently playing audio.</i> - <i>ಯಾವುದೆ ಅನ್ವಯವು ಈಗ ಆಡಿಯೋವನ್ನು ಚಲಾಯಿಸುತ್ತಿಲ್ಲ.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - ರೆಕಾರ್ಡ್ ಮಾಡುವಿಕೆ(&R) - - - - <i>No application is currently recording audio.</i> - <i>ಯಾವುದೆ ಅನ್ವಯವು ಈಗ ಆಡಿಯೋವನ್ನು ರೆಕಾರ್ಡು ಮಾಡುತ್ತಿಲ್ಲ.</i> - - - - &Output Devices - ಔಟ್‌ಪುಟ್ ಸಾಧನಗಳು(&O) - - - - <i>No output devices available</i> - <i>ಯಾವುದೆ ಔಟ್‌ಪುಟ್ ಸಾಧನಗಳು ಲಭ್ಯವಿಲ್ಲ</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - ಇನ್‌ಪುಟ್ ಸಾಧನಗಳು(&I) - - - - <i>No input devices available</i> - <i>ಯಾವುದೆ ಇನ್‌ಪುಟ್ ಸಾಧನಗಳು ಲಭ್ಯವಿಲ್ಲ</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - ಸಂರಚನೆ(&C) - - - - <i>No cards available for configuration</i> - <i>ಸಂರಚನೆಗಾಗಿ ಯಾವುದೆ ಕಾರ್ಡುಗಳು ಲಭ್ಯವಿಲ್ಲ</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - ಸ್ಟ್ರೀಮಿನಿಂದ ದತ್ತಾಂಶವನ್ನು ಓದುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ - - - - Peak detect - ಶೃಂಗದ ಪತ್ತೆ - - - - Failed to create monitoring stream - ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸ್ಟ್ರೀಮ್‌ ಅನ್ನು ರಚಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ - - - - Failed to connect monitoring stream - ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ ಸ್ಟ್ರೀಮ್‌ನೊಂದಿಗೆ ಸಂಪರ್ಕಸಾಧಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - ಗಣಕದ ಧ್ವನಿಗಳು - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - ಕಾರ್ಡ್ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Sink callback failure - ಸಿಂಕ್ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Source callback failure - ಆಕರ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Sink input callback failure - ಸಿಂಕ್ ಇನ್‌ಪುಟ್ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Source output callback failure - ಆಕರ ಔಟ್‌ಪುಟ್‌ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Client callback failure - ಕ್ಲೈಂಟ್‌ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - Server info callback failure - ಪರಿಚಾರಕ ಮಾಹಿತಿ ಕಾಲ್‌ಬ್ಯಾಕ್ ವಿಫಲತೆ - - - - - Failed to initialize stream_restore extension: %s - stream_restore ವಿಸ್ತರಣೆಯನ್ನು ಆರಂಭಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ವಿಫಲಗೊಂಡಿದೆ - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ವಿಫಲಗೊಂಡಿದೆ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_subscribe() failed - pa_context_subscribe() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ವಿಫಲಗೊಂಡಿದೆ - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio ಧ್ವನಿ ಪ್ರಮಾಣ ನಿಯಂತ್ರಣ - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ವಿಫಲಗೊಂಡಿದೆ - - - - SinkInputWidget - - - on - ಆನ್ - - - - Terminate Playback - - - - - Unknown output - ಗೊತ್ತಿರದ ಔಟ್‌ಪುಟ್ - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - ಇಂದ - - - - Terminate Recording - - - - - Unknown input - ಗೊತ್ತಿರದ ಇನ್‌ಪುಟ್ - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ವಿಫಲಗೊಂಡಿದೆ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ವಿಫಲಗೊಂಡಿದೆ - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - ದಿಕ್ಕು - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - ಪ್ಲೇಬ್ಯಾಕನ್ನು ಅಂತ್ಯಗೊಳಿಸು - - - diff --git a/src/translations/pavucontrol-qt_ko.desktop.yaml b/src/translations/pavucontrol-qt_ko.desktop.yaml deleted file mode 100644 index 95bbd87..0000000 --- a/src/translations/pavucontrol-qt_ko.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio 음량 제어" -Desktop Entry/GenericName: "음량 제어" -Desktop Entry/Comment: "음량 수준 조정" diff --git a/src/translations/pavucontrol-qt_ko.ts b/src/translations/pavucontrol-qt_ko.ts deleted file mode 100644 index e626942..0000000 --- a/src/translations/pavucontrol-qt_ko.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - 형태 - - - - Card Name - 카드 이름 - - - - Profile: - 프로필: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() 실패함 - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>무음</small> - - - - <small>Min</small> - <small>최소</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>기본</i></small> - - - - ChannelWidget - - - Form - 형태 - - - - <b>left-front</b> - <b>왼쪽 앞</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - 형태 - - - - Device Title - 장치 제목 - - - - Mute audio - 오디오 음소거 - - - - Lock channels together - 사운드 채널을 동시에 잠금 - - - - Set as fallback - 대체로 설정 - - - - <b>Port:</b> - <b>포트:</b> - - - - Show advanced options - 고급 옵션 표시 - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>대기시간 오프셋:</b> - - - - ms - ms - - - - Rename device... - 장치 이름변경... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() 실패함 - - - - Sorry, but device renaming is not supported. - 죄송합니다. 장치 이름변경은 지원되지 않습니다. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - 장치 이름을 바꾸려면 PulseAudio 서버에서 module-device-manager를 불러와야 합니다 - - - - Rename device %1 to: - 다음으로 %1 장치 이름변경: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() 실패함 - - - - MainWindow - - - Volume Control - 음량 조절 - - - - <i>No application is currently playing audio.</i> - <i>현재 오디오를 재생중인 응용 프로그램이 없습니다.</i> - - - - - - - Show: - 표시: - - - - - All Streams - 모든 스트림 - - - - - Applications - 응용프로그램 - - - - - Virtual Streams - 가상 스트림 - - - - <i>No application is currently recording audio.</i> - <i>현재 오디오를 녹음중인 응용프로그램이 없습니다.</i> - - - - <i>No output devices available</i> - <i>사용 가능한 출력 장치 없음</i> - - - - All Output Devices - 모든 출력 장치 - - - - Hardware Output Devices - 하드웨어 출력 장치 - - - - Virtual Output Devices - 가상 출력 장치 - - - - &Playback - 재생(&P) - - - - &Recording - 녹음(&R) - - - - &Output Devices - 출력 장치(&O) - - - - &Input Devices - 입력 장치(&I) - - - - <i>No input devices available</i> - <i>사용 가능한 입력 장치 없음</i> - - - - All Input Devices - 모든 입력 장치 - - - - All Except Monitors - 모니터를 제외한 모든 항목 - - - - Hardware Input Devices - 하드웨어 입력 장치 - - - - Virtual Input Devices - 가상 입력 장치 - - - - Monitors - 모니터 - - - - &Configuration - 구성(&C) - - - - <i>No cards available for configuration</i> - <i>구성에 사용할 수 있는 카드 없음</i> - - - - Show volume meters - 음량 미터 표시 - - - - ... - ... - - - - (plugged in) - (연결됨) - - - - - (unavailable) - (사용할 수 없음) - - - - - (unplugged) - (분리됨) - - - - Failed to read data from stream - 스트림에서 데이터를 읽지 못했습니다 - - - - Peak detect - 피크 감지 - - - - Failed to create monitoring stream - 모니터링 스트림을 만들지 못했습니다 - - - - Failed to connect monitoring stream - 모니터링 스트림을 연결하지 못했습니다 - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - 이벤트로 지정되어 이벤트 위젯에서 처리되는 싱크 입력 무시하는 중 - - - - System Sounds - 시스템 사운드 - - - - Establishing connection to PulseAudio. Please wait... - PulseAudio에 연결하는 중입니다. 기다려 주세요... - - - - QObject - - - Error - 오류 - - - - Card callback failure - 카드 콜백 실패 - - - - Sink callback failure - 싱크 콜백 실패 - - - - Source callback failure - 소스 콜백 실패 - - - - Sink input callback failure - 싱크 입력 콜백 실패 - - - - Source output callback failure - 소스 출력 콜백 실패 - - - - Client callback failure - 클라이언트 콜백 실패 - - - - Server info callback failure - 서버 정보 콜백 실패 - - - - - Failed to initialize stream_restore extension: %s - stream_restore 확장을 초기화하지 못했습니다: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() 실패함 - - - - - Failed to initialize device restore extension: %s - 장치 복원 확장을 초기화하지 못했습니다: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() 실패함 - - - - - Failed to initialize device manager extension: %s - 장치 관리자 확장을 초기화하지 못했습니다: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() 실패함 - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() 실패함 - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() 실패함 - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() 실패함 - - - - pa_context_get_client_info() failed - pa_context_get_client_info() 실패함 - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() 실패함 - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() 실패함 - - - - pa_context_subscribe() failed - pa_context_subscribe() 실패함 - - - - pa_context_client_info_list() failed - pa_context_client_info_list() 실패함 - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() 실패함 - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() 실패함 - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() 실패함 - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() 실패함 - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() 실패함 - - - - - Connection failed, attempting reconnect - 연결 실패, 다시 연결 시도 - - - - - PulseAudio Volume Control - PulseAudio 음량 조절 - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - PulseAudio에 연결하지 못했습니다. 5초 후 자동 재시도 - -이 경우 Environment/X11 루트 창 속성의 PULSE_SERVER 또는 client.conf의 default-server가 -잘못 구성되었기 때문일 수 있습니다. -이 상황은 PulseAudio가 충돌하고 X11 루트 창에 오래된 세부 정보를 남길 때도 발생할 수 있습니다. -이 경우 PulseAudio가 다시 자동 생성되거나 구성되지 않은 경우 start-pulseaudio-x11을 수동으로 -실행해야 합니다. - - - - Select a specific tab on load. - 불러오기 시 특정 탭을 선택합니다. - - - - Retry forever if pa quits (every 5 seconds). - pa가 종료되면 영원히 재시도합니다(5초마다). - - - - Maximize the window. - 창을 최대화합니다. - - - - Fatal Error: Unable to connect to PulseAudio - 치명적인 오류: PulseAudio에 연결할 수 없습니다 - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() 실패함 - - - - SinkInputWidget - - - on - 켜기 - - - - Terminate Playback - 재생 종료 - - - - Unknown output - 알 수 없는 출력 - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() 실패함 - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() 실패함 - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() 실패함 - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() 실패함 - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() 실패함 - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() 실패함 - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() 실패함 - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() 실패함 - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() 실패함 - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - 녹음 종료 - - - - Unknown input - 알 수 없는 입력 - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() 실패함 - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() 실패함 - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() 실패함 - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() 실패함 - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() 실패함 - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() 실패함 - - - - pa_context_set_default_source() failed - pa_context_set_default_source() 실패함 - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() 실패함 - - - - StreamWidget - - - Form - 형태 - - - - Device Title - 장치 제목 - - - - direction - 방향 - - - - device - 장치 - - - - Mute audio - 오디오 음소거 - - - - Lock channels together - 사운드 채널을 동시에 잠금 - - - - Terminate - 종료 - - - diff --git a/src/translations/pavucontrol-qt_lt.desktop.yaml b/src/translations/pavucontrol-qt_lt.desktop.yaml deleted file mode 100644 index 67cd9fc..0000000 --- a/src/translations/pavucontrol-qt_lt.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio garsio reguliavimas" -Desktop Entry/GenericName: "Garsio reguliavimas" -Desktop Entry/Comment: "Reguliuoti garsio lygį" diff --git a/src/translations/pavucontrol-qt_lt.ts b/src/translations/pavucontrol-qt_lt.ts deleted file mode 100644 index 242390a..0000000 --- a/src/translations/pavucontrol-qt_lt.ts +++ /dev/null @@ -1,740 +0,0 @@ - - - - - CardWidget - - - Form - Forma - - - - Card Name - Plokštės pavadinimas - - - - Profile: - Profilis: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() nepavyko - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Tyla</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Pagrindas</i></small> - - - - ChannelWidget - - - Form - Forma - - - - <b>left-front</b> - <b>kairioji priekinė</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Forma - - - - Device Title - Įrenginio pavadinimas - - - - Mute audio - Nutildyti garsą - - - - Lock channels together - Užrakinti kanalus kartu - - - - Set as fallback - Nustatyti kaip atsarginį - - - - <b>Port:</b> - <b>Prievadas:</b> - - - - Show advanced options - Rodyti išplėstinius parametrus - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Delsos poslinkis:</b> - - - - ms - ms - - - - Rename device... - Pervadinti įrenginį... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() nepavyko - - - - Sorry, but device renaming is not supported. - Atleiskite, tačiau įrenginio pervadinimas yra nepalaikomas. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Norėdami pervadinti įrenginius, turite į PulseAudio serverį įkelti module-device-manager - - - - Rename device %1 to: - Pervadinti įrenginį %1 į: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() nepavyko - - - - MainWindow - - - Volume Control - Garsio reguliavimas - - - - <i>No application is currently playing audio.</i> - <i>Šiuo metu jokios programos neatkuria garso.</i> - - - - - - - Show: - Rodyti: - - - - - All Streams - Visi srautai - - - - - Applications - Programos - - - - - Virtual Streams - Virtualūs srautai - - - - <i>No application is currently recording audio.</i> - <i>Šiuo metu jokios programos neįrašo garso.</i> - - - - <i>No output devices available</i> - <i>Nėra prieinamų išvesties įrenginių</i> - - - - All Output Devices - Visi išvesties įrenginiai - - - - Hardware Output Devices - Aparatinės įrangos išvesties įrenginiai - - - - Virtual Output Devices - Virtualūs išvesties įrenginiai - - - - &Playback - &Atkūrimas - - - - &Recording - Į&rašymas - - - - &Output Devices - Išve&sties įrenginiai - - - - &Input Devices - Įvest&ies įrenginiai - - - - <i>No input devices available</i> - <i>Nėra prieinamų įvesties įrenginių</i> - - - - All Input Devices - Visi įvesties įrenginiai - - - - All Except Monitors - Visi, išskyrus monitorius - - - - Hardware Input Devices - Aparatinės įrangos įvesties įrenginiai - - - - Virtual Input Devices - Virtualūs įvesties įrenginiai - - - - Monitors - Monitoriai - - - - &Configuration - &Konfigūracija - - - - <i>No cards available for configuration</i> - <i>Nėra konfigūracijai prieinamų plokščių</i> - - - - Show volume meters - Rodyti garsio matuoklius - - - - ... - ... - - - - (plugged in) - (kištukas įjungtas) - - - - - (unavailable) - (neprieinama) - - - - - (unplugged) - (kištukas ištrauktas) - - - - Failed to read data from stream - Nepavyko perskaityti duomenų iš srauto - - - - Peak detect - Maksimumų aptikimas - - - - Failed to create monitoring stream - Nepavyko sukurti monitorinio srauto - - - - Failed to connect monitoring stream - Nepavyko prisijungti prie monitorinio srauto - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Rinktuvo įvesties nepaisoma dėl to, kad ji yra paskirta kaip įvykis ir todėl, yra apdorojama Įvykių valdiklio - - - - System Sounds - Sistemos garsai - - - - Establishing connection to PulseAudio. Please wait... - Užmezgiamas ryšys su PulseAudio. Prašome palaukti... - - - - QObject - - - Error - Klaida - - - - Card callback failure - Plokštės atgalinės iškvietos nesėkmė - - - - Sink callback failure - Rinktuvo atgalinės iškvietos nesėkmė - - - - Source callback failure - Šaltinio atgalinės iškvietos nesėkmė - - - - Sink input callback failure - Rinktuvo įvesties atgalinės iškvietos nesėkmė - - - - Source output callback failure - Šaltinio išvesties atgalinės iškvietos nesėkmė - - - - Client callback failure - Kliento atgalinės iškvietos nesėkmė - - - - Server info callback failure - Serverio informacijos atgalinės iškvietos nesėkmė - - - - - Failed to initialize stream_restore extension: %s - Nepavyko inicijuoti stream_restore plėtinio: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() nepavyko - - - - - Failed to initialize device restore extension: %s - Nepavyko inicijuoti įrenginio atkūrimo plėtinio: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() nepavyko - - - - - Failed to initialize device manager extension: %s - Nepavyko inicijuoti įrenginių tvarkytuvės plėtinio: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() nepavyko - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() nepavyko - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() nepavyko - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() nepavyko - - - - pa_context_get_client_info() failed - pa_context_get_client_info() nepavyko - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() nepavyko - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() nepavyko - - - - pa_context_subscribe() failed - pa_context_subscribe() nepavyko - - - - pa_context_client_info_list() failed - pa_context_client_info_list() nepavyko - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() nepavyko - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() nepavyko - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() nepavyko - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() nepavyko - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() nepavyko - - - - - Connection failed, attempting reconnect - Prisijungimas nepavyko, bandoma prisijungti iš naujo - - - - - PulseAudio Volume Control - PulseAudio garsio reguliavimas - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Prisijungimas prie PulseAudio nepavyko. Automatinis bandymas iš naujo po 5 sek. - -Šiuo atveju, taip, greičiausiai, yra dėl to, kad PULSE_SERVER aplinkoje/X11 šaknies (root) lango savybėse -arba default-server, faile client.conf yra neteisingai sukonfigūruota. -Ši situacija taip pat gali įvykti, kai PulseAudio užstringa ir palieka pasenusią išsamią informaciją -X11 šaknies (root) lange. -Jeigu tai yra tas atvejis, tuomet PulseAudio turėtų vėl automatiškai pasileisti, arba jeigu tai nėra -sukonfigūruota, tuomet jūs turėtumėte paleisti start-pulseaudio-x11 rankiniu būdu. - - - - Select a specific tab on load. - Įkėlus, pasirinkti tam tikrą kortelę. - - - - Retry forever if pa quits (every 5 seconds). - Amžinai bandyti iš naujo, jei pa baigia darbą (kas 5 sekundes). - - - - Maximize the window. - Išskleisti langą. - - - - Fatal Error: Unable to connect to PulseAudio - Lemtingoji klaida: Nepavyko prisijungti prie PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() nepavyko - - - - SinkInputWidget - - - on - per - - - - Terminate Playback - Nutraukti atkūrimą - - - - Unknown output - Nežinoma išvestis - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() nepavyko - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() nepavyko - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() nepavyko - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() nepavyko - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() nepavyko - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() nepavyko - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() nepavyko - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() nepavyko - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() nepavyko - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - Nutraukti įrašymą - - - - Unknown input - Nežinoma įvestis - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() nepavyko - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() nepavyko - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() nepavyko - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() nepavyko - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() nepavyko - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() nepavyko - - - - pa_context_set_default_source() failed - pa_context_set_default_source() nepavyko - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() nepavyko - - - - StreamWidget - - - Form - Forma - - - - Device Title - Įrenginio pavadinimas - - - - direction - kryptis - - - - device - įrenginys - - - - Mute audio - Nutildyti garsą - - - - Lock channels together - Užrakinti kanalus kartu - - - - Terminate - Nutraukti - - - diff --git a/src/translations/pavucontrol-qt_ml.ts b/src/translations/pavucontrol-qt_ml.ts deleted file mode 100644 index 21a0e1d..0000000 --- a/src/translations/pavucontrol-qt_ml.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - കാര്‍ഡിന്റെ പേരു് - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() പരാജയപ്പെട്ടു - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>നിശബ്ദം</small> - - - - <small>Min</small> - <small>ഏറ്റവും കൂറഞ്ഞ</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>അടിസ്ഥാനം</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ഇടത്-മുന്നില്‍</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>പോര്‍ട്ട്:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ശബ്ദ നിയന്ത്രണം - - - - &Playback - &പ്ലേബാക്ക് - - - - <i>No application is currently playing audio.</i> - <i>ഒരു പ്രയോഗവും നിലവില്‍ ഓഡിയോ പ്രവര്‍ത്തിപ്പിക്കുന്നില്ല.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - &റിക്കോര്‍ഡ് ചെയ്യുന്നു - - - - <i>No application is currently recording audio.</i> - <i>ഒരു പ്രയോഗവും നിലവില്‍ ഓഡിയോ റിക്കോര്‍ഡ് ചെയ്യുന്നില്ല.</i> - - - - &Output Devices - _ഔട്ട്പുട്ട് ഡിവൈസുകള്‍ - - - - <i>No output devices available</i> - <i>ഔട്ട്പുട്ട് ഡിവൈസുകള്‍ ലഭ്യമല്ല</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - _ഇന്‍പുട്ട് ഡിവൈസുകള്‍ - - - - <i>No input devices available</i> - <i>ഇന്‍പുട്ട് ഡിവൈസുകള്‍ ലഭ്യമല്ല</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - &ക്രമീകരണം - - - - <i>No cards available for configuration</i> - <i>ക്രമീകരിക്കുന്നതിലുള്ള കാര്‍ഡുകള്‍ ലഭ്യമല്ല</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - സ്ട്രീമില്‍ നിന്നും ഡേറ്റാ ലഭ്യമാക്കുന്നതില്‍ പരാജയപ്പെട്ടു - - - - Peak detect - Peak detect - - - - Failed to create monitoring stream - മോണിറ്ററിങ് സ്ട്രീം ഉണ്ടാക്കുന്നതില്‍ പരാജയപ്പെട്ടു - - - - Failed to connect monitoring stream - മോണിറ്ററിങ് സ്ട്രീം കണക്ട് ചെയ്യുന്നതില്‍ പരാജയപ്പെട്ടു - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - സിസ്റ്റം ശബ്ദങ്ങള്‍ - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - കാര്‍ഡ് കോള്‍ബാക്ക് പരാജയം - - - - Sink callback failure - കാര്‍ഡ് കോള്‍ബാക്ക് പരാജയം - - - - Source callback failure - സോഴ്സ് കോള്‍ബാക്ക് പരാജയം - - - - Sink input callback failure - സിങ്ക് ഇന്‍പുട്ട് കോള്‍ബാക്ക് പരാജയം - - - - Source output callback failure - സോഴ്സ് ഔട്ട്പുട്ട് കോള്‍ബാക്ക് പരാജയം - - - - Client callback failure - ക്ലൈന്റ് കോള്‍ബാക്ക് പരാജയം - - - - Server info callback failure - സര്‍വര്‍ ഇന്‍ഫോ കോള്‍ബാക്ക് പരാജയം - - - - - Failed to initialize stream_restore extension: %s - stream_restore എക്സ്റ്റെന്‍ഷന്‍ ആരംഭിക്കുന്നതില്‍ പരാജയപ്പെട്ടു: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() പരാജയപ്പെട്ടു - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() പരാജയപ്പെട്ടു - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() പരാജയപ്പെട്ടു - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() പരാജയപ്പെട്ടു - - - - pa_context_get_client_info() failed - pa_context_get_client_info() പരാജയപ്പെട്ടു - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() പരാജയപ്പെട്ടു - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() പരാജയപ്പെട്ടു - - - - pa_context_subscribe() failed - pa_context_subscribe() പരാജയപ്പെട്ടു - - - - pa_context_client_info_list() failed - pa_context_client_info_list() പരാജയപ്പെട്ടു - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() പരാജയപ്പെട്ടു - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() പരാജയപ്പെട്ടു - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() പരാജയപ്പെട്ടു - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() പരാജയപ്പെട്ടു - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() പരാജയപ്പെട്ടു - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - പള്‍സ്ഓഡിയോ ശബ്ദ നിയന്ത്രണം - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() പരാജയപ്പെട്ടു - - - - SinkInputWidget - - - on - on - - - - Terminate Playback - - - - - Unknown output - അപരിചിതമായ ഔട്ട്പുട്ട് - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() പരാജയപ്പെട്ടു - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() പരാജയപ്പെട്ടു - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() പരാജയപ്പെട്ടു - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() പരാജയപ്പെട്ടു - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() പരാജയപ്പെട്ടു - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() പരാജയപ്പെട്ടു - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() പരാജയപ്പെട്ടു - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() പരാജയപ്പെട്ടു - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - നിന്നും - - - - Terminate Recording - - - - - Unknown input - അപരിചിതമായ ഇന്‍പുട്ട് - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() പരാജയപ്പെട്ടു - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() പരാജയപ്പെട്ടു - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() പരാജയപ്പെട്ടു - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() പരാജയപ്പെട്ടു - - - - pa_context_set_default_source() failed - pa_context_set_default_source() പരാജയപ്പെട്ടു - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() പരാജയപ്പെട്ടു - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - ദിശ - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - പ്ലേബാക്ക് നിര്‍ത്തുക - - - diff --git a/src/translations/pavucontrol-qt_mr.ts b/src/translations/pavucontrol-qt_mr.ts deleted file mode 100644 index e81d04e..0000000 --- a/src/translations/pavucontrol-qt_mr.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - कार्ड नाव - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() अपयशी - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>गप्प</small> - - - - <small>Min</small> - <small>किमान</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>बेस</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>डावे-समोरचे</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>पोर्ट:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - आवाज नियंत्रण - - - - &Playback - प्लेबॅक (&P) - - - - <i>No application is currently playing audio.</i> - <i>वर्तमानक्षणी कुठलेही ऍप्लिकेशन ऑडिओ चालवत नाही.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - रेकॉर्डींग (&R) - - - - <i>No application is currently recording audio.</i> - <i>वर्तमानक्षणी कुठलेही ऍप्लिकेशन ऑडिओ रेकॉर्ड करत नाही.</i> - - - - &Output Devices - आऊटपुट साधन (&O) - - - - <i>No output devices available</i> - <i>आऊटपुट साधन उपलब्ध नाही</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - इनपुट साधन (&I) - - - - <i>No input devices available</i> - <i>इनपुट साधन उपलब्ध नाही</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - संयोजना (&C) - - - - <i>No cards available for configuration</i> - <i>संयोजना करीता कार्ड उपलब्ध नाही</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - स्ट्रीम पासून डेटा वाचण्यास अपयशी - - - - Peak detect - उच्च स्तर आढळले - - - - Failed to create monitoring stream - नियंत्रण स्ट्रीम बनवण्यास अपयशी - - - - Failed to connect monitoring stream - नियंत्रण स्ट्रीम जुळवण्यास अपयशी - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - प्रणाली आवाज - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - कार्ड कॉलबॅक अपयशी - - - - Sink callback failure - सिंक कॉलबॅक अपयशी - - - - Source callback failure - स्त्रोत कॉलबॅक अपयशी - - - - Sink input callback failure - सिंक इनपुट कॉलबॅक अपयशी - - - - Source output callback failure - स्त्रोत आऊटपुट कॉलबॅक अपयशी - - - - Client callback failure - क्लाऐंट कॉलबॅक अपयशी - - - - Server info callback failure - सर्वर माहिती कॉलबॅक अपयशी - - - - - Failed to initialize stream_restore extension: %s - stream_restore वाढ प्रारंभ करण्यास अपयशी: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() अपयशी - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() अपयशी - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() अपयशी - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() अपयशी - - - - pa_context_get_client_info() failed - pa_context_get_client_info() अपयशी - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() अपयशी - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() अपयशी - - - - pa_context_subscribe() failed - pa_context_subscribe() अपयशी - - - - pa_context_client_info_list() failed - pa_context_client_info_list() अपयशी - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() अपयशी - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() अपयशी - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() अपयशी - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() अपयशी - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() अपयशी - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio आवाज नियंत्रण - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() अपयशी - - - - SinkInputWidget - - - on - चालू करा - - - - Terminate Playback - - - - - Unknown output - अपरिचीत आऊटपुट - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() अपयशी - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() अपयशी - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() अपयशी - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() अपयशी - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() अपयशी - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() अपयशी - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() अपयशी - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() अपयशी - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - पासून - - - - Terminate Recording - - - - - Unknown input - अपरिचीत इंपुट - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() अपयशी - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() अपयशी - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() अपयशी - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() अपयशी - - - - pa_context_set_default_source() failed - pa_context_set_default_source() अपयशी - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() अपयशी - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - दिशा - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - प्लेबॅक बंद करा - - - diff --git a/src/translations/pavucontrol-qt_nb_NO.desktop.yaml b/src/translations/pavucontrol-qt_nb_NO.desktop.yaml deleted file mode 100644 index b802e4c..0000000 --- a/src/translations/pavucontrol-qt_nb_NO.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio-lydstyrkekontroll" -Desktop Entry/GenericName: "Lydstyrkekontroll" -Desktop Entry/Comment: "Juster lydstyrkenivået" diff --git a/src/translations/pavucontrol-qt_nb_NO.ts b/src/translations/pavucontrol-qt_nb_NO.ts deleted file mode 100644 index 72ce71b..0000000 --- a/src/translations/pavucontrol-qt_nb_NO.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formular - - - - Card Name - Kortnavn - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() virket ikke - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>Stillhet</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>Basis</i></small> - - - - ChannelWidget - - - Form - Formular - - - - <b>left-front</b> - <b>Venstre foran</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - Formular - - - - Device Title - Enhetsnavn - - - - Mute audio - Skru av lyd - - - - Lock channels together - Lås kanaler sammen - - - - Set as fallback - Sett som reserve - - - - <b>Port:</b> - - - - - Show advanced options - Vis avanserte innstillinger - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>Forsinkelsesjustering:</b> - - - - ms - - - - - Rename device... - Gi enheten nytt navn.. - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() mislyktes - - - - Sorry, but device renaming is not supported. - Unnskyld, men å gi enheten nytt navn støttes ikke. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Du må laste inn module-device-manager i PulseAudio-serveren for å kunne gi nytt navn til enheter - - - - Rename device %1 to: - Gi enheten %1 nytt navn: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() mislyktes - - - - MainWindow - - - Volume Control - Volumkontroll - - - - <i>No application is currently playing audio.</i> - <i>Ingen programmer spiller lyd nå.</i> - - - - - - - Show: - Vis: - - - - - All Streams - Alle strømmer - - - - - Applications - Programmer - - - - - Virtual Streams - Virtuelle strømmer - - - - <i>No application is currently recording audio.</i> - <i>Ingen programmer tar opp lyd nå.</i> - - - - <i>No output devices available</i> - <i>Ingen utenheter er tilgjengelige</i> - - - - All Output Devices - Alle utenheter - - - - Hardware Output Devices - Maskinvareutenheter - - - - Virtual Output Devices - Virtuelle utenheter - - - - &Playback - &Avspilling - - - - &Recording - &Opptak - - - - &Output Devices - &Utenheter - - - - &Input Devices - &Innenheter - - - - <i>No input devices available</i> - <i>Ingen innenheter er tilgjengelige</i> - - - - All Input Devices - Alle innenheter - - - - All Except Monitors - Alle untatt monitorer - - - - Hardware Input Devices - Maskinvare innenheter - - - - Virtual Input Devices - Virtuelle innenheter - - - - Monitors - Monitorer - - - - &Configuration - &Konfigurasjon - - - - <i>No cards available for configuration</i> - <i>Ingen kort er tilgjengelige for innstilling</i> - - - - Show volume meters - Vis volumindikatorer - - - - ... - - - - - (plugged in) - (tilkoblet) - - - - - (unavailable) - (ikke tilgjengelig) - - - - - (unplugged) - (frakoblet) - - - - Failed to read data from stream - Klarte ikke å lese data fra strøm - - - - Peak detect - Overstyringsoppdaging - - - - Failed to create monitoring stream - Klarte ikke å lage monitorstrøm - - - - Failed to connect monitoring stream - Klarte ikke å koble til monitorstrøm - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorerer sink-input fordi den er satt opp til å håndteres som en hendelse og dermed blir håndtert av Event widgeten - - - - System Sounds - Systemlyder - - - - Establishing connection to PulseAudio. Please wait... - Setter opp forbindelse til PulseAudio. Vennligst vent... - - - - QObject - - - Error - Feil - - - - Card callback failure - Feil med tilbakemelding til kort - - - - Sink callback failure - Feil med tilbakemelding til sink - - - - Source callback failure - Feil med tilbakemelding til kilde - - - - Sink input callback failure - Feil med tilbakemelding til inngang på sink - - - - Source output callback failure - Feil med tilbakemelding til kildens utgang - - - - Client callback failure - Feil med tilbakemelding til klient - - - - Server info callback failure - Feil med tilbakemelding om server info - - - - - Failed to initialize stream_restore extension: %s - Feil med å sette i verk stream_restore extension: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() mislyktes - - - - - Failed to initialize device restore extension: %s - Klarte ikke å sette i gang device restore extension: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() mislyktes - - - - - Failed to initialize device manager extension: %s - Feil med å sette i gang device manager extension: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() mislyktes - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() mislyktes - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() mislyktes - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() mislyktes - - - - pa_context_get_client_info() failed - pa_context_get_client_info() mislyktes - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() mislyktes - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() mislyktes - - - - pa_context_subscribe() failed - pa_context_subscribe() mislyktes - - - - pa_context_client_info_list() failed - pa_context_client_info_list() mislyktes - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() mislyktes - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() mislyktes - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() mislyktes - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() mislyktes - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() mislyktes - - - - - Connection failed, attempting reconnect - Forbindelsen virket ikke, forsøker å sette opp ny forbindelse - - - - - PulseAudio Volume Control - PulseAudio volumkontroll - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Forbindelsen til PulseAudio mislyktes. Prøver igjen om 5 sekunder - -Denne gangen er det sannsynligvis fordi PULSE_SERVER i skrivebordsmiljøet eller X11 Root Window Properties -eller i standard-serveren i client.conf er feilinnstilt. -Denne situasjonen kan også oppstå når PulseAudio har kræsjet og har etterlatt detaljer i X11 Root Window. -Hvis så er tilfelle burde PulseAudio autooppstarte igjen. Hvis dette ikke er stilt inn -burde du kjøre start-pulseaudio-x11 manuelt. - - - - Select a specific tab on load. - Velg en spesifikk fane ved innlasting. - - - - Retry forever if pa quits (every 5 seconds). - Prøv igjen for alltid hvis pa avslutter (hvert femte sekund). - - - - Maximize the window. - Maksimer vinduet. - - - - Fatal Error: Unable to connect to PulseAudio - Kritisk feil: Kunne ikke koble til PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() mislyktes - - - - SinkInputWidget - - - on - - - - - Terminate Playback - Slå av avspilling - - - - Unknown output - Ukjent utgang - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() mislyktes - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() mislyktes - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() mislyktes - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() mislyktes - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() mislyktes - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() mislyktes - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() mislyktes - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() mislyktes - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() mislyktes - - - - SourceOutputWidget - - - from - fra - - - - Terminate Recording - Avslutt opptak - - - - Unknown input - Ukjent inngang - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() mislyktes - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() mislyktes - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() mislyktes - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() mislyktes - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() mislyktes - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() mislyktes - - - - pa_context_set_default_source() failed - pa_context_set_default_source() mislyktes - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() mislyktes - - - - StreamWidget - - - Form - Formular - - - - Device Title - Enhetsnavn - - - - direction - retning - - - - device - enhet - - - - Mute audio - Skru av lyd - - - - Lock channels together - Lås kanaler sammen - - - - Terminate - Avslutt - - - diff --git a/src/translations/pavucontrol-qt_nl.desktop.yaml b/src/translations/pavucontrol-qt_nl.desktop.yaml deleted file mode 100644 index 56d20d8..0000000 --- a/src/translations/pavucontrol-qt_nl.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio-volumeregeling" -Desktop Entry/GenericName: "Volumeregeling" -Desktop Entry/Comment: "Pas het volumeniveau aan" diff --git a/src/translations/pavucontrol-qt_nl.ts b/src/translations/pavucontrol-qt_nl.ts deleted file mode 100644 index f4a5809..0000000 --- a/src/translations/pavucontrol-qt_nl.ts +++ /dev/null @@ -1,736 +0,0 @@ - - - - - CardWidget - - - Form - Dialoogvenster - - - - Card Name - Naam van geluidskaart - - - - Profile: - Profiel: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() mislukt - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Stilte</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Basis</i></small> - - - - ChannelWidget - - - Form - Dialoogvenster - - - - <b>left-front</b> - <b>linksvoor</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Dialoogvenster - - - - Device Title - Apparaatnaam - - - - Mute audio - Geluid dempen - - - - Lock channels together - Kanalen tezamen vergrendelen - - - - Set as fallback - Instellen als terugvalmogelijkheid - - - - <b>Port:</b> - <b>Poort:</b> - - - - Show advanced options - Geavanceerde opties tonen - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Vertragingsomleiding:</b> - - - - ms - ms - - - - Rename device... - Apparaatnaam wijzigen… - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() mislukt - - - - Sorry, but device renaming is not supported. - Het wijzigen van apparaatnamen wordt niet ondersteund. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - U dient module-device-manager te laden in de PulseAudio-server om apparaatnamen te kunnen wijzigen - - - - Rename device %1 to: - Apparaatnaam '%1' wijzigen in: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() mislukt - - - - MainWindow - - - Volume Control - Volumeregeling - - - - &Playback - Afs&pelen - - - - <i>No application is currently playing audio.</i> - <i>Er wordt momenteel geen geluid afgespeeld.</i> - - - - - - - Show: - Tonen: - - - - - All Streams - Alle streams - - - - - Applications - Programma's - - - - - Virtual Streams - Virtuele streams - - - - &Recording - &Opnemen - - - - <i>No application is currently recording audio.</i> - <i>Er wordt momenteel geen geluid opgenomen.</i> - - - - &Output Devices - Uitv&oerapparaten - - - - <i>No output devices available</i> - <i>Er zijn geen uitvoerapparaten beschikbaar.</i> - - - - All Output Devices - Alle uitvoerapparaten - - - - Hardware Output Devices - Fysieke uitvoerapparaten - - - - Virtual Output Devices - Virtuele uitvoerapparaten - - - - &Input Devices - &Invoerapparaten - - - - <i>No input devices available</i> - <i>Er zijn geen invoerapparaten beschikbaar.</i> - - - - All Input Devices - Alle invoerapparaten - - - - All Except Monitors - Alle, uitgezonderd beeldschermen - - - - Hardware Input Devices - Fysieke invoerapparaten - - - - Virtual Input Devices - Virtuele invoerapparaten - - - - Monitors - Beeldschermen - - - - &Configuration - &Instellingen - - - - <i>No cards available for configuration</i> - <i>Er zijn geen in te stellen kaarten beschikbaar.</i> - - - - Show volume meters - Volumemeters tonen - - - - ... - - - - - (plugged in) - (verbonden) - - - - - (unavailable) - (niet beschikbaar) - - - - - (unplugged) - (niet verbonden) - - - - Failed to read data from stream - Er kunnen geen gegevens worden gelezen uit de stream - - - - Peak detect - Piekbewaking - - - - Failed to create monitoring stream - Er kan geen bewakingsstroom worden aangemaakt - - - - Failed to connect monitoring stream - Er kan geen verbinding worden gemaakt met de bewakingsstroom - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - De 'sink-input' wordt genegeerd, aangezien die is aangewezen als gebeurtenis en dus wordt afgehandeld door het Event-bedieningselement - - - - System Sounds - Systeemgeluiden - - - - Establishing connection to PulseAudio. Please wait... - Bezig met verbinden met PulseAudio… - - - - QObject - - - Error - Foutmelding - - - - Card callback failure - 'Callback'-fout van kaart - - - - Sink callback failure - 'Sink callback'-fout - - - - Source callback failure - 'Source callback'-fout - - - - Sink input callback failure - 'Sink input callback'-fout - - - - Source output callback failure - 'Source output callback'-fout - - - - Client callback failure - 'Client callback'-fout - - - - Server info callback failure - 'Server info callback'-fout - - - - - Failed to initialize stream_restore extension: %s - De extensie voor stroomherstel kan niet worden gestart: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() mislukt - - - - - Failed to initialize device restore extension: %s - De extensie voor apparaatherstel kan niet worden gestart: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() mislukt - - - - - Failed to initialize device manager extension: %s - De extensie voor apparaatbeheer kan niet worden gestart: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() mislukt - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() mislukt - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() mislukt - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() mislukt - - - - pa_context_get_client_info() failed - pa_context_get_client_info() mislukt - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() mislukt - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() mislukt - - - - pa_context_subscribe() failed - pa_context_subscribe() mislukt - - - - pa_context_client_info_list() failed - pa_context_client_info_list() mislukt - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() mislukt - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() mislukt - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() mislukt - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() mislukt - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() mislukt - - - - - Connection failed, attempting reconnect - Verbinding mislukt - bezig met nieuwe verbindingspoging… - - - - - PulseAudio Volume Control - PulseAudio-volumeregeling - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - De verbinding met PulseAudio is mislukt. Er wordt over 5 seconden automatische een nieuwe poging gedaan. - -In dit geval is de oorzaak waarschijnlijk dat PULSE_SERVER verkeerd is ingesteld in de omgevingsvariabelen of X11-rootvenstereigenschappen, of dat default-server verkeerd is ingesteld in client.conf -Deze situatie kan ook ontstaan als PulseAudio is vastgelopen en verouderde details heeft achtergelaten in het X11-rootvenster. Als dat het geval is, dan zou PulseAudio automatisch moeten herstarten, of als dat niet zo is ingesteld, moet u handmatig start-pulseaudio-x11 uitvoeren. - - - - Select a specific tab on load. - Kies een specifiek tabblad om automatisch te laden. - - - - Retry forever if pa quits (every 5 seconds). - Probeer steeds opnieuw indien pulseaudio stopt (elke 5 seconden). - - - - Maximize the window. - Maximaliseer het venster. - - - - Fatal Error: Unable to connect to PulseAudio - Fatale fout: kan niet verbinden met PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() mislukt - - - - SinkInputWidget - - - on - aan - - - - Terminate Playback - Afspelen afbreken - - - - Unknown output - Onbekende uitvoer - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() mislukt - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() mislukt - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() mislukt - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() mislukt - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() mislukt - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() mislukt - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() mislukt - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() mislukt - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() mislukt - - - - SourceOutputWidget - - - from - van - - - - Terminate Recording - Opname afbreken - - - - Unknown input - Onbekende invoer - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() mislukt - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() mislukt - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() mislukt - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() mislukt - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() mislukt - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() mislukt - - - - pa_context_set_default_source() failed - pa_context_set_default_source() mislukt - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() mislukt - - - - StreamWidget - - - Form - Dialoogvenster - - - - Device Title - Apparaatnaam - - - - direction - richting - - - - device - apparaat - - - - Mute audio - Geluid dempen - - - - Lock channels together - Kanalen tezamen vergrendelen - - - - Terminate - Afbreken - - - diff --git a/src/translations/pavucontrol-qt_oc.desktop.yaml b/src/translations/pavucontrol-qt_oc.desktop.yaml deleted file mode 100644 index 0a9672e..0000000 --- a/src/translations/pavucontrol-qt_oc.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Contraròtle del volum de PulseAudio" -Desktop Entry/GenericName: "Contraròtle del volum" -Desktop Entry/Comment: "Ajustar lo nivèl del volum" diff --git a/src/translations/pavucontrol-qt_or.ts b/src/translations/pavucontrol-qt_or.ts deleted file mode 100644 index 93a89f2..0000000 --- a/src/translations/pavucontrol-qt_or.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - ଫର୍ମ - - - - Card Name - କାର୍ଡ଼ ନାମ - - - - Profile: - ରୂପରେଖ: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ବିଫଳ ହୋଇଛି - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %୧%(%୨ଡ଼ି.ବିି.) - - - - %1% - volume slider label [X%] - %୧% - - - - <small>Silence</small> - <small>ନିରବତା</small> - - - - <small>Min</small> - <small>ସର୍ବନିମ୍ନ</small> - - - - <small>100% (0dB)</small> - <small>୧୦୦%(୦ଡ଼ିବି)</small> - - - - <small><i>Base</i></small> - <small><i>ଆଧାର</i></small> - - - - ChannelWidget - - - Form - ଫର୍ମ - - - - <b>left-front</b> - <b>ବାମ-ସାମ୍ନା</b> - - - - <small>50%</small> - <small>୫୦%</small> - - - - DeviceWidget - - - Form - ଫର୍ମ - - - - Device Title - ଯନ୍ତ୍ର ଶୀର୍ଷକ - - - - Mute audio - ମୌନ ଧ୍ବନି - - - - Lock channels together - ଚ୍ୟାନେଲ୍ ମାନଂକୁ ଏକା ସାଂଗରେ ବନ୍ଦ କର - - - - Set as fallback - ପଛରେ ପଡିବା ପାଇଁ ସ୍ଥିର କରିବା - - - - <b>Port:</b> - <b>ସଂଯୋଗିକୀ:</b> - - - - Show advanced options - ଅଗ୍ରୀମ ବିକଳ୍ପ ଦେଖାଅ - - - - PCM - ପି.ସି.ଏମ. - - - - AC3 - ଏ.ସି.୩ - - - - EAC3 - ଇଏ.ସି.୩ - - - - DTS - ଡି.ଟି.ଏସ୍. - - - - MPEG - ଏ.ମ.ଇ.ଯୀ. - - - - AAC - ଏ.ଏ.ସି. - - - - <b>Latency offset:</b> - <b>ସୁପ୍ତ ଅଫସେଟ</b> - - - - ms - ଏମ.ଏସ. - - - - Rename device... - ଯନ୍ତ୍ରର ନାମ ପରିର୍ବତ୍ତନ... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() ବିଫଳିତ - - - - Sorry, but device renaming is not supported. - କ୍ଷମା କରନ୍ତୁ, କିନ୍ତୁ ଯନ୍ତ୍ର ନାମ ପରିର୍ବତ୍ତନ ଉପଲବ୍ଧ ନୁହେଁ | - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - ଆପଣଙ୍କୁ module-device-manager କୁ PulseAudio ସର୍ଭର ରେ ଧାରଣ କରାଇବାକୁ ପଡିବ, ଯନ୍ତ୍ରର ନାମ ପରିବର୍ତନ କରିବା ପାଇଁ - - - - Rename device %1 to: - %୧ ଯନ୍ତ୍ରର ନାମ ପରିର୍ବତ୍ତନ କରାଯିବ: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() ବିଫଳିତ - - - - MainWindow - - - Volume Control - ଧ୍ବନିଶକ୍ତି ନିୟନ୍ତ୍ରଣ - - - - &Playback - &ପୁନଃପ୍ରଦର୍ଶନ - - - - <i>No application is currently playing audio.</i> - <i>ବର୍ତ୍ତମାନ କୌଣସି ପ୍ରୋଗ୍ରାମ ଧ୍ୱନି ଚଲାଉନାହିଁ।</i> - - - - - - - Show: - ଦେଖାଅ: - - - - - All Streams - ସମସ୍ତ ଧାରା - - - - - Applications - ଉପକରଣ ମାନ - - - - - Virtual Streams - କଳ୍ପିତ ଧାରାମାନ - - - - &Recording - &ଅଭିଲେଖନୀ - - - - <i>No application is currently recording audio.</i> - <i>ବର୍ତ୍ତମାନ କୌଣସି ପ୍ରୋଗ୍ରାମ ଧ୍ୱନି ଅଭିଲେଖନୀ କରୁନାହିଁ |</i> - - - - &Output Devices - &ନିର୍ଗମ ଉପକରଣଗୁଡ଼ିକ - - - - <i>No output devices available</i> - <i>କୌଣସି ନିର୍ଗମ ଉପକରଣ ଉପଲବ୍ଧ ନାହିଁ</i> - - - - All Output Devices - ସମସ୍ତ ନିର୍ଗମ ଧାରା - - - - Hardware Output Devices - ହାର୍ଡ଼ୱେର ନିର୍ଗମ ଯନ୍ତ୍ରମାନ - - - - Virtual Output Devices - ନିର୍ଗମ ନିର୍ଗମ ଯନ୍ତ୍ରମାନ - - - - &Input Devices - &ନିବେଶ ଉପକରଣଗୁଡ଼ିକ - - - - <i>No input devices available</i> - <i>କୌଣସି ନିବେଶ ଉପକରଣ ଉପଲବ୍ଧ ନାହିଁ</i> - - - - All Input Devices - ସମସ୍ତ ନିବେଶ ଯନ୍ତ୍ରମାନ - - - - All Except Monitors - ମୋନୀଟର ମାନଂକ ଛଡ଼ା ସବୁ - - - - Hardware Input Devices - ହାର୍ଡ଼ୱେର ନିବେଶ ଯନ୍ତ୍ରମାନ - - - - Virtual Input Devices - କଳ୍ପିତ ନିବେଶ ଯନ୍ତ୍ରମାନ - - - - Monitors - ମୋନୀଟରମାନ - - - - &Configuration - &ସଂରଚନା - - - - <i>No cards available for configuration</i> - <i>ସଂରଚନା ପାଇଁ କୌଣସି କାର୍ଡ ଉପଲବ୍ଧ ନାହିଁ</i> - - - - Show volume meters - ଧ୍ଵନି ମାପ ଉପକରଣ ଦେଖାଅ - - - - ... - ... - - - - (plugged in) - (ଲଗା ହୋଇଛି) - - - - - (unavailable) - (ଉପଲବ୍ଧ ନୁହେଁ) - - - - - (unplugged) - (ଖୋଲା ଅଛି) - - - - Failed to read data from stream - ଧାରାରୁ ତଥ୍ୟ ପଢ଼ିବାରେ ଅସଫଳ - - - - Peak detect - ଶିଖର ଚିହ୍ନାପଡ଼ିଛି - - - - Failed to create monitoring stream - ପ୍ରଦର୍ଶିକା ଧାରାକୁ ନିର୍ମାଣ କରିବାରେ ଅସଫଳ - - - - Failed to connect monitoring stream - ପ୍ରଦର୍ଶିକା ଧାରା ସହିତ ସଂଯୋଗ କରିବାରେ ଅସଫଳ - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - sink-input କୁ ଅଦେଖା କରାଯାଉଛି କାରଣ ଏହା ଏକ ଘଟଣା ଭାବେ ଅଭିହିତ ଅଛି ତେଣୁ ଏହା ଘଟଣା ଉପକରଣ ଦ୍ୱାରା ପରିଚାଳଣ କରାଯାଉଛି - - - - System Sounds - ତନ୍ତ୍ର ଧ୍ୱନିି - - - - Establishing connection to PulseAudio. Please wait... - ପଲସଅଡିଓ ସହ ସଂପର୍କ ଆରମ୍ଭ କରାଯାଉଛି| କୃପା କରି ଅପେକ୍ଷା କରନ୍ତୁ... - - - - QObject - - - Error - ତ୍ରୁଟି - - - - Card callback failure - କାର୍ଡ଼ କଲବ୍ୟାକ ଅସଫଳ - - - - Sink callback failure - ସିଙ୍କ କଲବ୍ୟାକ ଅସଫଳ - - - - Source callback failure - ଉତ୍ସ କଲବ୍ୟାକ ଅସଫଳ - - - - Sink input callback failure - ସିଙ୍କ ନିବେଶ କଲବ୍ୟାକ ଅସଫଳ - - - - Source output callback failure - ଉତ୍ସ ନିର୍ଗମ କଲବ୍ୟାକ ଅସଫଳ - - - - Client callback failure - ଗ୍ରାହକ କଲବ୍ୟାକ ଅସଫଳ - - - - Server info callback failure - ସର୍ଭର ସୂଚନା କଲବ୍ୟାକ ଅସଫଳ - - - - - Failed to initialize stream_restore extension: %s - stream_restore ଅନୁଲଗ୍ନକୁ ଆରମ୍ଭ କରିବାରେ ବିଫଳ: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ବିଫଳ ହୋଇଛି - - - - - Failed to initialize device restore extension: %s - ଯନ୍ତ୍ର ପୁନଃସ୍ଥାପନା ଅନୁଲଗ୍ନ ପ୍ରାରମ୍ଭିକରଣରେ ଅସଫଳ: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() ବିଫଳିତ - - - - - Failed to initialize device manager extension: %s - ଯନ୍ତ୍ର ପରିଚାଳକ ଅନୁଲଗ୍ନ ପ୍ରାରମ୍ଭିକରଣରେ ଅସଫଳ: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() ଅସଫଳ - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ଅସଫଳ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ଅସଫଳ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ଅସଫଳ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ଅସଫଳ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ଅସଫଳ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ଅସଫଳ - - - - pa_context_subscribe() failed - pa_context_subscribe() ଅସଫଳ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ଅସଫଳ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ଅସଫଳ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ଅସଫଳ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ଅସଫଳ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ଅସଫଳ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ଅସଫଳ - - - - - Connection failed, attempting reconnect - ଯୋଗାଯୋଗ ଅସଫଳ, ପୁନଃ ଯୋଗାଯୋଗ ପାଇଁ ଚେଷ୍ଟା କରାଯାଉଛି - - - - - PulseAudio Volume Control - PulseAudio ଧ୍ୱନି ଶକ୍ତି ନିୟନ୍ତ୍ରଣ - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - ଏକ ନିର୍ଦ୍ଧିଷ୍ଟ ଟ୍ୟାବ୍ କୁ ଆରମ୍ଭରେ ବାଛନ୍ତୁ | - - - - Retry forever if pa quits (every 5 seconds). - ସବୁବେଳେ ଚେଷ୍ଟା କର ଯଦି ପା ବନ୍ଦ ହେଉଛି (ପ୍ରତି ୫ ମୁହୁର୍ତରେ) | - - - - Maximize the window. - ଉଇଣ୍ଡୋ କୁ ବୃହତ୍ତମନ କର | - - - - Fatal Error: Unable to connect to PulseAudio - ଗୁରୁତର ତ୍ରୁଟି: ପଲସଅଡିଓ ସହ ଯୋଗାଯୋଗ କରିବାରେ ଅସଫଳ - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ଅସଫଳ - - - - SinkInputWidget - - - on - ଆରମ୍ଭ - - - - Terminate Playback - ପୁନଃପ୍ରଦର୍ଶନ କୁ ସମାପ୍ତ କର - - - - Unknown output - ଅଜଣା ଫଳାଫଳ - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ଅସଫଳ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ଅସଫଳ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ଅସଫଳ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ଅସଫଳ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ଅସଫଳ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ଅସଫଳ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ଅସଫଳ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ଅସଫଳ - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() ଅସଫଳ - - - - SourceOutputWidget - - - from - ଠାରୁ - - - - Terminate Recording - ଅଭିଲେଖନୀ ସମାପ୍ତ କର - - - - Unknown input - ଅଜଣା ନିବେଶ - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() ଅସଫଳ - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() ଅସଫଳ - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ଅସଫଳ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ଅସଫଳ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ଅସଫଳ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ଅସଫଳ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ଅସଫଳ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ଅସଫଳ - - - - StreamWidget - - - Form - ଫର୍ମ - - - - Device Title - ଯନ୍ତ୍ର ନାମ - - - - direction - ଦିଗ - - - - device - ଯନ୍ତ୍ର - - - - Mute audio - ଧ୍ବନିକୁ ମୌନ କର - - - - Lock channels together - ଚ୍ୟାନେଲ୍ ମାନଂକୁ ଏକା ସାଂଗରେ ବନ୍ଦ କର - - - - Terminate - ସମାପ୍ତ କର - - - diff --git a/src/translations/pavucontrol-qt_pa.ts b/src/translations/pavucontrol-qt_pa.ts deleted file mode 100644 index dd288ef..0000000 --- a/src/translations/pavucontrol-qt_pa.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - ਕਾਰਡ ਨਾਂ - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ਫੇਲ੍ਹ ਹੋਇਆ - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>ਚੁੱਪ</small> - - - - <small>Min</small> - <small>ਘੱਟ</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>ਬੇਸ</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ਖੱਬਾ-ਅੱਗੇ</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>ਪੋਰਟ:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ਵਾਲੀਅਮ ਕੰਟਰੋਲ - - - - &Playback - ਪਲੇਅਬੈਕ(&P) - - - - <i>No application is currently playing audio.</i> - <i>ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਹੁਣ ਆਡੀਓ ਨਹੀਂ ਚਲਾ ਰਹੀ ਹੈ।</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - ਰਿਕਾਰਡਿੰਗ(&R) - - - - <i>No application is currently recording audio.</i> - <i>ਕੋਈ ਐਪਲੀਕੇਸ਼ਨ ਹੁਣ ਆਡੀਓ ਰਿਕਾਰਡ ਨਹੀਂ ਕਰ ਰਹੀ ਹੈ।</i> - - - - &Output Devices - ਆਉਟਪੁੱਟ ਜੰਤਰ(&O) - - - - <i>No output devices available</i> - <i>ਕੋਈ ਆਉਟਪੁੱਟ ਜੰਤਰ ਉਪਲੱਬਧ ਨਹੀਂ</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - ਇੰਪੁੱਟ ਜੰਤਰ(&I) - - - - <i>No input devices available</i> - <i>ਕੋਈ ਇੰਪੁੱਟ ਜੰਤਰ ਉਪਲੱਬਧ ਨਹੀਂ ਹੈ</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - ਸੰਰਚਨਾ(&C) - - - - <i>No cards available for configuration</i> - <i>ਸੰਰਚਨਾ ਲਈ ਕੋਈ ਕਾਰਡ ਉਪਲੱਬਧ ਨਹੀਂ</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - ਸਟਰੀਮ ਤੋਂ ਡਾਟਾ ਪੜ੍ਹਨ ਵਿੱਚ ਫੇਲ੍ਹ ਹੈ - - - - Peak detect - ਪੀਕ ਮਿਲੀ - - - - Failed to create monitoring stream - ਨਿਗਰਾਨੀ ਸਟਰੀਮ ਬਣਾਉਣ ਵਿੱਚ ਫੇਲ੍ਹ ਹੋਇਆ - - - - Failed to connect monitoring stream - ਨਿਗਰਾਨੀ ਸਟਰੀਮ ਨਾਲ ਕੁਨੈਕਟ ਕਰਨ ਲਈ ਫੇਲ੍ਹ - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - ਸਿਸਟਮ ਸਾਊਂਡ - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - ਕਾਰਡ ਕਾਲਬੈਕ ਫੇਲ - - - - Sink callback failure - ਸਿੰਕ ਕਾਲਬੈਕ ਫੋਲ ਹੋਇਆ - - - - Source callback failure - ਸੋਰਸ ਕਾਲਬੈਕ ਫੇਲ ਹੋਇਆ - - - - Sink input callback failure - ਸਿੰਕ ਇੰਪੁੱਟ ਕਾਲਬੈਕ ਫੇਲ - - - - Source output callback failure - ਸਰੋਤ ਆਉਟਪੁੱਟ ਕਾਲਬੈਕ ਫੇਲ੍ਹ - - - - Client callback failure - ਕਲਾਇਟ ਕਾਲਬੈਕ ਫੇਲ੍ਹ - - - - Server info callback failure - ਸਰਵਰ ਜਾਣਕਾਰੀ ਕਾਲਬੈਕ ਫੇਲ੍ਹ - - - - - Failed to initialize stream_restore extension: %s - stream_restore ਐਕਸਟੈਂਸ਼ਨ ਸ਼ੁਰੂ ਕਰਨ ਵਿੱਚ ਫੇਲ: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ਫੇਲ੍ਹ ਹੈ - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ਫੇਲ੍ਹ ਹੈ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ਫੇਲ੍ਹ ਹੈ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ਫੇਲ੍ਹ ਹੋਇਆ - - - - pa_context_subscribe() failed - pa_context_subscribe() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ਫੇਲ ਹੋਇਆ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ਫੇਲ੍ਹ ਹੈ - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - ਪਲੱਸਆਡੀਓ ਵਾਲੀਅਮ ਕੰਟਰੋਲ - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ਫੇਲ੍ਹ ਹੈ - - - - SinkInputWidget - - - on - ਉੱਪਰ - - - - Terminate Playback - - - - - Unknown output - ਅਣਜਾਣ ਆਊਟਪੁੱਟ - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ਫੇਲ੍ਹ ਹੈ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() ਫੇਲ ਹੈ - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - ਤੋਂ - - - - Terminate Recording - - - - - Unknown input - ਅਣਜਾਣ ਇੰਪੁੱਟ - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ਫੇਲ੍ਹ ਹੈ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ਫੇਲ੍ਹ ਹੈ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() ਫੇਲ ਹੈ - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - ਦਿਸ਼ਾ - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - ਪਲੇਬੈਕ ਖਤਮ ਕਰੋ - - - diff --git a/src/translations/pavucontrol-qt_pl.desktop.yaml b/src/translations/pavucontrol-qt_pl.desktop.yaml deleted file mode 100644 index e509b79..0000000 --- a/src/translations/pavucontrol-qt_pl.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Kontrola PulseAudio" -Desktop Entry/GenericName: "Kontrola głośności" -Desktop Entry/Comment: "Dostosuj głośność i ustawienia dźwięku" diff --git a/src/translations/pavucontrol-qt_pl.ts b/src/translations/pavucontrol-qt_pl.ts deleted file mode 100644 index 6b5161f..0000000 --- a/src/translations/pavucontrol-qt_pl.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formularz - - - - Card Name - Nazwa karty - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() się nie powiodło - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Cisza</small> - - - - <small>Min</small> - <small>Minimum</small> - - - - <small>100% (0dB)</small> - <small>100% (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Podstawa</i></small> - - - - ChannelWidget - - - Form - Formularz - - - - <b>left-front</b> - <b>lewy-przedni</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formularz - - - - Device Title - Nazwa urządzenia - - - - Mute audio - Wycisz dźwięk - - - - Lock channels together - Zablokuj kanały - - - - Set as fallback - Ustaw jako zapasowe - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Pokaż zaawansowane opcje - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Przesunięcie opóźnienia:</b> - - - - ms - ms - - - - Rename device... - Zmień nazwę… - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() się nie powiodło - - - - Sorry, but device renaming is not supported. - Zmiana nazwy urządzenia nie jest obsługiwana. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Należy wczytać module-device-manager w serwerze PulseAudio, aby zmienić nazwę urządzenia - - - - Rename device %1 to: - Zmień nazwę urządzenia %1 na: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() nie powiodło się - - - - MainWindow - - - Volume Control - Kontrola głośności - - - - &Playback - O&dtwarzanie - - - - <i>No application is currently playing audio.</i> - <i>Żaden program obecnie nie odtwarza dźwięku.</i> - - - - - - - Show: - Pokaż: - - - - - All Streams - Wszystkie strumienie - - - - - Applications - Programy - - - - - Virtual Streams - Strumienie wirtualne - - - - &Recording - &Nagrywanie - - - - <i>No application is currently recording audio.</i> - <i>Żaden program obecnie nie nagrywa dźwięku.</i> - - - - &Output Devices - Urządzenia wyjści&owe - - - - <i>No output devices available</i> - <i>Brak dostępnych urządzeń wyjściowych</i> - - - - All Output Devices - Wszystkie urządzenia wyjściowe - - - - Hardware Output Devices - Sprzętowe urządzenia wyjściowe - - - - Virtual Output Devices - Wirtualne urządzenia wyjściowe - - - - &Input Devices - Urządzen&ia wejściowe - - - - <i>No input devices available</i> - <i>Brak dostępnych urządzeń wejściowych</i> - - - - All Input Devices - Wszystkie urządzenia wejściowe - - - - All Except Monitors - Wszystko poza monitorami - - - - Hardware Input Devices - Sprzętowe urządzenia wejściowe - - - - Virtual Input Devices - Wirtualne urządzenia wejściowe - - - - Monitors - Monitory - - - - &Configuration - &Konfiguracja - - - - <i>No cards available for configuration</i> - <i>Brak kart dostępnych do konfiguracji</i> - - - - Show volume meters - Pokaż wskaźniki poziom głośności - - - - ... - - - - - (plugged in) - (podłączone) - - - - - (unavailable) - (niedostępne) - - - - - (unplugged) - (rozłączone) - - - - Failed to read data from stream - Odczytanie danych ze strumienia się nie powiodło - - - - Peak detect - Wykrywanie szczytów - - - - Failed to create monitoring stream - Utworzenie strumienia monitorowania się nie powiodło - - - - Failed to connect monitoring stream - Połączenie ze strumienia monitorowania się nie powiodło - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorowanie sink-input, ponieważ jest ono oznaczone jako zdarzenie, więc jest jest obsługiwane przez widżet Zdarzenia - - - - System Sounds - Dźwięki systemowe - - - - Establishing connection to PulseAudio. Please wait... - Ustalanie połączenia z usługą PulseAudio. Proszę czekać… - - - - QObject - - - Error - Błąd - - - - Card callback failure - Oddzwonienie karty się nie powiodło - - - - Sink callback failure - Oddzwonienie odpływu się nie powiodło - - - - Source callback failure - Oddzwonienie źródła się nie powiodło - - - - Sink input callback failure - Oddzwonienie odpływu wejścia się nie powiodło - - - - Source output callback failure - Oddzwonienie odpływu wyjścia się nie powiodło - - - - Client callback failure - Oddzwonienie klienta się nie powiodło - - - - Server info callback failure - Oddzwonienie informacji serwera się nie powiodło - - - - - Failed to initialize stream_restore extension: %s - Zainicjowanie rozszerzenia stream_restore się nie powiodło: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() się nie powiodło - - - - - Failed to initialize device restore extension: %s - Zainicjowanie rozszerzenia przywracania urządzenia się nie powiodło: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() się nie powiodło - - - - - Failed to initialize device manager extension: %s - Zainicjowanie rozszerzenia menedżera urządzeń się nie powiodło: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() się nie powiodło - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() się nie powiodło - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() się nie powiodło - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() się nie powiodło - - - - pa_context_get_client_info() failed - pa_context_get_client_info() się nie powiodło - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() się nie powiodło - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() się nie powiodło - - - - pa_context_subscribe() failed - pa_context_subscribe() się nie powiodło - - - - pa_context_client_info_list() failed - pa_context_client_info_list() się nie powiodło - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() się nie powiodło - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() się nie powiodło - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() się nie powiodło - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() się nie powiodło - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() się nie powiodło - - - - - Connection failed, attempting reconnect - Połączenie się nie powiodło, próba ponownego połączenia - - - - - PulseAudio Volume Control - Kontrola głośności PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Połączenie z PulseAudio nie powiodło się. Zostanie ponowione w ciągu 5 sekund - -Prawdopodobnie jest to spowodowane nieprawidłową konfiguracją PULSE_SERVER w ustawieniach środowiska/ -X11 lub domyślnego serwera w client.conf. -Może to się również wydarzyć, jeżeli PulseAudio został zatrzymany i pozostawił nieaktualne informacje. W tym -przypadku PulseAudio powinien uruchomić się automaycznie, lub (jeżeli ta opcja nie jest skonfigurowana) powinieneś -uruchomić pulseaudio-x11 ręcznie. - - - - Select a specific tab on load. - Wczytuje podaną kartę. - - - - Retry forever if pa quits (every 5 seconds). - Ponawia w nieskończoność, jeśli PA zakończy działanie (co 5 sekund). - - - - Maximize the window. - Maksymalizuje okno. - - - - Fatal Error: Unable to connect to PulseAudio - Błąd krytyczny: nie można połączyć z usługą PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() się nie powiodło - - - - SinkInputWidget - - - on - na - - - - Terminate Playback - Wymuś zatrzymanie odtwarzania - - - - Unknown output - Nieznane wyjście - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() się nie powiodło - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() się nie powiodło - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() się nie powiodło - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() się nie powiodło - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() się nie powiodło - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() się nie powiodło - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() się nie powiodło - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() się nie powiodło - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() się nie powiodło - - - - SourceOutputWidget - - - from - z - - - - Terminate Recording - Wymuś zatrzymanie nagrywania - - - - Unknown input - Nieznane wejście - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() się nie powiodło - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() się nie powiodło - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() się nie powiodło - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() się nie powiodło - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() się nie powiodło - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() się nie powiodło - - - - pa_context_set_default_source() failed - pa_context_set_default_source() się nie powiodło - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() się nie powiodło - - - - StreamWidget - - - Form - Formularz - - - - Device Title - Nazwa urządzenia - - - - direction - kierunek - - - - device - urządzenie - - - - Mute audio - Wycisz dźwięk - - - - Lock channels together - Zablokuj kanały - - - - Terminate - Zakończ - - - diff --git a/src/translations/pavucontrol-qt_pt.desktop.yaml b/src/translations/pavucontrol-qt_pt.desktop.yaml deleted file mode 100644 index be03a44..0000000 --- a/src/translations/pavucontrol-qt_pt.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Controlo de volume PulseAudio" -Desktop Entry/GenericName: "Controlo de volume" -Desktop Entry/Comment: "Ajustar o nível do volume" diff --git a/src/translations/pavucontrol-qt_pt.ts b/src/translations/pavucontrol-qt_pt.ts deleted file mode 100644 index 877b3b9..0000000 --- a/src/translations/pavucontrol-qt_pt.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulário - - - - Card Name - Nome da placa - - - - Profile: - Perfil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() falhou - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Silêncio</small> - - - - <small>Min</small> - <small>Mín.</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Base</i></small> - - - - ChannelWidget - - - Form - Formulário - - - - <b>left-front</b> - <b>frontal esquerda</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulário - - - - Device Title - Título do dispositivo - - - - Mute audio - Sem som - - - - Lock channels together - Bloquer canais em conjunto - - - - Set as fallback - Utilizar como recurso - - - - <b>Port:</b> - <b>Porta:</b> - - - - Show advanced options - Mostrar opções avançadas - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Desvio de latência:</b> - - - - ms - ms - - - - Rename device... - Renomear dispositivo... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() falhou - - - - Sorry, but device renaming is not supported. - Desculpe mas não é possível renomear dispositivos. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Tem que ativar module-device-manager no servidor PulseAudio para poder renomear dispositivos - - - - Rename device %1 to: - Renomear dispositivo %1 para: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() falhou - - - - MainWindow - - - Volume Control - Controlo de volume - - - - &Playback - Re&produção - - - - <i>No application is currently playing audio.</i> - <i>Não existem aplicações a reproduzir áudio.</i> - - - - - - - Show: - Mostrar: - - - - - All Streams - Todos os fluxos - - - - - Applications - Aplicações - - - - - Virtual Streams - Fluxos virtuais - - - - &Recording - G&ravação - - - - <i>No application is currently recording audio.</i> - <i>Não existem aplicações a gravar áudio.</i> - - - - &Output Devices - Disp&ositivos de saída - - - - <i>No output devices available</i> - <i>Não existem dispositivos de saída</i> - - - - All Output Devices - Todos os dispositivos de saída - - - - Hardware Output Devices - Dispositivos de hardware - - - - Virtual Output Devices - Dispositivos virtuais - - - - &Input Devices - Dispos&itivos de entrada - - - - <i>No input devices available</i> - <i>Não existem dispositivos de entrada</i> - - - - All Input Devices - Todos os dispositivos de entrada - - - - All Except Monitors - Todos exceto os monitores - - - - Hardware Input Devices - Dispositivos de hardware - - - - Virtual Input Devices - Dispositivos virtuais - - - - Monitors - Monitores - - - - &Configuration - &Configuração - - - - <i>No cards available for configuration</i> - <i>Não existem placas para configuração</i> - - - - Show volume meters - Mostrar medidores de volume - - - - ... - ... - - - - (plugged in) - (conectado) - - - - - (unavailable) - (disponível) - - - - - (unplugged) - (não conectado) - - - - Failed to read data from stream - Falha ao ler os dados do fluxo - - - - Peak detect - Detetado pico - - - - Failed to create monitoring stream - Falha ao criar o fluxo de monitorização - - - - Failed to connect monitoring stream - Falha ao conectar o fluxo de monitorização - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Por ter sido designado como um evento, 'sink-output' será ignorado e gerido pelo widget de eventos - - - - System Sounds - Sons do sistema - - - - Establishing connection to PulseAudio. Please wait... - A estabelecer ligação ao servidor PulseAudio. Aguarde... - - - - QObject - - - Error - Erro - - - - Card callback failure - Falha no 'callback' da placa - - - - Sink callback failure - Falha no 'callback' do 'sink' - - - - Source callback failure - Falha no 'callback' da fonte - - - - Sink input callback failure - Falha no 'callback' de entrada do 'sink' - - - - Source output callback failure - Falha no 'callback' do destino - - - - Client callback failure - Falha no 'callback' do cliente - - - - Server info callback failure - Falha no 'callback' da info do servidor - - - - - Failed to initialize stream_restore extension: %s - Falha ao iniciar a extensão 'stream_restore': %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() falhou - - - - - Failed to initialize device restore extension: %s - Falha ao iniciar a extensão de restauro de dispositivos: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() falhou - - - - - Failed to initialize device manager extension: %s - Falha ao iniciar a extensão de gestão de dispositivos: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() falhou - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() falhou - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() falhou - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() falhou - - - - pa_context_get_client_info() failed - pa_context_get_client_info() falhou - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() falhou - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() falhou - - - - pa_context_subscribe() failed - pa_context_subscribe() falhou - - - - pa_context_client_info_list() failed - pa_context_client_info_list() falhou - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() falhou - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() falhou - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() falhou - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() falhou - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() falhou - - - - - Connection failed, attempting reconnect - Falha de ligação, a tentar novamente - - - - - PulseAudio Volume Control - Controlo de volume PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Falha ao estabelecer ligação ao PulseAudio. Nova tentativa dentro de 5 segundos. - -É possível que a variável PULSE_SERVER do ambiente//X11 Root Window Properties ou -que o servidor padrão definido em client.conf não estejam configurados corretamente. -Esta situação pode ter tido origem num encerramento abrupto do servidor PulseAudio no sistema root do X11. -Se for este o caso, o PulseAudio deverá ser reiniciado automaticamente. No entanto, se o PulseAudio não -for reiniciado automaticamente, deve executar o comando start-pulseaudio-x11. - - - - Select a specific tab on load. - Selecione o separador a carregar automaticamente. - - - - Retry forever if pa quits (every 5 seconds). - Tentar novamente se o PulseAudio encerrar (a cada 5 segundos). - - - - Maximize the window. - Maximizar a janela. - - - - Fatal Error: Unable to connect to PulseAudio - Erro fatal: incapaz de estabelecer a ligação ao PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() falhou - - - - SinkInputWidget - - - on - ligado - - - - Terminate Playback - Terminar reprodução - - - - Unknown output - Saída desconhecida - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() falhou - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() falhou - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() falhou - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() falhou - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() falhou - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() falhou - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() falhou - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() falhou - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() falhou - - - - SourceOutputWidget - - - from - de - - - - Terminate Recording - Terminar gravação - - - - Unknown input - Entrada desconhecida - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() falhou - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() falhou - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() falhou - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() falhou - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() falhou - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() falhou - - - - pa_context_set_default_source() failed - pa_context_set_default_source() falhou - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() falhou - - - - StreamWidget - - - Form - Formulário - - - - Device Title - Título do dispositivo - - - - direction - direção - - - - device - dispositivo - - - - Mute audio - Sem som - - - - Lock channels together - Bloquer canais em conjunto - - - - Terminate - Terminar - - - diff --git a/src/translations/pavucontrol-qt_pt_BR.ts b/src/translations/pavucontrol-qt_pt_BR.ts deleted file mode 100644 index fd9919d..0000000 --- a/src/translations/pavucontrol-qt_pt_BR.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Formulário - - - - Card Name - Nome da Placa - - - - Profile: - Perfil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() falhou - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Silêncio</small> - - - - <small>Min</small> - <small>Mín</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small>2 - - - - <small><i>Base</i></small> - <small><i>Volume</i></small> - - - - ChannelWidget - - - Form - Formulário - - - - <b>left-front</b> - <b>frontal-esquerdo</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulário - - - - Device Title - Título do Dispositivo - - - - Mute audio - Sem áudio - - - - Lock channels together - Travar canais juntos - - - - Set as fallback - Definir como reserva - - - - <b>Port:</b> - <b>Porta:</b> - - - - Show advanced options - Mostrar opções avançadas - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Compensação de Latência</b> - - - - ms - ms - - - - Rename device... - Renomear dispositivo... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() falhou - - - - Sorry, but device renaming is not supported. - Desculpe, mas a renomeação do dispositivo não é suportada. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Você precisa recarregar o módulo de gerenciamento de dispositivos no servidor PulseAudio para conseguir renomear dispositivos - - - - Rename device %1 to: - Renomear dispositivo %1 para: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() falhou - - - - MainWindow - - - Volume Control - Controle de volume - - - - &Playback - &Reprodução - - - - <i>No application is currently playing audio.</i> - <i>Nenhum aplicativo está reproduzindo áudio no momento.</i> - - - - - - - Show: - Exibir: - - - - - All Streams - Todos os fluxos - - - - - Applications - Aplicações - - - - - Virtual Streams - Fluxos virtuais - - - - &Recording - &Gravando - - - - <i>No application is currently recording audio.</i> - <i>Nenhum aplicativo está gravando áudio no momento.</i> - - - - &Output Devices - Dispositivos de &saída - - - - <i>No output devices available</i> - <i>Nenhum dispositivo de saída disponível</i> - - - - All Output Devices - Todos os dispositivos de saída - - - - Hardware Output Devices - Dispositivos de Saída de Hardware - - - - Virtual Output Devices - Dispositivos de Saída Virtual - - - - &Input Devices - Dispositivos de &entrada - - - - <i>No input devices available</i> - <i>Nenhum dispositivo de entrada disponível</i> - - - - All Input Devices - Todos Dispositivos de Entradas - - - - All Except Monitors - Todos exceto monitores - - - - Hardware Input Devices - Dispositivos de entrada de hardware - - - - Virtual Input Devices - Dispositivos de entrada virtual - - - - Monitors - Monitores - - - - &Configuration - &Configuração - - - - <i>No cards available for configuration</i> - <i>Nenhuma placa disponível para configuração</i> - - - - Show volume meters - Exibir medidor de volume - - - - ... - ... - - - - (plugged in) - (plugado) - - - - - (unavailable) - (indisponível) - - - - - (unplugged) - (desplugado) - - - - Failed to read data from stream - Falha ao ler dados procedentes do fluxo - - - - Peak detect - Detectar pico - - - - Failed to create monitoring stream - Falha ao criar o fluxo de monitoramento - - - - Failed to connect monitoring stream - Falha ao conectar o fluxo de monitoramento - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorando a entrada do coletor devido a ele ser designado como um evento e, portanto, manipulado pelo Evento widget - - - - System Sounds - Sons do sistema - - - - Establishing connection to PulseAudio. Please wait... - Estabelecendo conexão ao PulseAudio. Por favor, aguarde... - - - - QObject - - - Error - Erro - - - - Card callback failure - Falha na chamada de retorno da placa - - - - Sink callback failure - Falha no destino da chamada de retorno - - - - Source callback failure - Chamada de retorno da fonte falhou - - - - Sink input callback failure - Falha no destino da entrada das chamadas de retorno - - - - Source output callback failure - Falha na chamada de retorno da saída da fonte - - - - Client callback failure - Falha na chamada de retorno do cliente - - - - Server info callback failure - Falha na chamada de retorno das informações do servidor - - - - - Failed to initialize stream_restore extension: %s - Falha ao inicializar a extensão stream_restore: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() falhou - - - - - Failed to initialize device restore extension: %s - Falha ao inicializar a extensão de restauração do dispositivo: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() falhou - - - - - Failed to initialize device manager extension: %s - Falha ao inicializar a extensão do gerenciador de dispositivos: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() falhou - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() falhou - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() falhou - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() falhou - - - - pa_context_get_client_info() failed - pa_context_get_client_info() falhou - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() falhou - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() falhou - - - - pa_context_subscribe() failed - pa_context_subscribe() falhou - - - - pa_context_client_info_list() failed - pa_context_client_info_list() falhou - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() falhou - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() falhou - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() falhou - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() falhou - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() falhou - - - - - Connection failed, attempting reconnect - Falha na conexão, tentando reconectar - - - - - PulseAudio Volume Control - Controle de volume do PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - A conexão com o PulseAudio falhou. Tentando novamente em 5s - -Nesse caso é provável que PULSE_SERVER nas propriedades da janela Environment/X11 Root -ou defaul.server em client.conf está configurado incorretamente. -Esta situação também pode surgir quando o PulseAudio falhou e deixou detalhes obsoletos na janela X11 Root. -Se esse for o caso, o PulseAudio deverá ser novamente exibido automaticamente ou, se isso não -executar, iniciar start-pulseaudio-x11 manualmente. - - - - Select a specific tab on load. - Selecionar uma aba especifica ao carregar. - - - - Retry forever if pa quits (every 5 seconds). - Tentar para sempre se o pa fechar (a cada 5 segundos). - - - - Maximize the window. - Maximizar a janela. - - - - Fatal Error: Unable to connect to PulseAudio - Erro Fatal: Não foi possível conectar ao PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() falhou - - - - SinkInputWidget - - - on - ligado - - - - Terminate Playback - Finalizar Reprodução - - - - Unknown output - Saída desconhecida - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() falhou - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() falhou - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() falhou - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() falhou - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() falhou - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() falhou - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() falhou - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() falhou - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() falhou - - - - SourceOutputWidget - - - from - de - - - - Terminate Recording - Finalizar Gravação - - - - Unknown input - Entrada desconhecida - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() falhou - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() falhou - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() falhou - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() falhou - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() falhou - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() falhou - - - - pa_context_set_default_source() failed - pa_context_set_default_source() falhou - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() falhou - - - - StreamWidget - - - Form - Formato - - - - Device Title - Nome do Dispositivo - - - - direction - direção - - - - device - dispositivo - - - - Mute audio - Mudo - - - - Lock channels together - Sincronizar canais - - - - Terminate - Terminar - - - diff --git a/src/translations/pavucontrol-qt_ro.desktop.yaml b/src/translations/pavucontrol-qt_ro.desktop.yaml deleted file mode 100644 index abc38b5..0000000 --- a/src/translations/pavucontrol-qt_ro.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Control volum PulseAudio" -Desktop Entry/GenericName: "Control volum" -Desktop Entry/Comment: "Ajustează nivelul volumului" diff --git a/src/translations/pavucontrol-qt_ro.ts b/src/translations/pavucontrol-qt_ro.ts deleted file mode 100644 index 0022216..0000000 --- a/src/translations/pavucontrol-qt_ro.ts +++ /dev/null @@ -1,740 +0,0 @@ - - - - - CardWidget - - - Form - Formular - - - - Card Name - Denumire cartelă - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() a eșuat - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Tăcere</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>De bază</i></small> - - - - ChannelWidget - - - Form - Formular - - - - <b>left-front</b> - <b>stânga-față</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formular - - - - Device Title - Titlu dispozitiv - - - - Mute audio - Muțește sunetul - - - - Lock channels together - Blochează canalele împreună - - - - Set as fallback - Stabilește ca rezervă - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Arată opțiuni avansate - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Decalaj de latență:</b> - - - - ms - ms - - - - Rename device... - Redenumește dispozitivul… - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() a eșuat - - - - Sorry, but device renaming is not supported. - Scuze, redenumirea dispozitivului nu e susținută. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Trebuie să încărcați module-device-manager în serverul PulseAudio pentru a redenumi dispozitive - - - - Rename device %1 to: - Redenumește dispozitivul %1 în: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() a eșuat - - - - MainWindow - - - Volume Control - Control volum - - - - <i>No application is currently playing audio.</i> - <i>Nicio aplicație nu redă sunet acum.</i> - - - - - - - Show: - Arată: - - - - - All Streams - Toate fluxurile - - - - - Applications - Aplicații - - - - - Virtual Streams - Fluxuri virtuale - - - - <i>No application is currently recording audio.</i> - <i>Nicio aplicație nu înregistrează sunet acum.</i> - - - - <i>No output devices available</i> - <i>Niciun dispozitiv de ieșire disponibil</i> - - - - All Output Devices - Toate dispozitivele de ieșire - - - - Hardware Output Devices - Dispozitive de ieșire fizice - - - - Virtual Output Devices - Dispozitive de ieșire virtuale - - - - &Playback - &Redare - - - - &Recording - În&registrare - - - - &Output Devices - Disp&ozitive de ieșire - - - - &Input Devices - Dispozitive de &intrare - - - - <i>No input devices available</i> - <i>Niciun dispozitiv de intrare disponibil</i> - - - - All Input Devices - Toate dispozitivele de intrare - - - - All Except Monitors - Toate cu excepția monitoarelor - - - - Hardware Input Devices - Dispozitive de intrare fizice - - - - Virtual Input Devices - Dispozitive de intrare virtuale - - - - Monitors - Monitoare - - - - &Configuration - &Configurare - - - - <i>No cards available for configuration</i> - <i>Nicio cartelă disponibilă pentru configurare</i> - - - - Show volume meters - Arată contoare de volum - - - - ... - - - - - (plugged in) - (atașat) - - - - - (unavailable) - (indisponibil) - - - - - (unplugged) - (detașat) - - - - Failed to read data from stream - Citirea datelor din flux a eșuat - - - - Peak detect - Detectare vârfuri - - - - Failed to create monitoring stream - Crearea fluxului de monitorizare a eșuat - - - - Failed to connect monitoring stream - Conectarea fluxului de monitorizare a eșuat - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Se ignoră intrarea receptorului din cauză că e desemnată ca eveniment, astfel fiind manipulată de controlul „Eveniment” - - - - System Sounds - Sunete de sistem - - - - Establishing connection to PulseAudio. Please wait... - Se stabilește conexiunea la PulseAudio. Așteptați… - - - - QObject - - - Error - Eroare - - - - Card callback failure - Eșec retroapel cartelă - - - - Sink callback failure - Eșec retroapel receptor - - - - Source callback failure - Eșec retroapel sursă - - - - Sink input callback failure - Eșec retroapel intrare receptor - - - - Source output callback failure - Eșec retroapel ieșire sursă - - - - Client callback failure - Eșec retroapel client - - - - Server info callback failure - Eșec retroapel informații server - - - - - Failed to initialize stream_restore extension: %s - Inițializarea extensiei stream_restore a eșuat: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() a eșuat - - - - - Failed to initialize device restore extension: %s - Inițializarea extensiei de restabilire a dispozitivelor a eșuat: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() a eșuat - - - - - Failed to initialize device manager extension: %s - Inițializarea extensiei de gestiune a dispozitivelor a eșuat: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() a eșuat - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() a eșuat - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() a eșuat - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() a eșuat - - - - pa_context_get_client_info() failed - pa_context_get_client_info() a eșuat - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() a eșuat - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() a eșuat - - - - pa_context_subscribe() failed - pa_context_subscribe() a eșuat - - - - pa_context_client_info_list() failed - pa_context_client_info_list() a eșuat - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() a eșuat - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() a eșuat - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() a eșuat - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() a eșuat - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() a eșuat - - - - - Connection failed, attempting reconnect - Conexiune eșuată, se încearcă reconectarea - - - - - PulseAudio Volume Control - Control volum PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Conectarea la PulseAudio a eșuat. Reîncercare automată în 5s - -În acest caz, aceasta se poate datora faptului că PULSE_SERVER (în mediu sau în proprietățile -ferestrei-rădăcină X11) sau default-server (în client.conf) sunt configurate greșit. -Această situație poate apărea și atunci când PulseAudio s-a prăbușit și a lăsat în urmă -detalii învechite în fereastra-rădăcină X11. -Dacă acesta e cazul, atunci PulseAudio ar trebui să se pornească automat din nou. -Dacă acest lucru nu e configurat, rulați „start-pulseaudio-x11” manual. - - - - Select a specific tab on load. - Alege o filă anumită la încărcare. - - - - Retry forever if pa quits (every 5 seconds). - Încearcă în continuu dacă PA se termină (la fiecare 5 secunde). - - - - Maximize the window. - Maximizează fereastra. - - - - Fatal Error: Unable to connect to PulseAudio - Eroare fatală: Nu s-a putut conecta la PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() a eșuat - - - - SinkInputWidget - - - on - pe - - - - Terminate Playback - Termină redarea - - - - Unknown output - Ieșire necunoscută - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() a eșuat - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() a eșuat - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() a eșuat - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() a eșuat - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() a eșuat - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() a eșuat - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() a eșuat - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() a eșuat - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() a eșuat - - - - SourceOutputWidget - - - from - din - - - - Terminate Recording - Termină înregistrarea - - - - Unknown input - Intrare necunoscută - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() a eșuat - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() a eșuat - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() a eșuat - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() a eșuat - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() a eșuat - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() a eșuat - - - - pa_context_set_default_source() failed - pa_context_set_default_source() a eșuat - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() a eșuat - - - - StreamWidget - - - Form - Formular - - - - Device Title - Titlu dispozitiv - - - - direction - direcție - - - - device - dispozitiv - - - - Mute audio - Muțește sunetul - - - - Lock channels together - Blochează canalele împreună - - - - Terminate - Termină - - - diff --git a/src/translations/pavucontrol-qt_ru.desktop.yaml b/src/translations/pavucontrol-qt_ru.desktop.yaml deleted file mode 100644 index a05bd57..0000000 --- a/src/translations/pavucontrol-qt_ru.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Регулятор громкости PulseAudio" -Desktop Entry/GenericName: "Громкость" -Desktop Entry/Comment: "Изменение уровня громкости" diff --git a/src/translations/pavucontrol-qt_ru.ts b/src/translations/pavucontrol-qt_ru.ts deleted file mode 100644 index fe15ee3..0000000 --- a/src/translations/pavucontrol-qt_ru.ts +++ /dev/null @@ -1,740 +0,0 @@ - - - - - CardWidget - - - Form - Форма - - - - Card Name - Имя карты - - - - Profile: - Профиль: - - - - pa_context_set_card_profile_by_index() failed - Сбой pa_context_set_card_profile_by_index() - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2дБ) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Тишина</small> - - - - <small>Min</small> - <small>Минимум</small> - - - - <small>100% (0dB)</small> - <small>100% (0дБ)</small> - - - - <small><i>Base</i></small> - <small><i>База</i></small> - - - - ChannelWidget - - - Form - Форма - - - - <b>left-front</b> - <b>левый-передний</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Форма - - - - Device Title - Имя устройства - - - - Mute audio - Выключить звук - - - - Lock channels together - Связать каналы вместе - - - - Set as fallback - Установить как резервное - - - - <b>Port:</b> - <b>Профиль:</b> - - - - Show advanced options - Показать расширенные настройки - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Время задержки:</b> - - - - ms - мс - - - - Rename device... - Переименовать устройство... - - - - pa_context_set_port_latency_offset() failed - Сбой pa_context_set_port_latency_offset() - - - - Sorry, but device renaming is not supported. - Простите, но переименование устройств не поддерживается. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Чтобы переименовывать устройства, вам необходимо загрузить module-device-manager в сервер PulseAudio - - - - Rename device %1 to: - Переименовать устройство %1 в: - - - - pa_ext_device_manager_set_device_description() failed - Сбой pa_ext_device_manager_set_device_description() - - - - MainWindow - - - Volume Control - Громкость - - - - &Playback - &Проигрывание - - - - <i>No application is currently playing audio.</i> - <i>Ни одно приложение сейчас не воспроизводит звук.</i> - - - - - - - Show: - Показать: - - - - - All Streams - Все потоки - - - - - Applications - Приложения - - - - - Virtual Streams - Виртуальные потоки - - - - &Recording - &Запись - - - - <i>No application is currently recording audio.</i> - <i>Ни одно приложение сейчас не записывает звук.</i> - - - - &Output Devices - Устройства В&ывода - - - - <i>No output devices available</i> - <i>Нет доступных устройств вывода.</i> - - - - All Output Devices - Все устройства вывода - - - - Hardware Output Devices - Аппаратные устройства вывода - - - - Virtual Output Devices - Виртуальные устройства вывода - - - - &Input Devices - Устройства &Ввода - - - - <i>No input devices available</i> - <i>Нет доступных устройств ввода.</i> - - - - All Input Devices - Все устройства ввода - - - - All Except Monitors - Все кроме мониторов - - - - Hardware Input Devices - Аппаратные устройства ввода - - - - Virtual Input Devices - Виртуальные устройства ввода - - - - Monitors - Мониторы - - - - &Configuration - &Конфигурация - - - - <i>No cards available for configuration</i> - <i>Нет доступных для конфигурации карт.</i> - - - - Show volume meters - Показывать измерители громкости - - - - ... - ... - - - - (plugged in) - (подключено) - - - - - (unavailable) - (недоступно) - - - - - (unplugged) - (отключено) - - - - Failed to read data from stream - Не удается прочесть данные из потока - - - - Peak detect - Детектирование пиков - - - - Failed to create monitoring stream - Не удается создать поток мониторинга - - - - Failed to connect monitoring stream - Не удается присоединить поток мониторинга - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Входные данные приёмника игнорируются, так как они рассматриваются как событие и будут обработаны виджетом событий - - - - System Sounds - Системные звуки - - - - Establishing connection to PulseAudio. Please wait... - Установление соединения с PulseAudio. Подождите... - - - - QObject - - - Error - Ошибка - - - - Card callback failure - Сбой обратного вызова карты - - - - Sink callback failure - Сбой обратного вызова слива - - - - Source callback failure - Сбой обратного вызова источника - - - - Sink input callback failure - Сбой обратного вызова входа слива - - - - Source output callback failure - Сбой обратного вызова выхода источника - - - - Client callback failure - Сбой обратного вызова клиента - - - - Server info callback failure - Сбой обратного вызова информации о сервере - - - - - Failed to initialize stream_restore extension: %s - Сбой инициализации расширения stream_restore: %s - - - - pa_ext_stream_restore_read() failed - Сбой pa_ext_stream_restore_read() - - - - - Failed to initialize device restore extension: %s - Сбой инициализации расширения восстановления устройства: %s - - - - pa_ext_device_restore_read_sink_formats() failed - Сбой pa_ext_device_restore_read_sink_formats() - - - - - Failed to initialize device manager extension: %s - Сбой инициализации расширения диспетчера устройств: %s - - - - pa_ext_device_manager_read() failed - Сбой pa_ext_device_manager_read() - - - - pa_context_get_sink_info_by_index() failed - Сбой pa_context_get_sink_info_by_index() - - - - pa_context_get_source_info_by_index() failed - Сбой pa_context_get_source_info_by_index() - - - - - pa_context_get_sink_input_info() failed - Сбой pa_context_get_sink_input_info() - - - - pa_context_get_client_info() failed - Сбой pa_context_get_client_info() - - - - - pa_context_get_server_info() failed - Сбой pa_context_get_server_info() - - - - pa_context_get_card_info_by_index() failed - Сбой pa_context_get_card_info_by_index() - - - - pa_context_subscribe() failed - Сбой pa_context_subscribe() - - - - pa_context_client_info_list() failed - Сбой pa_context_client_info_list() - - - - pa_context_get_card_info_list() failed - Сбой pa_context_get_card_info_list() - - - - pa_context_get_sink_info_list() failed - Сбой pa_context_get_sink_info_list() - - - - pa_context_get_source_info_list() failed - Сбой pa_context_get_source_info_list() - - - - pa_context_get_sink_input_info_list() failed - Сбой pa_context_get_sink_input_info_list() - - - - pa_context_get_source_output_info_list() failed - Сбой pa_context_get_source_output_info_list() - - - - - Connection failed, attempting reconnect - Ошибка подключения, пытаюсь переподключит - - - - - PulseAudio Volume Control - Регулятор громкости PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Не удалось подключиться к PulseAudio. Повторная попытка через 5 с - -В данном случае это вероятно вызвано неверным значением PULSE_SERVER в свойствах -корневого окна, в переменных окружения или в ключе default-server в client.conf. -Эта ситуация также может возникнуть, если PulseAudio аварийно завершилась и свойства -корневого окна X11 содержат устаревшую информацию. -В этом случае PulseAudio должна запуститься снова; если же система так не настроена, -вы должны запустить start-pulseaudio-x11 вручную. - - - - Select a specific tab on load. - Выбрать вкладку на загрузку. - - - - Retry forever if pa quits (every 5 seconds). - Повторять вечно, если pa завершит работу (каждые 5 секунд). - - - - Maximize the window. - Распахнуть окно. - - - - Fatal Error: Unable to connect to PulseAudio - Критическая ошибка: Невозможно подключиться к PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Сбой pa_ext_stream_restore_write() - - - - SinkInputWidget - - - on - вкл. - - - - Terminate Playback - Прервать воспроизведение - - - - Unknown output - Неизвестный вывод - - - - pa_context_set_sink_input_volume() failed - Сбой pa_context_set_sink_input_volume() - - - - pa_context_set_sink_input_mute() failed - Сбой pa_context_set_sink_input_mute() - - - - pa_context_kill_sink_input() failed - Сбой pa_context_kill_sink_input() - - - - pa_context_move_sink_input_by_index() failed - Сбой pa_context_move_sink_input_by_index() - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Сбой pa_context_set_sink_volume_by_index() - - - - pa_context_set_sink_mute_by_index() failed - Сбой pa_context_set_sink_mute_by_index() - - - - pa_context_set_default_sink() failed - Сбой pa_context_set_default_sink() - - - - pa_context_set_sink_port_by_index() failed - Сбой pa_context_set_sink_mute_by_index() - - - - pa_ext_device_restore_save_sink_formats() failed - Сбой pa_ext_device_restore_save_sink_formats() - - - - SourceOutputWidget - - - from - из - - - - Terminate Recording - Прервать запись - - - - Unknown input - Неизвестный вывод - - - - pa_context_set_source_output_volume() failed - Сбой pa_context_set_source_output_volume() - - - - pa_context_set_source_output_mute() failed - Сбой pa_context_set_source_output_mute() - - - - pa_context_kill_source_output() failed - Сбой pa_context_kill_source_output() - - - - pa_context_move_source_output_by_index() failed - Сбой pa_context_move_source_output_by_index() - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Сбой pa_context_set_source_volume_by_index() - - - - pa_context_set_source_mute_by_index() failed - Сбой pa_context_set_source_mute_by_index() - - - - pa_context_set_default_source() failed - Сбой pa_context_set_default_source() - - - - pa_context_set_source_port_by_index() failed - Сбой pa_context_set_source_mute_by_index() - - - - StreamWidget - - - Form - Форма - - - - Device Title - Название устройства - - - - direction - направление - - - - device - устройство - - - - Mute audio - Выключить звук - - - - Lock channels together - Связать каналы вместе - - - - Terminate - Прервать поток - - - diff --git a/src/translations/pavucontrol-qt_si.desktop.yaml b/src/translations/pavucontrol-qt_si.desktop.yaml deleted file mode 100644 index 775df48..0000000 --- a/src/translations/pavucontrol-qt_si.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "" -Desktop Entry/GenericName: "" -Desktop Entry/Comment: "" diff --git a/src/translations/pavucontrol-qt_si.ts b/src/translations/pavucontrol-qt_si.ts deleted file mode 100644 index 6410729..0000000 --- a/src/translations/pavucontrol-qt_si.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - - - - - <i>No application is currently playing audio.</i> - - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - <i>No application is currently recording audio.</i> - - - - - <i>No output devices available</i> - - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Playback - - - - - &Recording - - - - - &Output Devices - - - - - &Input Devices - - - - - <i>No input devices available</i> - - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - - - - - <i>No cards available for configuration</i> - - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - - - - - Peak detect - - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - - - - - pa_ext_stream_restore_read() failed - - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - - - - - pa_context_get_source_info_by_index() failed - - - - - - pa_context_get_sink_input_info() failed - - - - - pa_context_get_client_info() failed - - - - - - pa_context_get_server_info() failed - - - - - pa_context_get_card_info_by_index() failed - - - - - pa_context_subscribe() failed - - - - - pa_context_client_info_list() failed - - - - - pa_context_get_card_info_list() failed - - - - - pa_context_get_sink_info_list() failed - - - - - pa_context_get_source_info_list() failed - - - - - pa_context_get_sink_input_info_list() failed - - - - - pa_context_get_source_output_info_list() failed - - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - - - - - pa_context_set_sink_input_mute() failed - - - - - pa_context_kill_sink_input() failed - - - - - pa_context_move_sink_input_by_index() failed - - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - - - - - pa_context_set_sink_mute_by_index() failed - - - - - pa_context_set_default_sink() failed - - - - - pa_context_set_sink_port_by_index() failed - - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - - - - - pa_context_move_source_output_by_index() failed - - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - - - - - pa_context_set_source_mute_by_index() failed - - - - - pa_context_set_default_source() failed - - - - - pa_context_set_source_port_by_index() failed - - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - - - - diff --git a/src/translations/pavucontrol-qt_sk.desktop.yaml b/src/translations/pavucontrol-qt_sk.desktop.yaml deleted file mode 100644 index 1a6ed87..0000000 --- a/src/translations/pavucontrol-qt_sk.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio na ovládanie hlasitosti" -Desktop Entry/GenericName: "Ovládanie hlasitosti" -Desktop Entry/Comment: "Upraviť hlasitosť" diff --git a/src/translations/pavucontrol-qt_sk.ts b/src/translations/pavucontrol-qt_sk.ts deleted file mode 100644 index 6a3ce5a..0000000 --- a/src/translations/pavucontrol-qt_sk.ts +++ /dev/null @@ -1,736 +0,0 @@ - - - - - CardWidget - - - Form - Formulár - - - - Card Name - Názov karty - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() zlyhal - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Ticho</small> - - - - <small>Min</small> - <small>Min.</small> - - - - <small>100% (0dB)</small> - <small>100% (0 dB)</small> - - - - <small><i>Base</i></small> - <small><i>Základ</i></small> - - - - ChannelWidget - - - Form - Formulár - - - - <b>left-front</b> - <b>ľavý-predný</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulár - - - - Device Title - Názov zariadenia - - - - Mute audio - Stlmiť zvuk - - - - Lock channels together - Ovládať kanály spoločne - - - - Set as fallback - Nastaviť ako zálohu - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Zobraziť pokročilé možnosti - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Posun latencie:</b> - - - - ms - ms - - - - Rename device... - Premenovať zariadenie... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() zlyhalo - - - - Sorry, but device renaming is not supported. - Ľutujeme, ale premenovanie zariadenia nie je podporované. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - K premenovaniu zariadenia je potrebné načítať modul PulseAudio - - - - Rename device %1 to: - Premenovať zariadenie: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() zlyhalo - - - - MainWindow - - - Volume Control - Ovládanie hlasitosti - - - - &Playback - &Prehrávanie - - - - <i>No application is currently playing audio.</i> - <i>Žiadna aplikácia momentálne neprehráva zvuk.</i> - - - - - - - Show: - Zobraziť: - - - - - All Streams - Všetky toky - - - - - Applications - Aplikácie - - - - - Virtual Streams - Virtuálne toky - - - - &Recording - &Nahrávanie - - - - <i>No application is currently recording audio.</i> - <i>Žiadna aplikácia momentálne nenahráva zvuk.</i> - - - - &Output Devices - &Výstupné zariadenia - - - - <i>No output devices available</i> - <i>Nie sú dostupné žiadne výstupné zariadenia</i> - - - - All Output Devices - Všetky výstupné zariadenia - - - - Hardware Output Devices - Hardvérové výstupné zariadenia - - - - Virtual Output Devices - Virtuálne výstupné zariadenia - - - - &Input Devices - Vstupné zar&iadenia - - - - <i>No input devices available</i> - <i>Nie sú dostupné žiadne vstupné zariadenia</i> - - - - All Input Devices - Všetky vstupné zariadenia - - - - All Except Monitors - Všetky okrem monitora - - - - Hardware Input Devices - Hardvérové vstupné zariadenia - - - - Virtual Input Devices - Virtuálne vstupné zariadenia - - - - Monitors - Monitory - - - - &Configuration - &Nastavenie - - - - <i>No cards available for configuration</i> - <i>Žiadne karty nie sú dostupné na konfiguráciu</i> - - - - Show volume meters - Zobraziť úroveň zvuku - - - - ... - ... - - - - (plugged in) - .(pripojené) - - - - - (unavailable) - .(nedostupný) - - - - - (unplugged) - .(nepripojený) - - - - Failed to read data from stream - Nepodarilo sa prečítať dáta z prúdu - - - - Peak detect - Detekcia vrcholov - - - - Failed to create monitoring stream - Nepodarilo sa vytvoriť monitorovací prúd - - - - Failed to connect monitoring stream - Nepodarilo sa pripojiť monitorovací prúd - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Ignorovanie zníženia vstupu, pretože je ovládaný widgetom - - - - System Sounds - Systémové zvuky - - - - Establishing connection to PulseAudio. Please wait... - Vytváram pripojenie k PulseAudio. Prosím čakajte... - - - - QObject - - - Error - Chyba - - - - Card callback failure - Spätné volanie karty zlyhalo - - - - Sink callback failure - Cieľové spätné volanie zlyhalo - - - - Source callback failure - Zdrojové spätné volanie zlyhalo - - - - Sink input callback failure - Cieľové vstupné spätné volanie zlyhalo - - - - Source output callback failure - Zdrojové výstupné spätné volanie zlyhalo - - - - Client callback failure - Klientské spätné volanie zlyhalo - - - - Server info callback failure - Server info spätné volanie zlyhalo - - - - - Failed to initialize stream_restore extension: %s - Nepodarilo sa inicializovať stream_restore rozšírenie: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() zlyhal - - - - - Failed to initialize device restore extension: %s - Nepodarilo sa inicializovať rozšírenie pre obnovu zariadenia - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() zlyhalo - - - - - Failed to initialize device manager extension: %s - Nepodarilo sa inicializovať rozšírenie správcu zariadenia:% s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() zlyhalo - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() zlyhal - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() zlyhal - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() zlyhal - - - - pa_context_get_client_info() failed - pa_context_get_client_info() zlyhal - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() zlyhal - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() zlyhal - - - - pa_context_subscribe() failed - pa_context_subscribe() zlyhal - - - - pa_context_client_info_list() failed - pa_context_client_info_list() zlyhal - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() zlyhal - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() zlyhal - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() zlyhal - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() zlyhal - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() zlyhal - - - - - Connection failed, attempting reconnect - Pripojenie zlyhalo, pokus o znovupripojenie - - - - - PulseAudio Volume Control - Ovládanie hlasitosti PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - Pripojenie k PulseAudio zlyhalo. Pokus o znovupripojenie o 5 s - -Dôvodom môže byť, že premenná prostredia (alebo vlastnosť koreňového okna X11) PULSE_SERVER je nesprávne nastavená. -Táto situácia môže nastať, ak proces PulseAudio havaroval a nechal neplatné údaje vo vlastnostiach koreňového okna X11. V takom prípade by malo PulseAudio opäť automaticky naštartovať. Ak sa nespúšťa automaticky, je možné spustiť start-pulseaudio-x11 ručne. - - - - Select a specific tab on load. - Vyberte kartu, ktorú chcete načítať. - - - - Retry forever if pa quits (every 5 seconds). - Opakovať vždy keď pa ukončí (každých 5 sekúnd). - - - - Maximize the window. - Maximalizovať okno. - - - - Fatal Error: Unable to connect to PulseAudio - Chyba: Nepodarilo sa pripojiť k PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() zlyhal - - - - SinkInputWidget - - - on - na - - - - Terminate Playback - Ukončiť prehrávanie - - - - Unknown output - Neznámy výstup - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() zlyhal - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() zlyhal - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() zlyhal - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() zlyhal - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() zlyhal - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() zlyhal - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() zlyhal - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() zlyhal - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() zlyhal - - - - SourceOutputWidget - - - from - z - - - - Terminate Recording - Ukončiť nahrávanie - - - - Unknown input - Neznámy vstup - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() zlyhalo - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() zlyhalo - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() zlyhal - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() zlyhal - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() zlyhal - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() zlyhal - - - - pa_context_set_default_source() failed - pa_context_set_default_source() zlyhal - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() zlyhal - - - - StreamWidget - - - Form - Formulár - - - - Device Title - Názov zariadenia - - - - direction - smer - - - - device - zariadenie - - - - Mute audio - Vypnúť zvuk - - - - Lock channels together - Ovládať kanály spoločne - - - - Terminate - Ukončiť prehrávanie - - - diff --git a/src/translations/pavucontrol-qt_sr.ts b/src/translations/pavucontrol-qt_sr.ts deleted file mode 100644 index 1c5c10f..0000000 --- a/src/translations/pavucontrol-qt_sr.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - Образац - - - - Card Name - Назив картице - - - - Profile: - Профил: - - - - pa_context_set_card_profile_by_index() failed - Неуспела функција pa_context_set_card_profile_by_index() - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Тишина</small> - - - - <small>Min</small> - <small>Мин</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Основа</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>леви-предњи</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>Порт:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - Контрола јачине звука - - - - &Playback - &Репродукција - - - - <i>No application is currently playing audio.</i> - <i>Нема програма који тренутно репродукује звук.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - &Снимање - - - - <i>No application is currently recording audio.</i> - <i>Нема програма који тренутно снима звук.</i> - - - - &Output Devices - &Излазни уређаји - - - - <i>No output devices available</i> - <i>Нема доступних излазних уређаја</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - &Улазни уређаји - - - - <i>No input devices available</i> - <i>Нема доступних улазних уређаја</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - &Подешавања - - - - <i>No cards available for configuration</i> - <i>Нема доступних картица за подешавање</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - Неуспело очитавање података са тока - - - - Peak detect - Откривање максималног нивоа - - - - Failed to create monitoring stream - Неуспело прављење надзорног тока - - - - Failed to connect monitoring stream - Неуспело повезивање са надзорним током - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - Системски звуци - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - Неуспешан опозив картице - - - - Sink callback failure - Неуспешан опозив сливника - - - - Source callback failure - Неуспешан опозив извора - - - - Sink input callback failure - Неуспешан опозив сливника улаза - - - - Source output callback failure - Неуспешан опозив извора излаза - - - - Client callback failure - Неуспешан опозив клијента - - - - Server info callback failure - Неуспешан опозив информација о серверу - - - - - Failed to initialize stream_restore extension: %s - Неуспешна иницијализација проширења stream_restore: %s - - - - pa_ext_stream_restore_read() failed - Неуспела функција pa_ext_stream_restore_read() - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - Неуспела функција pa_context_get_sink_info_by_index() - - - - pa_context_get_source_info_by_index() failed - Неуспела функција pa_context_get_source_info_by_index() - - - - - pa_context_get_sink_input_info() failed - Неуспела функција pa_context_get_sink_input_info() - - - - pa_context_get_client_info() failed - Неуспела функција pa_context_get_client_info() - - - - - pa_context_get_server_info() failed - Неуспела функција pa_context_get_server_info() - - - - pa_context_get_card_info_by_index() failed - Неуспела функција pa_context_get_card_info_by_index() - - - - pa_context_subscribe() failed - Неуспела функција pa_context_subscribe() - - - - pa_context_client_info_list() failed - Неуспела функција pa_context_client_info_list() - - - - pa_context_get_card_info_list() failed - Није успело извршавање функције pa_context_get_card_info_list() - - - - pa_context_get_sink_info_list() failed - Неуспела функција pa_context_get_sink_info_list() - - - - pa_context_get_source_info_list() failed - Неуспела функција pa_context_get_source_info_list() - - - - pa_context_get_sink_input_info_list() failed - Неуспела функција pa_context_get_sink_input_info_list() - - - - pa_context_get_source_output_info_list() failed - Неуспела функција pa_context_get_source_output_info_list() - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio контрола јачине звука - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Неуспела функција pa_ext_stream_restore_write() - - - - SinkInputWidget - - - on - на - - - - Terminate Playback - - - - - Unknown output - Непознат излаз - - - - pa_context_set_sink_input_volume() failed - Неуспела функција pa_context_set_sink_input_volume() - - - - pa_context_set_sink_input_mute() failed - Неуспела функција pa_context_set_sink_input_mute() - - - - pa_context_kill_sink_input() failed - Неуспела функција pa_context_kill_sink_input() - - - - pa_context_move_sink_input_by_index() failed - Неуспела функција pa_context_move_sink_input_by_index() - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Неуспела функција pa_context_set_sink_volume_by_index() - - - - pa_context_set_sink_mute_by_index() failed - Неуспела функција pa_context_set_sink_mute_by_index() - - - - pa_context_set_default_sink() failed - Неуспела функција pa_context_set_default_sink() - - - - pa_context_set_sink_port_by_index() failed - Неуспела функција pa_context_set_sink_port_by_index() - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - са - - - - Terminate Recording - - - - - Unknown input - Непознат улаз - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - Неуспела функција pa_context_kill_source_output() - - - - pa_context_move_source_output_by_index() failed - Неуспела функција pa_context_move_source_output_by_index() - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Неуспела функција pa_context_set_source_volume_by_index() - - - - pa_context_set_source_mute_by_index() failed - Неуспела функција pa_context_set_source_mute_by_index() - - - - pa_context_set_default_source() failed - Неуспела функција pa_context_set_default_source() - - - - pa_context_set_source_port_by_index() failed - Неуспела функција pa_context_set_source_port_by_index() - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - смер - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - Прекини репродукцију - - - diff --git a/src/translations/pavucontrol-qt_sr@latin.ts b/src/translations/pavucontrol-qt_sr@latin.ts deleted file mode 100644 index bac5e17..0000000 --- a/src/translations/pavucontrol-qt_sr@latin.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - Ime kartice - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - Neuspela funkcija pa_context_set_card_profile_by_index() - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>Tišina</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>Osnova</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>levi-prednji</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - Kontrola jačine zvuka - - - - &Playback - &Reprodukcija - - - - <i>No application is currently playing audio.</i> - <i>Nema programa koji trenutno reprodukuje zvuk.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - &Snimanje - - - - <i>No application is currently recording audio.</i> - <i>Nema programa koji trenutno snima zvuk.</i> - - - - &Output Devices - &Izlazni uređaji - - - - <i>No output devices available</i> - <i>Nema dostupnih izlaznih uređaja</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - &Ulazni uređaji - - - - <i>No input devices available</i> - <i>Nema dostupnih ulaznih uređaja</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - &Podešavanja - - - - <i>No cards available for configuration</i> - <i>Nema dostupnih kartica za podešavanje</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - Neuspelo očitavanje podataka sa toka - - - - Peak detect - Otkrivanje maksimalnog nivoa - - - - Failed to create monitoring stream - Neuspelo pravljenje nadzornog toka - - - - Failed to connect monitoring stream - Neuspelo povezivanje sa nadzornim tokom - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - Sistemski zvuci - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - Neuspešan opoziv kartice - - - - Sink callback failure - Neuspešan opoziv slivnika - - - - Source callback failure - Neuspešan opoziv izvora - - - - Sink input callback failure - Neuspešan opoziv slivnika ulaza - - - - Source output callback failure - Neuspešan opoziv izvora izlaza - - - - Client callback failure - Neuspešan opoziv klijenta - - - - Server info callback failure - Neuspešan opoziv informacija o serveru - - - - - Failed to initialize stream_restore extension: %s - Neuspešna inicijalizacija proširenja stream_restore: %s - - - - pa_ext_stream_restore_read() failed - Neuspela funkcija pa_ext_stream_restore_read() - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - Neuspela funkcija pa_context_get_sink_info_by_index() - - - - pa_context_get_source_info_by_index() failed - Neuspela funkcija pa_context_get_source_info_by_index() - - - - - pa_context_get_sink_input_info() failed - Neuspela funkcija pa_context_get_sink_input_info() - - - - pa_context_get_client_info() failed - Neuspela funkcija pa_context_get_client_info() - - - - - pa_context_get_server_info() failed - Neuspela funkcija pa_context_get_server_info() - - - - pa_context_get_card_info_by_index() failed - Neuspela funkcija pa_context_get_card_info_by_index() - - - - pa_context_subscribe() failed - Neuspela funkcija pa_context_subscribe() - - - - pa_context_client_info_list() failed - Neuspela funkcija pa_context_client_info_list() - - - - pa_context_get_card_info_list() failed - Nije uspelo izvršavanje funkcije pa_context_get_card_info_list() - - - - pa_context_get_sink_info_list() failed - Neuspela funkcija pa_context_get_sink_info_list() - - - - pa_context_get_source_info_list() failed - Neuspela funkcija pa_context_get_source_info_list() - - - - pa_context_get_sink_input_info_list() failed - Neuspela funkcija pa_context_get_sink_input_info_list() - - - - pa_context_get_source_output_info_list() failed - Neuspela funkcija pa_context_get_source_output_info_list() - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio kontrola jačine zvuka - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Neuspela funkcija pa_ext_stream_restore_write() - - - - SinkInputWidget - - - on - na - - - - Terminate Playback - - - - - Unknown output - Nepoznat izlaz - - - - pa_context_set_sink_input_volume() failed - Neuspela funkcija pa_context_set_sink_input_volume() - - - - pa_context_set_sink_input_mute() failed - Neuspela funkcija pa_context_set_sink_input_mute() - - - - pa_context_kill_sink_input() failed - Neuspela funkcija pa_context_kill_sink_input() - - - - pa_context_move_sink_input_by_index() failed - Neuspela funkcija pa_context_move_sink_input_by_index() - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Neuspela funkcija pa_context_set_sink_volume_by_index() - - - - pa_context_set_sink_mute_by_index() failed - Neuspela funkcija pa_context_set_sink_mute_by_index() - - - - pa_context_set_default_sink() failed - Neuspela funkcija pa_context_set_default_sink() - - - - pa_context_set_sink_port_by_index() failed - Neuspela funkcija pa_context_set_sink_port_by_index() - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - sa - - - - Terminate Recording - - - - - Unknown input - Nepoznat ulaz - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - Neuspela funkcija pa_context_kill_source_output() - - - - pa_context_move_source_output_by_index() failed - Neuspela funkcija pa_context_move_source_output_by_index() - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Neuspela funkcija pa_context_set_source_volume_by_index() - - - - pa_context_set_source_mute_by_index() failed - Neuspela funkcija pa_context_set_source_mute_by_index() - - - - pa_context_set_default_source() failed - Neuspela funkcija pa_context_set_default_source() - - - - pa_context_set_source_port_by_index() failed - Neuspela funkcija pa_context_set_source_port_by_index() - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - smer - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - Prekini reprodukciju - - - diff --git a/src/translations/pavucontrol-qt_sv.ts b/src/translations/pavucontrol-qt_sv.ts deleted file mode 100644 index 1d07f76..0000000 --- a/src/translations/pavucontrol-qt_sv.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - Form - - - - Card Name - Kortnamn - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() misslyckades - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Tysta</small> - - - - <small>Min</small> - <small>Min</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Bas</i></small> - - - - ChannelWidget - - - Form - Formulär - - - - <b>left-front</b> - <b>vänster fram</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Formulär - - - - Device Title - Enhetens titel - - - - Mute audio - Stäng av ljudet - - - - Lock channels together - Lås kanaler tillsammans - - - - Set as fallback - Ange som reserv - - - - <b>Port:</b> - <b>Port:</b> - - - - Show advanced options - Visa avancerade alternativ - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - - - - - ms - ms - - - - Rename device... - Byt namn på enhet... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() misslyckades - - - - Sorry, but device renaming is not supported. - Tyvärr, men enhetsnamnbyte stöds inte. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Du måste ladda modul-enhetshanteraren i PulseAudio-servern för att byta namn på enheter - - - - Rename device %1 to: - Byt namn på enhet %1 till: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() misslyckades - - - - MainWindow - - - Volume Control - Volymkontroll - - - - &Playback - U&ppspelning - - - - <i>No application is currently playing audio.</i> - <i>Inget program spelar för närvarande upp något ljud.</i> - - - - - - - Show: - Visa: - - - - - All Streams - Alla strömmar - - - - - Applications - Program - - - - - Virtual Streams - Virtuella strömmar - - - - &Recording - I&nspelning - - - - <i>No application is currently recording audio.</i> - <i>Inget program spelar för närvarande in något ljud.</i> - - - - &Output Devices - &Uppspelningsenheter - - - - <i>No output devices available</i> - <i>Inga uppspelningsenheter tillgängliga</i> - - - - All Output Devices - Alla utgångsenheter - - - - Hardware Output Devices - Hårdvaruutmatningsenheter - - - - Virtual Output Devices - Virtuella utgångsenheter - - - - &Input Devices - &Inenheter - - - - <i>No input devices available</i> - <i>Inga inenheter tillgängliga</i> - - - - All Input Devices - Alla ingångsenheter - - - - All Except Monitors - - - - - Hardware Input Devices - Inmatningsenheter för maskinvara - - - - Virtual Input Devices - Virtuella inmatningsenheter - - - - Monitors - Skärmar - - - - &Configuration - &Konfiguration - - - - <i>No cards available for configuration</i> - <i>Inga kort tillgängliga för konfiguration</i> - - - - Show volume meters - Visa volymmätare - - - - ... - ... - - - - (plugged in) - (inkopplad) - - - - - (unavailable) - (inte tillgänglig) - - - - - (unplugged) - (urkopplad) - - - - Failed to read data from stream - Misslyckades med att läsa data från ström - - - - Peak detect - Topp upptäcktes - - - - Failed to create monitoring stream - Misslyckades med att skapa övervakningsström - - - - Failed to connect monitoring stream - Misslyckades med att ansluta övervakningsström - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - Systemljud - - - - Establishing connection to PulseAudio. Please wait... - Upprättar anslutning till PulseAudio. Vänta... - - - - QObject - - - Error - Fel - - - - Card callback failure - Kortåterkoppling misslyckades - - - - Sink callback failure - Fel vid sink-återkoppling - - - - Source callback failure - Fel vid källåterkoppling - - - - Sink input callback failure - Fel vid sinkingångsåterkoppling - - - - Source output callback failure - Fel vid källutgångsåterkoppling - - - - Client callback failure - Fel vid klientåterkoppling - - - - Server info callback failure - Fel vid serverinformationsåterkoppling - - - - - Failed to initialize stream_restore extension: %s - Misslyckades med att initiera tillägget stream_restore: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() misslyckades - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() misslyckades - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() misslyckades - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() misslyckades - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() misslyckades - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() misslyckades - - - - pa_context_get_client_info() failed - pa_context_get_client_info() misslyckades - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() misslyckades - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() misslyckades - - - - pa_context_subscribe() failed - pa_context_subscribe() misslyckades - - - - pa_context_client_info_list() failed - pa_context_client_info_list() misslyckades - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() misslyckades - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() misslyckades - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() misslyckades - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() misslyckades - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() misslyckades - - - - - Connection failed, attempting reconnect - Anslutningen misslyckades, försökte återansluta - - - - - PulseAudio Volume Control - Volymkontroll för PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - Försök igen för evigt om pa slutar (var 5:e sekund). - - - - Maximize the window. - Maximera fönstret. - - - - Fatal Error: Unable to connect to PulseAudio - Allvarligt fel: Det går inte att ansluta till PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() misslyckades - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - Okänd utgång - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() misslyckades - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() misslyckades - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() misslyckades - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() misslyckades - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() misslyckades - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() misslyckades - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() misslyckades - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_mute_by_index() misslyckades - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() misslyckades - - - - SourceOutputWidget - - - from - från - - - - Terminate Recording - - - - - Unknown input - Okänd ingång - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() misslyckades - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() misslyckades - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() misslyckades - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() misslyckades - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() misslyckades - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() misslyckades - - - - pa_context_set_default_source() failed - pa_context_set_default_source() misslyckades - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_mute_by_index() misslyckades - - - - StreamWidget - - - Form - Formulär - - - - Device Title - Enhetens titel - - - - direction - riktning - - - - device - enhet - - - - Mute audio - Stäng av ljudet - - - - Lock channels together - Lås kanaler tillsammans - - - - Terminate - Terminera ström - - - diff --git a/src/translations/pavucontrol-qt_ta.ts b/src/translations/pavucontrol-qt_ta.ts deleted file mode 100644 index 3dee6aa..0000000 --- a/src/translations/pavucontrol-qt_ta.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - அட்டையின் பெயர் - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() தோல்வியடைந்தது - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>அமைதி</small> - - - - <small>Min</small> - <small>குறைந்த</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>அடிப்படை</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>இடது-முன்னால்</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>துறை:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ஒலியளவு கட்டுப்பாடு - - - - &Playback - இயக்கு (&P) - - - - <i>No application is currently playing audio.</i> - <i>எந்த பயன்பாடும் தற்போது ஆடியோ இசைக்கவில்லை.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - ஒலிப்பதிவு (&R) - - - - <i>No application is currently recording audio.</i> - <i>எந்த பயன்பாடும் தற்போது ஆடியோ பதிவு செய்யவில்லை.</i> - - - - &Output Devices - வெளிப்பாடு சாதனங்கள் (&O) - - - - <i>No output devices available</i> - <i>வெளிப்பாடு சாதனங்கள் கிடைக்கப் பெறவில்லை</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - உள்வரும் சாதனங்கள் (&I) - - - - <i>No input devices available</i> - <i>உள்வரும் சாதனங்கள் கிடைக்கப் பெறவில்லை</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - கட்டமைப்பு (&C) - - - - <i>No cards available for configuration</i> - <i>கட்டமைப்பதற்கு அட்டைகள் கிடைக்கப் பெறவில்லை</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - ஸ்ட்ரீமிலிருந்து தரவை வாசிக்க முடியவில்லை - - - - Peak detect - பீக் கண்டறியப்பட்டது - - - - Failed to create monitoring stream - கண்காணிக்கும் ஸ்ட்ரீமை உருவாக்க முடியவில்லை - - - - Failed to connect monitoring stream - கண்காணிக்கும் ஸ்ட்ரீமை இணைக்க முடியவில்லை - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - கணினியின் ஒலிகள் - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - அட்டை மறுஅழைப்பில் தோல்வி - - - - Sink callback failure - சுருங்கி மறுஅழைப்பில் தோல்வி - - - - Source callback failure - மூல மறுஅழைப்பில் தோல்வி - - - - Sink input callback failure - மூழ்கும் உள்ளீடு கால்பேக் தோல்வி - - - - Source output callback failure - மூல வெளியேறும் மறுஅழைப்பில் தோல்வி - - - - Client callback failure - கிளையன்ட்டை மறுஅழைப்பதில் தோல்வி - - - - Server info callback failure - சேவையக தகவலை மறுஅழைப்பதில் தோல்வி - - - - - Failed to initialize stream_restore extension: %s - stream_restore விரிவாக்கத்தை துவக்க முடியவில்லை: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() தோல்வியடைந்தது - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() தோல்வியடைந்தது - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() தோல்வியடைந்தது - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() தோல்வியடைந்தது - - - - pa_context_get_client_info() failed - pa_context_get_client_info() தோல்வியடைந்தது - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() தோல்வியடைந்தது - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() தோல்வியடைந்தது - - - - pa_context_subscribe() failed - pa_context_subscribe() தோல்வியடைந்தது - - - - pa_context_client_info_list() failed - pa_context_client_info_list() தோல்வியடைந்தது - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() தோல்வியடைந்தது - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() தோல்வியடைந்தது - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() தோல்வியடைந்தது - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() தோல்வியடைந்தது - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() தோல்வியடைந்தது - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio ஒலியளவு கட்டுப்பாடு - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() தோல்வியடைந்தது - - - - SinkInputWidget - - - on - இல் - - - - Terminate Playback - - - - - Unknown output - தெரியாத வெளிப்பாடு - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() தோல்வியடைந்தது - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() தோல்வியடைந்தது - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() தோல்வியடைந்தது - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() தோல்வியடைந்தது - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() தோல்வியடைந்தது - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() தோல்வியடைந்தது - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() தோல்வியடைந்தது - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() தோல்வி - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - இலிருந்து - - - - Terminate Recording - - - - - Unknown input - தெரியாத உள்ளீடு - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() தோல்வியடைந்தது - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() தோல்வியடைந்தது - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() தோல்வியடைந்தது - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() தோல்வியடைந்தது - - - - pa_context_set_default_source() failed - pa_context_set_default_source() தோல்வியடைந்தது - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() தோல்வி - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - திசை - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - Playbackஐ நிறுத்து - - - diff --git a/src/translations/pavucontrol-qt_te.ts b/src/translations/pavucontrol-qt_te.ts deleted file mode 100644 index f145cf5..0000000 --- a/src/translations/pavucontrol-qt_te.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - కార్డు నామము - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() విఫలమైంది - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>నిశ్శబ్దము</small> - - - - <small>Min</small> - <small>కనిష్టము</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>బేస్</i></small> - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ఎడమవైపు-ముందు</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>పోర్టు:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ధ్వని నియంత్రణ - - - - &Playback - ప్లేబ్యాక్ (&P) - - - - <i>No application is currently playing audio.</i> - <i>ఏ అనువర్తనము యిప్పుడు ఆడియోను ప్లే చేయుటలేదు.</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - రికార్డింగ్ (&R) - - - - <i>No application is currently recording audio.</i> - <i>ఏ అనువర్తనము యిప్పుడు ఆడియోను రికార్డు చేయుటలేదు.</i> - - - - &Output Devices - అవుట్పుట్ పరికరములు (&O) - - - - <i>No output devices available</i> - <i>ఏ అవుట్పుట్ పరికరములు అందుబాటులోలేవు</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - ఇన్పుట్ పరికరములు (&I) - - - - <i>No input devices available</i> - <i>ఏ యిన్పుట్ పరికరములు అందుబాటులో లేవు</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - ఆకృతీకరణ (&C) - - - - <i>No cards available for configuration</i> - <i>ఆకృతీకరణకు ఏ కార్డులు అందుబాటులో లేవు</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - స్ట్రీమ్ నుండి డాటాను చదువుటకు విఫలమైంది - - - - Peak detect - అంత్యస్థాయి గుర్తింపు - - - - Failed to create monitoring stream - పర్యవేక్షక స్ట్రీమ్ సృష్టించుటకు విఫలమైంది - - - - Failed to connect monitoring stream - పర్యవేక్షక స్ట్రీమ్ అనుసంధానములో విఫలమైంది - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - సిస్టమ్ శబ్దములు - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - కార్డ్ కాల్‌బ్యాక్ విఫలమైంది - - - - Sink callback failure - సింక్ కాల్‌బ్యాక్ విఫలమైంది - - - - Source callback failure - ములం కాల్‌బ్యాక్ విఫలమైంది - - - - Sink input callback failure - సింక్ ఇన్పుట్ కాల్‌బ్యాక్ విఫలమైంది - - - - Source output callback failure - మూలం అవుట్పుట్ కాల్‌బ్యాక్ విఫలమైంది - - - - Client callback failure - కక్షిదారి కాల్‌బ్యాక్ విఫలమైంది - - - - Server info callback failure - సేవిక సమాచారము కాల్‌బ్యాక్ విఫలమైంది - - - - - Failed to initialize stream_restore extension: %s - stream_restore పొడిగింపును సిద్దముచేయుటకు విఫలమైంది: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() విఫలమైంది - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() విఫలమైంది - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() విఫలమైంది - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() విఫలమైంది - - - - pa_context_get_client_info() failed - pa_context_get_client_info() విఫలమైంది - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() విఫలమైంది - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() విఫలమైంది - - - - pa_context_subscribe() failed - pa_context_subscribe() విఫలమైంది - - - - pa_context_client_info_list() failed - pa_context_client_info_list() విఫలమైంది - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() విఫలమైంది - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() విఫలమైంది - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() విఫలమైంది - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() విఫలమైంది - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() విఫలమైంది - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - PulseAudio ధ్వని నియంత్రణ - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() విఫలమైంది - - - - SinkInputWidget - - - on - ఆన్ - - - - Terminate Playback - - - - - Unknown output - తెలియని అవుట్పుట్ - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() విఫలమైంది - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() విఫలమైంది - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() విఫలమైంది - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() విఫలమైంది - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() విఫలమైంది - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() విఫలమైంది - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() విఫలమైంది - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() విఫలమైంది - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - నుండి - - - - Terminate Recording - - - - - Unknown input - తెలియని యిన్పుట్ - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() విఫలమైంది - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() విఫలమైంది - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() విఫలమైంది - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() విఫలమైంది - - - - pa_context_set_default_source() failed - pa_context_set_default_source() విఫలమైంది - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() విఫలమైంది - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - దిశ - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - ప్లేబ్యాక్ అంతంచేయి - - - diff --git a/src/translations/pavucontrol-qt_th.ts b/src/translations/pavucontrol-qt_th.ts deleted file mode 100644 index fa7ace5..0000000 --- a/src/translations/pavucontrol-qt_th.ts +++ /dev/null @@ -1,733 +0,0 @@ - - - - - CardWidget - - - Form - - - - - Card Name - ชื่อการ์ด - - - - Profile: - - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() ไม่สำเร็จ - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - - - - - <small>Min</small> - - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - - - - - ChannelWidget - - - Form - - - - - <b>left-front</b> - <b>ซ้าย-หน้า</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - - - - - Device Title - - - - - Mute audio - - - - - Lock channels together - - - - - Set as fallback - - - - - <b>Port:</b> - <b>โพรไฟล์:</b> - - - - Show advanced options - - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - - - - - ms - - - - - Rename device... - - - - - pa_context_set_port_latency_offset() failed - - - - - Sorry, but device renaming is not supported. - - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - - - - - Rename device %1 to: - - - - - pa_ext_device_manager_set_device_description() failed - - - - - MainWindow - - - Volume Control - ตัวควบคุมเสียง - - - - &Playback - @เล่น - - - - <i>No application is currently playing audio.</i> - <i>ไม่มีโปรแกรมใดกำลังเล่นเสียงอยู่</i> - - - - - - - Show: - - - - - - All Streams - - - - - - Applications - - - - - - Virtual Streams - - - - - &Recording - &บันทึกเสียง - - - - <i>No application is currently recording audio.</i> - <i>ไม่มีโปรแกรมใดกำลังอัดเสียงอยู่</i> - - - - &Output Devices - อุปกรณ์เ&อาท์พุต - - - - <i>No output devices available</i> - <i>ไม่มีอุปกรณ์เอาท์พุต</i> - - - - All Output Devices - - - - - Hardware Output Devices - - - - - Virtual Output Devices - - - - - &Input Devices - &อุปกรณ์รับเข้า - - - - <i>No input devices available</i> - <i>ไม่มีอุปกรณ์รับเข้า</i> - - - - All Input Devices - - - - - All Except Monitors - - - - - Hardware Input Devices - - - - - Virtual Input Devices - - - - - Monitors - - - - - &Configuration - &การตั้งค่า - - - - <i>No cards available for configuration</i> - <i>ไม่มีการ์ดให้ปรับแต่ง</i> - - - - Show volume meters - - - - - ... - - - - - (plugged in) - - - - - - (unavailable) - - - - - - (unplugged) - - - - - Failed to read data from stream - ไม่สามารถอ่านจากสตรีมได้ - - - - Peak detect - ตรวจพบพีค - - - - Failed to create monitoring stream - - - - - Failed to connect monitoring stream - - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - - - - - System Sounds - เสียงของระบบ - - - - Establishing connection to PulseAudio. Please wait... - - - - - QObject - - - Error - - - - - Card callback failure - - - - - Sink callback failure - - - - - Source callback failure - - - - - Sink input callback failure - - - - - Source output callback failure - - - - - Client callback failure - - - - - Server info callback failure - - - - - - Failed to initialize stream_restore extension: %s - ไม่สามารถเรียกส่วนขยายของ stream_restore: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() ไม่สำเร็จ - - - - - Failed to initialize device restore extension: %s - - - - - pa_ext_device_restore_read_sink_formats() failed - - - - - - Failed to initialize device manager extension: %s - - - - - pa_ext_device_manager_read() failed - - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() ไม่สำเร็จ - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() ไม่สำเร็จ - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() ไม่สำเร็จ - - - - pa_context_get_client_info() failed - pa_context_get_client_info() ไม่สำเร็จ - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() ไม่สำเร็จ - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() ไม่สำเร็จ - - - - pa_context_subscribe() failed - pa_context_subscribe() ไม่สำเร็จ - - - - pa_context_client_info_list() failed - pa_context_client_info_list() ไม่สำเร็จ - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() ไม่สำเร็จ - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() ไม่สำเร็จ - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() ไม่สำเร็จ - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() ไม่สำเร็จ - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() ไม่สำเร็จ - - - - - Connection failed, attempting reconnect - - - - - - PulseAudio Volume Control - ตัวควบคุมเสียง PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - - - - - Select a specific tab on load. - - - - - Retry forever if pa quits (every 5 seconds). - - - - - Maximize the window. - - - - - Fatal Error: Unable to connect to PulseAudio - - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() ไม่สำเร็จ - - - - SinkInputWidget - - - on - - - - - Terminate Playback - - - - - Unknown output - - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() ไม่สำเร็จ - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() ไม่สำเร็จ - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() ไม่สำเร็จ - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() ไม่สำเร็จ - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() ไม่สำเร็จ - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() ไม่สำเร็จ - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() ไม่สำเร็จ - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_mute_by_index() ไม่สำเร็จ - - - - pa_ext_device_restore_save_sink_formats() failed - - - - - SourceOutputWidget - - - from - - - - - Terminate Recording - - - - - Unknown input - - - - - pa_context_set_source_output_volume() failed - - - - - pa_context_set_source_output_mute() failed - - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() ไม่สำเร็จ - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() ไม่สำเร็จ - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() ไม่สำเร็จ - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() ไม่สำเร็จ - - - - pa_context_set_default_source() failed - pa_context_set_default_source() ไม่สำเร็จ - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_mute_by_index() ไม่สำเร็จ - - - - StreamWidget - - - Form - - - - - Device Title - - - - - direction - - - - - device - - - - - Mute audio - - - - - Lock channels together - - - - - Terminate - _จบสตรีม - - - diff --git a/src/translations/pavucontrol-qt_tr.desktop.yaml b/src/translations/pavucontrol-qt_tr.desktop.yaml deleted file mode 100644 index 85357bd..0000000 --- a/src/translations/pavucontrol-qt_tr.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio Ses Denetimi" -Desktop Entry/GenericName: "Ses Denetimi" -Desktop Entry/Comment: "Ses seviyesini ayarlayın" diff --git a/src/translations/pavucontrol-qt_tr.ts b/src/translations/pavucontrol-qt_tr.ts deleted file mode 100644 index 310a7ba..0000000 --- a/src/translations/pavucontrol-qt_tr.ts +++ /dev/null @@ -1,740 +0,0 @@ - - - - - CardWidget - - - Form - Form - - - - Card Name - Kart Adı - - - - Profile: - Profil: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() başarısız oldu - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2dB) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Sessiz</small> - - - - <small>Min</small> - <small>En az</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>Temel</i></small> - - - - ChannelWidget - - - Form - Form - - - - <b>left-front</b> - <b>sol-ön</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Form - - - - Device Title - Aygıt Başlığı - - - - Mute audio - Sesi kapat - - - - Lock channels together - Kanalları birlikte kilitle - - - - Set as fallback - Geri dönüş olarak ayarla - - - - <b>Port:</b> - <b>Bağlantı Noktası:</b> - - - - Show advanced options - Gelişmiş seçenekleri göster - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Gecikme süresi:</b> - - - - ms - ms - - - - Rename device... - Aygıtı yeniden adlandır... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() başarısız oldu - - - - Sorry, but device renaming is not supported. - Üzgünüm, aygıtı yeniden adlandırma desteklenmiyor. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Aygıtları yeniden adlandırmak için PulseAudio sunucusuna modül-aygıt-yöneticisi yüklemeniz gerekir - - - - Rename device %1 to: - %1 aygıtını yeniden adlandır: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() başarısız oldu - - - - MainWindow - - - Volume Control - Ses Denetimi - - - - &Playback - Ça&lma - - - - <i>No application is currently playing audio.</i> - <i>Şu anda hiçbir uygulama ses çalmıyor.</i> - - - - - - - Show: - Göster: - - - - - All Streams - Tüm Akışlar - - - - - Applications - Uygulamalar - - - - - Virtual Streams - Sanal Akışlar - - - - &Recording - &Kayıt - - - - <i>No application is currently recording audio.</i> - <i>Şu anda hiçbir uygulama ses kaydetmiyor.</i> - - - - &Output Devices - Çı&kış Aygıtları - - - - <i>No output devices available</i> - <i>Çıkış aygıtı bulunamadı</i> - - - - All Output Devices - Tüm Çıkış Aygıtları - - - - Hardware Output Devices - Donanım Çıkış Aygıtları - - - - Virtual Output Devices - Sanal Çıkış Aygıtları - - - - &Input Devices - &Giriş Aygıtları - - - - <i>No input devices available</i> - <i>Giriş aygıtı bulunamadı</i> - - - - All Input Devices - Tüm Giriş Aygıtları - - - - All Except Monitors - Monitörler Hariç - - - - Hardware Input Devices - Donanım Giriş Aygıtları - - - - Virtual Input Devices - Sanal Giriş Aygıtları - - - - Monitors - Monitörler - - - - &Configuration - &Yapılandırma - - - - <i>No cards available for configuration</i> - <i>Yapılandırma için kart yok</i> - - - - Show volume meters - Ses ölçeri göster - - - - ... - ... - - - - (plugged in) - (takıldı) - - - - - (unavailable) - (kullanım dışı) - - - - - (unplugged) - (çıkartıldı) - - - - Failed to read data from stream - Ses akışından veri okunamıyor - - - - Peak detect - Tepe noktası tespiti - - - - Failed to create monitoring stream - Monitör akışı oluşturulamadı - - - - Failed to connect monitoring stream - Monitör akışına bağlanılamadı - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Olay olarak tanımlanması ve dolayısıyla Etkinlik widget'ı tarafından işlenmesi nedeniyle sink-girişi yok sayılyor - - - - System Sounds - Sistem Sesleri - - - - Establishing connection to PulseAudio. Please wait... - PulseAudio ile bağlantı kuruluyor. Lütfen bekleyin... - - - - QObject - - - Error - Hata - - - - Card callback failure - Kart geri çağırma hatası - - - - Sink callback failure - Sink geri çağırma hatası - - - - Source callback failure - Kaynak geri çağırma hatası - - - - Sink input callback failure - Sink girdisi geri çağırma hatası - - - - Source output callback failure - Kaynak çıktısı geri çağırma hatası - - - - Client callback failure - İstemci geri çağırma hatası - - - - Server info callback failure - Sunucu bilgisi geri çağırma hatası - - - - - Failed to initialize stream_restore extension: %s - stream_restore eklentisi başlatılamadı: %s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() başarısız oldu - - - - - Failed to initialize device restore extension: %s - Aygıt geri yükleme eklentisi başlatılamadı: %s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() başarısız oldu - - - - - Failed to initialize device manager extension: %s - Aygıt yönetici eklentisi başlatılamadı: %s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() başarısız oldu - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() başarısız oldu - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() başarısız oldu - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() başarısız oldu - - - - pa_context_get_client_info() failed - pa_context_get_client_info() başarısız oldu - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() başarısız oldu - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() başarısız oldu - - - - pa_context_subscribe() failed - pa_context_subscribe() başarısız oldu - - - - pa_context_client_info_list() failed - pa_context_client_info_list() başarısız oldu - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() başarısız oldu - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() başarısız oldu - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() başarısız oldu - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() başarısız oldu - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() başarısız oldu - - - - - Connection failed, attempting reconnect - Bağlantı başarısız oldu, yeniden bağlanılıyor - - - - - PulseAudio Volume Control - PulseAudio Ses Denetimi - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - PulseAudio'ya bağlanılamadı. 5 sn.'de bir otomatik denenecek - -Bunun nedeni Ortam/X11 Kök Pencere Özelliklerinde PULSE_SERVER'ın seçilmiş olması veya -client.conf içindeki varsayılan sunucunun yanlış yapılandırılmasıdır. -Bu durum, PulseAudio çöktüğünde ve X11 Kök Penceresinde bozuk detaylarını bıraktığı zaman -da ortaya çıkabilir. -Bu durumda, PulseAudio tekrar durdurulmalı veya yapılandırılmamışsa, start-pulseaudio-x11'i -kendiniz çalıştırmalısınız. - - - - Select a specific tab on load. - Yüklemede belirli bir sekme seçin. - - - - Retry forever if pa quits (every 5 seconds). - Eğer durursa sonsuza kadar tekrarla (her 5 sn.'de bir). - - - - Maximize the window. - Pencereyi büyüt. - - - - Fatal Error: Unable to connect to PulseAudio - Ölümcül Hata: PulseAudio'ya bağlanılamadı - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() başarısız oldu - - - - SinkInputWidget - - - on - açık - - - - Terminate Playback - Oynatmayı Sonlandır - - - - Unknown output - Bilinmeyen çıktı - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() başarısız oldu - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() başarısız oldu - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() başarısız oldu - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() başarısız oldu - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() başarısız oldu - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() başarısız oldu - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() başarısız oldu - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() başarısız oldu - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() başarısız oldu - - - - SourceOutputWidget - - - from - şuradan - - - - Terminate Recording - Kaydı Sonlandır - - - - Unknown input - Bilinmeyen girdi - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() başarısız oldu - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() başarısız oldu - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() başarısız oldu - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() başarısız oldu - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() başarısız oldu - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() başarısız oldu - - - - pa_context_set_default_source() failed - pa_context_set_default_source() başarısız oldu - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() başarısız oldu - - - - StreamWidget - - - Form - Form - - - - Device Title - Aygıt Başlığı - - - - direction - yön - - - - device - aygıt - - - - Mute audio - Sessiz - - - - Lock channels together - Kanalları birlikte kilitle - - - - Terminate - Sonlandır - - - diff --git a/src/translations/pavucontrol-qt_uk.desktop.yaml b/src/translations/pavucontrol-qt_uk.desktop.yaml deleted file mode 100644 index 6cc112a..0000000 --- a/src/translations/pavucontrol-qt_uk.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Керування гучністю PulseAudio" -Desktop Entry/GenericName: "Керування гучністю" -Desktop Entry/Comment: "Налаштувати рівень гучності" diff --git a/src/translations/pavucontrol-qt_uk.ts b/src/translations/pavucontrol-qt_uk.ts deleted file mode 100644 index 5f95755..0000000 --- a/src/translations/pavucontrol-qt_uk.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - Форма - - - - Card Name - Назва карти - - - - Profile: - Профіль: - - - - pa_context_set_card_profile_by_index() failed - Спроба виконання pa_context_set_card_profile_by_index() була невдалою - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - %1% (%2дБ) - - - - %1% - volume slider label [X%] - %1% - - - - <small>Silence</small> - <small>Тиша</small> - - - - <small>Min</small> - <small>Мін.</small> - - - - <small>100% (0dB)</small> - <small>100% (0дБ)</small> - - - - <small><i>Base</i></small> - <small><i>Основний</i></small> - - - - ChannelWidget - - - Form - Форма - - - - <b>left-front</b> - <b>лівий передній</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - Форма - - - - Device Title - Назва пристрою - - - - Mute audio - Заглушити звук - - - - Lock channels together - Пов'язати канали разом - - - - Set as fallback - Встановити запасним - - - - <b>Port:</b> - <b>Порт:</b> - - - - Show advanced options - Показати розширені параметри - - - - PCM - PCM - - - - AC3 - AC3 - - - - EAC3 - EAC3 - - - - DTS - DTS - - - - MPEG - MPEG - - - - AAC - AAC - - - - <b>Latency offset:</b> - <b>Затримка зсуву:</b> - - - - ms - мс - - - - Rename device... - Перейменувати пристрій... - - - - pa_context_set_port_latency_offset() failed - Спроба виконання pa_context_set_port_latency_offset() була невдалою - - - - Sorry, but device renaming is not supported. - Вибачте, але перейменування пристрою не підтримується. - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - Вам потрібно завантажити module-device-manager на сервері PulseAudio, щоб мати змогу перейменовувати пристрої - - - - Rename device %1 to: - Перейменувати пристрій %1 на: - - - - pa_ext_device_manager_set_device_description() failed - Збій pa_ext_device_manager_set_device_description() - - - - MainWindow - - - Volume Control - Керування гучністю - - - - &Playback - В&ідтворення - - - - <i>No application is currently playing audio.</i> - <i>Жодна з програм не відтворює звукових даних.</i> - - - - - - - Show: - Показ: - - - - - All Streams - Всі потоки - - - - - Applications - Програми - - - - - Virtual Streams - Віртуальні потоки - - - - &Recording - &Запис - - - - <i>No application is currently recording audio.</i> - <i>Жодна з програм не виконує запису звукових даних.</i> - - - - &Output Devices - Пристрої &відтворення - - - - <i>No output devices available</i> - <i>Пристроїв відтворення звукових даних не знайдено</i> - - - - All Output Devices - Всі пристрої виводу - - - - Hardware Output Devices - Фізичні пристрої виводу - - - - Virtual Output Devices - Віртуальні пристрої виводу - - - - &Input Devices - Пристрої &вводу - - - - <i>No input devices available</i> - <i>Пристроїв вводу не знайдено</i> - - - - All Input Devices - Всі пристрої вводу - - - - All Except Monitors - Всі крім моніторів - - - - Hardware Input Devices - Фізичні пристрої вводу - - - - Virtual Input Devices - Віртуальні пристрої вводу - - - - Monitors - Монітори - - - - &Configuration - &Налаштування - - - - <i>No cards available for configuration</i> - <i>Карток для налаштування не знайдено</i> - - - - Show volume meters - Показати вимірювання гучності - - - - ... - ... - - - - (plugged in) - (під'єднано) - - - - - (unavailable) - (недоступно) - - - - - (unplugged) - (від'єднано) - - - - Failed to read data from stream - Спроба читання даних з потоку була невдалою - - - - Peak detect - Визначення максимумів - - - - Failed to create monitoring stream - Не вдалося створити потік для спостереження - - - - Failed to connect monitoring stream - Не вдалося з’єднатися з потоком для спостереження - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - Нехтування вхідним сигналом, оскільки його визначено подією та оброблено віджетом події - - - - System Sounds - Системні звуки - - - - Establishing connection to PulseAudio. Please wait... - Встановлено з'єднання з PulseAudio. Зачекайте, будь ласка... - - - - QObject - - - Error - Помилка - - - - Card callback failure - Спроба зворотного виклику карти зазнала невдачі - - - - Sink callback failure - Спроба зворотного виклику приймача зазнала невдачі - - - - Source callback failure - Спроба зворотного виклику джерела зазнала невдачі - - - - Sink input callback failure - Спроба зворотного виклику потоку отримання приймача зазнала невдачі - - - - Source output callback failure - Спроба зворотного виклику потоку відтворення джерела зазнала невдачі - - - - Client callback failure - Спроба зворотного виклику клієнта зазнала невдачі - - - - Server info callback failure - Спроба зворотного виклику даних сервера зазнала невдачі - - - - - Failed to initialize stream_restore extension: %s - Не вдалося ініціалізувати розширення stream_restore : %s - - - - pa_ext_stream_restore_read() failed - Спроба виконати pa_ext_stream_restore_read() зазнала невдачі - - - - - Failed to initialize device restore extension: %s - Не вдалося ініціалізувати розширення відновлення пристрою : %s - - - - pa_ext_device_restore_read_sink_formats() failed - Спроба виконати pa_ext_device_restore_read_sink_formats() зазнала невдачі - - - - - Failed to initialize device manager extension: %s - Не вдалося ініціалізувати розширення керуванням пристрою : %s - - - - pa_ext_device_manager_read() failed - Спроба виконання pa_ext_device_manager_read() була невдалою - - - - pa_context_get_sink_info_by_index() failed - Спроба виконати pa_context_get_sink_info_by_index() зазнала невдачі - - - - pa_context_get_source_info_by_index() failed - Спроба виконати pa_context_get_source_info_by_index() зазнала невдачі - - - - - pa_context_get_sink_input_info() failed - Спроба виконати pa_context_get_sink_input_info() зазнала невдачі - - - - pa_context_get_client_info() failed - Спроба виконати pa_context_get_client_info() зазнала невдачі - - - - - pa_context_get_server_info() failed - Спроба виконати pa_context_get_server_info() зазнала невдачі - - - - pa_context_get_card_info_by_index() failed - Спроба виконати pa_context_get_card_info_by_index() зазнала невдачі - - - - pa_context_subscribe() failed - Спроба виконати pa_context_subscribe() зазнала невдачі - - - - pa_context_client_info_list() failed - Спроба виконати pa_context_client_info_list() зазнала невдачі - - - - pa_context_get_card_info_list() failed - Спроба виконати pa_context_get_card_info_list() зазнала невдачі - - - - pa_context_get_sink_info_list() failed - Спроба виконати pa_context_get_sink_info_list() зазнала невдачі - - - - pa_context_get_source_info_list() failed - Спроба виконати pa_context_get_source_info_list() зазнала невдачі - - - - pa_context_get_sink_input_info_list() failed - Спроба виконати pa_context_get_sink_input_info_list() зазнала невдачі - - - - pa_context_get_source_output_info_list() failed - Спроба виконати pa_context_get_source_output_info_list() зазнала невдачі - - - - - Connection failed, attempting reconnect - Зв'язок втрачено, спроба зв'язатися знову - - - - - PulseAudio Volume Control - Керування гучністю PulseAudio - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - З'єднання з PulseAudio втрачено. Автоматична спроба зв'язку через 5с - -Схоже це спричинено неправильними властивостями PULSE_SERVER у кореневому вікні Environment/X11 -або default-server у client.conf неправильно налаштовано. -Ця ситуація також може виникнути, коли стається збій PulseAudio і залишаються застарілі деталі в корінному вікні X11. -Якщо це так, то PulseAudio повинен знову автоматично запуститися, або якщо це не налаштовано, вам слід -запустити start-pulseaudio-x11 власноруч. - - - - Select a specific tab on load. - Вибрати специфічну вкладку при завантаженні. - - - - Retry forever if pa quits (every 5 seconds). - Пробувати знову, якщо PulseAudio завершиться (кожні 5 секунд). - - - - Maximize the window. - Максималізувати вікно. - - - - Fatal Error: Unable to connect to PulseAudio - Фатальна помилка: Неможливо зв'язатися з PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - Спроба виконання pa_ext_stream_restore_write() була невдалою - - - - SinkInputWidget - - - on - на - - - - Terminate Playback - Завершити відтворення - - - - Unknown output - Невідомий пристрій відтворення - - - - pa_context_set_sink_input_volume() failed - Спроба виконання pa_context_set_sink_input_volume() була невдалою - - - - pa_context_set_sink_input_mute() failed - Спроба виконання pa_context_set_sink_input_mute() була невдалою - - - - pa_context_kill_sink_input() failed - Спроба виконання pa_context_kill_sink_input() була невдалою - - - - pa_context_move_sink_input_by_index() failed - Спроба виконання pa_context_move_sink_input_by_index() була невдалою - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - Спроба виконання pa_context_set_sink_volume_by_index() була невдалою - - - - pa_context_set_sink_mute_by_index() failed - Спроба виконання pa_context_set_sink_mute_by_index() була невдалою - - - - pa_context_set_default_sink() failed - Спроба виконання pa_context_set_default_sink() була невдалою - - - - pa_context_set_sink_port_by_index() failed - Спроба виконання pa_context_set_sink_port_by_index() була невдалою - - - - pa_ext_device_restore_save_sink_formats() failed - Спроба виконати pa_ext_device_restore_save_sink_formats() зазнала невдачі - - - - SourceOutputWidget - - - from - з - - - - Terminate Recording - Завершити запис - - - - Unknown input - Невідоме джерело даних - - - - pa_context_set_source_output_volume() failed - Спроба виконання pa_context_set_source_output_volume() була невдалою - - - - pa_context_set_source_output_mute() failed - Спроба виконання pa_context_set_source_output_mute() була невдалою - - - - pa_context_kill_source_output() failed - Спроба виконання pa_context_kill_source_output() була невдалою - - - - pa_context_move_source_output_by_index() failed - Спроба виконання pa_context_move_source_output_by_index() була невдалою - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - Спроба виконання pa_context_set_source_volume_by_index() була невдалою - - - - pa_context_set_source_mute_by_index() failed - Спроба виконання pa_context_set_source_mute_by_index() була невдалою - - - - pa_context_set_default_source() failed - Спроба виконання pa_context_set_default_source() була невдалою - - - - pa_context_set_source_port_by_index() failed - Спроба виконання pa_context_set_source_port_by_index() була невдалою - - - - StreamWidget - - - Form - Форма - - - - Device Title - Назва пристрою - - - - direction - напрямок - - - - device - пристрій - - - - Mute audio - Заглушити звук - - - - Lock channels together - Пов'язати канали разом - - - - Terminate - Перервати відтворення - - - diff --git a/src/translations/pavucontrol-qt_vi.desktop.yaml b/src/translations/pavucontrol-qt_vi.desktop.yaml deleted file mode 100644 index 54f71d7..0000000 --- a/src/translations/pavucontrol-qt_vi.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "Điều khiển Âm lượng PulseAudio" -Desktop Entry/GenericName: "Điều khiển Âm lượng" -Desktop Entry/Comment: "Chỉnh mức âm lượng" diff --git a/src/translations/pavucontrol-qt_zh_CN.desktop.yaml b/src/translations/pavucontrol-qt_zh_CN.desktop.yaml deleted file mode 100644 index cb86c35..0000000 --- a/src/translations/pavucontrol-qt_zh_CN.desktop.yaml +++ /dev/null @@ -1,3 +0,0 @@ -Desktop Entry/Name: "PulseAudio 音量控制" -Desktop Entry/GenericName: "音量控制" -Desktop Entry/Comment: "调整音量" diff --git a/src/translations/pavucontrol-qt_zh_CN.ts b/src/translations/pavucontrol-qt_zh_CN.ts deleted file mode 100644 index bd00fc4..0000000 --- a/src/translations/pavucontrol-qt_zh_CN.ts +++ /dev/null @@ -1,737 +0,0 @@ - - - - - CardWidget - - - Form - 形式 - - - - Card Name - 声卡名称 - - - - Profile: - 配置方案: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() 失败 - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>安静</small> - - - - <small>Min</small> - <small>最小</small> - - - - <small>100% (0dB)</small> - <small>100% (0dB)</small> - - - - <small><i>Base</i></small> - <small><i>基本</i></small> - - - - ChannelWidget - - - Form - 表单 - - - - <b>left-front</b> - <b>左前</b> - - - - <small>50%</small> - <small>50%</small> - - - - DeviceWidget - - - Form - 表单形式 - - - - Device Title - 设备标题 - - - - Mute audio - 静音 - - - - Lock channels together - 同时锁定全部声道 - - - - Set as fallback - 设置为回退 - - - - <b>Port:</b> - <b>端口:</b> - - - - Show advanced options - 显示高级选项 - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>延迟偏移:</b> - - - - ms - - - - - Rename device... - 重命名设备... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() 失败 - - - - Sorry, but device renaming is not supported. - 抱歉,不支持设备重命名。 - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - 要重命名设备,您需要在 PulseAudio 服务中加载模块设备管理器 - - - - Rename device %1 to: - 重命名设备 %1 为: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() 失败 - - - - MainWindow - - - Volume Control - 音量控制 - - - - &Playback - 回放(&P) - - - - <i>No application is currently playing audio.</i> - <i>没有程序正在播放音频。</i> - - - - - - - Show: - 显示: - - - - - All Streams - 所有流 - - - - - Applications - 应用程序 - - - - - Virtual Streams - 虚拟流 - - - - &Recording - 录音(&R) - - - - <i>No application is currently recording audio.</i> - <i>没有程序正在录音。</i> - - - - &Output Devices - 输出设备(&O) - - - - <i>No output devices available</i> - <i>无可用的输出设备</i> - - - - All Output Devices - 所有输出设备 - - - - Hardware Output Devices - 硬件输出设备 - - - - Virtual Output Devices - 虚拟输出设备 - - - - &Input Devices - 输入设备(&I) - - - - <i>No input devices available</i> - <i>无可用的输入设备</i> - - - - All Input Devices - 所有输入设备 - - - - All Except Monitors - 除监听外的全部 - - - - Hardware Input Devices - 硬件输入设备 - - - - Virtual Input Devices - 虚拟输入设备 - - - - Monitors - 监听 - - - - &Configuration - 配置(&C) - - - - <i>No cards available for configuration</i> - <i>无声卡可配置</i> - - - - Show volume meters - 显示音量表 - - - - ... - - - - - (plugged in) - (已插入) - - - - - (unavailable) - (不可用) - - - - - (unplugged) - (已拔出) - - - - Failed to read data from stream - 无法从流媒体中读取数据 - - - - Peak detect - 尖峰探测 - - - - Failed to create monitoring stream - 无法创建监听流 - - - - Failed to connect monitoring stream - 无法连接到监听流 - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - 忽略漏级输入,因为它被设计为事件,且由事件小部件掌管 - - - - System Sounds - 系统声音 - - - - Establishing connection to PulseAudio. Please wait... - 正在与 PulseAudio 建立连接,请稍候…… - - - - QObject - - - Error - 错误 - - - - Card callback failure - 声卡回调失败 - - - - Sink callback failure - Sink 回调失败 - - - - Source callback failure - 源回调失败 - - - - Sink input callback failure - Sink 输入回调失败 - - - - Source output callback failure - 源输出回调失败 - - - - Client callback failure - 客户端回调失败 - - - - Server info callback failure - 服务器信息回调失败 - - - - - Failed to initialize stream_restore extension: %s - 无法初始化 stream_restore 扩展:%s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() 失败 - - - - - Failed to initialize device restore extension: %s - 初始化设备恢复扩展失败:%s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() 失败 - - - - - Failed to initialize device manager extension: %s - 初始化设备管理器扩展失败:%s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() 失败 - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() 失败 - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() 失败 - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() 失败 - - - - pa_context_get_client_info() failed - pa_context_get_client_info() 失败 - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() 失败 - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() 失败 - - - - pa_context_subscribe() failed - pa_context_subscribe() 失败 - - - - pa_context_client_info_list() failed - pa_context_client_info_list() 失败 - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() 失败 - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() 失败 - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() 失败 - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() 失败 - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() 失败 - - - - - Connection failed, attempting reconnect - 连接失败,尝试重新连接 - - - - - PulseAudio Volume Control - PulseAudio 音量控制 - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - 连接 PulseAudio 失败。5秒内自动重试 - -出现这种情况可能是因为 X11 根窗口属性中的 PULSE_SERVER 或者 client.conf 中的默认服务器配置不当。 -这种情况也有可能在 PulseAudio 崩溃并在 X11 根窗口中留下陈旧明细时出现。 -若如此,则 PulseAudio 应自动重启,否则您应手动运行 start-pulseaudio-x11 manually。 - - - - Select a specific tab on load. - 选择加载特定标签。 - - - - Retry forever if pa quits (every 5 seconds). - 如果 pa 退出,永远尝试(每 5 秒)。 - - - - Maximize the window. - 最大化窗口。 - - - - Fatal Error: Unable to connect to PulseAudio - 严重错误:无法连接到 PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() 失败 - - - - SinkInputWidget - - - on - 输出到 - - - - Terminate Playback - 结束回放 - - - - Unknown output - 未知输出 - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() 失败 - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() 失败 - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() 失败 - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() 失败 - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() 失败 - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() 失败 - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() 失败 - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_mute_by_index() 失败 - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() 失败 - - - - SourceOutputWidget - - - from - 源自 - - - - Terminate Recording - 结束录音 - - - - Unknown input - 未知输出 - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() 失败 - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() 失败 - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() 失败 - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() 失败 - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() 失败 - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() 失败 - - - - pa_context_set_default_source() failed - pa_context_set_default_source() 失败 - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_mute_by_index() 失败 - - - - StreamWidget - - - Form - 形式 - - - - Device Title - 设备标题 - - - - direction - 方向 - - - - device - 设备 - - - - Mute audio - 静音 - - - - Lock channels together - 同时设置声道 - - - - Terminate - 结束 - - - diff --git a/src/translations/pavucontrol-qt_zh_TW.ts b/src/translations/pavucontrol-qt_zh_TW.ts deleted file mode 100644 index 50072d2..0000000 --- a/src/translations/pavucontrol-qt_zh_TW.ts +++ /dev/null @@ -1,739 +0,0 @@ - - - - - CardWidget - - - Form - 表單 - - - - Card Name - 音效卡名稱 - - - - Profile: - 組態: - - - - pa_context_set_card_profile_by_index() failed - pa_context_set_card_profile_by_index() 失敗 - - - - Channel - - - %1% (%2dB) - volume slider label [X% (YdB)] - - - - - %1% - volume slider label [X%] - - - - - <small>Silence</small> - <small>無聲</small> - - - - <small>Min</small> - <small>最小</small> - - - - <small>100% (0dB)</small> - - - - - <small><i>Base</i></small> - <small><i>基準</i></small> - - - - ChannelWidget - - - Form - 表單 - - - - <b>left-front</b> - <b>左前</b> - - - - <small>50%</small> - - - - - DeviceWidget - - - Form - 表單 - - - - Device Title - 裝置標題 - - - - Mute audio - 靜音 - - - - Lock channels together - 同時鎖定兩聲道 - - - - Set as fallback - 設為預設 - - - - <b>Port:</b> - <b>埠:</b> - - - - Show advanced options - 顯示進階選項 - - - - PCM - - - - - AC3 - - - - - EAC3 - - - - - DTS - - - - - MPEG - - - - - AAC - - - - - <b>Latency offset:</b> - <b>延遲偏移:</b> - - - - ms - 毫秒 - - - - Rename device... - 重新命名裝置... - - - - pa_context_set_port_latency_offset() failed - pa_context_set_port_latency_offset() 失敗 - - - - Sorry, but device renaming is not supported. - 抱歉,不支援裝置重新命名。 - - - - You need to load module-device-manager in the PulseAudio server in order to rename devices - 為了重新命名裝置,你需要在 PulseAudio 伺服器運行模組裝置管理員 - - - - Rename device %1 to: - 重新命名裝置 %1 為: - - - - pa_ext_device_manager_set_device_description() failed - pa_ext_device_manager_set_device_description() 失敗 - - - - MainWindow - - - Volume Control - 音量控制 - - - - <i>No application is currently playing audio.</i> - <i>現在沒有應用程式在播放音訊。</i> - - - - - - - Show: - 顯示: - - - - - All Streams - 所有串流 - - - - - Applications - 應用程式 - - - - - Virtual Streams - 虛擬串流 - - - - <i>No application is currently recording audio.</i> - <i>現在沒有應用程式在錄音。</i> - - - - <i>No output devices available</i> - <i>沒有可用的輸出裝置</i> - - - - All Output Devices - 全部輸出裝置 - - - - Hardware Output Devices - 硬體輸出裝置 - - - - Virtual Output Devices - 虛擬輸出裝置 - - - - &Playback - 播放 (&P) - - - - &Recording - 錄音 (&R) - - - - &Output Devices - 輸出裝置 (&O) - - - - &Input Devices - 輸入裝置 (&I) - - - - <i>No input devices available</i> - <i>沒有可用的輸入裝置</i> - - - - All Input Devices - 全部輸入裝置 - - - - All Except Monitors - 除顯示器外全部 - - - - Hardware Input Devices - 硬體輸入裝置 - - - - Virtual Input Devices - 虛擬輸入裝置 - - - - Monitors - 顯示器 - - - - &Configuration - 配置 (&C) - - - - <i>No cards available for configuration</i> - <i>沒有可配置的音效卡</i> - - - - Show volume meters - 顯示音量表 - - - - ... - - - - - (plugged in) - (插入) - - - - - (unavailable) - (不可用) - - - - - (unplugged) - (移除) - - - - Failed to read data from stream - 無法從串流讀取資料 - - - - Peak detect - 峰值偵測 - - - - Failed to create monitoring stream - 無法新增監控串流 - - - - Failed to connect monitoring stream - 無法連結監控串流 - - - - Ignoring sink-input due to it being designated as an event and thus handled by the Event widget - 忽略sink-input,由於它被設計為事件,因此歸「事件小工具」處理 - - - - System Sounds - 系統音效 - - - - Establishing connection to PulseAudio. Please wait... - 與PulseAudio建立連線中。請稍後... - - - - QObject - - - Error - 錯誤 - - - - Card callback failure - 音效卡回調失敗 - - - - Sink callback failure - Sink回調失敗 - - - - Source callback failure - Source回調失敗 - - - - Sink input callback failure - Sink輸入回調失敗 - - - - Source output callback failure - Source輸出回調失敗 - - - - Client callback failure - 客戶端回調失敗 - - - - Server info callback failure - 伺服器資訊回調失敗 - - - - - Failed to initialize stream_restore extension: %s - 無法初始化「串流復原」擴充套件:%s - - - - pa_ext_stream_restore_read() failed - pa_ext_stream_restore_read() 失敗 - - - - - Failed to initialize device restore extension: %s - 無法初始化「裝置復原」擴充套件:%s - - - - pa_ext_device_restore_read_sink_formats() failed - pa_ext_device_restore_read_sink_formats() 失敗 - - - - - Failed to initialize device manager extension: %s - 無法初始化「裝置管理員」擴充套件:%s - - - - pa_ext_device_manager_read() failed - pa_ext_device_manager_read() 失敗 - - - - pa_context_get_sink_info_by_index() failed - pa_context_get_sink_info_by_index() 失敗 - - - - pa_context_get_source_info_by_index() failed - pa_context_get_source_info_by_index() 失敗 - - - - - pa_context_get_sink_input_info() failed - pa_context_get_sink_input_info() 失敗 - - - - pa_context_get_client_info() failed - pa_context_get_client_info() 失敗 - - - - - pa_context_get_server_info() failed - pa_context_get_server_info() 失敗 - - - - pa_context_get_card_info_by_index() failed - pa_context_get_card_info_by_index() 失敗 - - - - pa_context_subscribe() failed - pa_context_subscribe() 失敗 - - - - pa_context_client_info_list() failed - pa_context_client_info_list() 失敗 - - - - pa_context_get_card_info_list() failed - pa_context_get_card_info_list() 失敗 - - - - pa_context_get_sink_info_list() failed - pa_context_get_sink_info_list() 失敗 - - - - pa_context_get_source_info_list() failed - pa_context_get_source_info_list() 失敗 - - - - pa_context_get_sink_input_info_list() failed - pa_context_get_sink_input_info_list() 失敗 - - - - pa_context_get_source_output_info_list() failed - pa_context_get_source_output_info_list() 失敗 - - - - - Connection failed, attempting reconnect - 連接失敗,嘗試重新連接 - - - - - PulseAudio Volume Control - PulseAudio音量控制 - - - - Connection to PulseAudio failed. Automatic retry in 5s - -In this case this is likely because PULSE_SERVER in the Environment/X11 Root Window Properties -or default-server in client.conf is misconfigured. -This situation can also arrise when PulseAudio crashed and left stale details in the X11 Root Window. -If this is the case, then PulseAudio should autospawn again, or if this is not configured you should -run start-pulseaudio-x11 manually. - 連接PulseAudio失敗,在5秒內自動重試 - -這個情況像是因為環境/X11主視窗內容的PULSE_SERVER -或是client.conf的default-server被配置錯誤。 -這個情況也可能發生在PulseAudio意外中止時,在X11主視窗遺留舊的詳細資訊。 -若是上述的情況,PulseAudio必須要再次autospawn,又或是這沒有被配置,你應該 -手動啟動start-pulseaudio-x11。 - - - - Select a specific tab on load. - 在負載上選擇一個指定的分頁。 - - - - Retry forever if pa quits (every 5 seconds). - 如果pa離開時永遠嘗試重啟 (每5秒)。 - - - - Maximize the window. - 最大化視窗。 - - - - Fatal Error: Unable to connect to PulseAudio - 致命錯誤:無法連接到PulseAudio - - - - RoleWidget - - - pa_ext_stream_restore_write() failed - pa_ext_stream_restore_write() 失敗 - - - - SinkInputWidget - - - on - 開啟 - - - - Terminate Playback - 中止播放 - - - - Unknown output - 未知輸出 - - - - pa_context_set_sink_input_volume() failed - pa_context_set_sink_input_volume() 失敗 - - - - pa_context_set_sink_input_mute() failed - pa_context_set_sink_input_mute() 失敗 - - - - pa_context_kill_sink_input() failed - pa_context_kill_sink_input() 失敗 - - - - pa_context_move_sink_input_by_index() failed - pa_context_move_sink_input_by_index() 失敗 - - - - SinkWidget - - - pa_context_set_sink_volume_by_index() failed - pa_context_set_sink_volume_by_index() 失敗 - - - - pa_context_set_sink_mute_by_index() failed - pa_context_set_sink_mute_by_index() 失敗 - - - - pa_context_set_default_sink() failed - pa_context_set_default_sink() 失敗 - - - - pa_context_set_sink_port_by_index() failed - pa_context_set_sink_port_by_index() 失敗 - - - - pa_ext_device_restore_save_sink_formats() failed - pa_ext_device_restore_save_sink_formats() 失敗 - - - - SourceOutputWidget - - - from - 來自 - - - - Terminate Recording - 中止錄製 - - - - Unknown input - 未知輸入 - - - - pa_context_set_source_output_volume() failed - pa_context_set_source_output_volume() 失敗 - - - - pa_context_set_source_output_mute() failed - pa_context_set_source_output_mute() 失敗 - - - - pa_context_kill_source_output() failed - pa_context_kill_source_output() 失敗 - - - - pa_context_move_source_output_by_index() failed - pa_context_move_source_output_by_index() 失敗 - - - - SourceWidget - - - pa_context_set_source_volume_by_index() failed - pa_context_set_source_volume_by_index() 失敗 - - - - pa_context_set_source_mute_by_index() failed - pa_context_set_source_mute_by_index() 失敗 - - - - pa_context_set_default_source() failed - pa_context_set_default_source() 失敗 - - - - pa_context_set_source_port_by_index() failed - pa_context_set_source_port_by_index() 失敗 - - - - StreamWidget - - - Form - 表單 - - - - Device Title - 裝置標題 - - - - direction - 方向 - - - - device - 裝置 - - - - Mute audio - 靜音 - - - - Lock channels together - 同時鎖定兩聲道 - - - - Terminate - 中止 - - - -- cgit v1.2.3-55-g7522