Compare commits

..

13 commits

Author SHA1 Message Date
Arun Raghavan
8f839526a5 Update NEWS for 16.2 2024-11-01 22:13:42 -04:00
flyingOwl
566849c4af time-smoother-2: Fix time calculation by comparing timestamps
This fixes the rare case of resume_time being bigger than time_stamp. Which
happens sometimes when a gstreamer client is quickly seeking through a
media file. The resulting integer underflow then causes a huge value in
current_time which will break the playback.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/764>
2024-09-17 08:40:56 -04:00
Arun Raghavan
0647fcb622 tests: Don't run volume tests with impossible alignments
This worked so far somehow, but we were sending in some samples at
unrealistic alignments (given that pa_memblockq will be frame-aligned,
and we expect all operations to occur per-frame as well).

Fixes: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/3803
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/812>
2024-09-13 12:38:21 -04:00
Igor V. Kovalenko
9a428e4c50 Fix crash running in restricted environment.
When `pwd.h` header is not available (i.e. not using glibc) and environment
variables are not set (e.g. running via `env --ignore-environment`) client
library would crash due to uninitialized variable in `pa_get_home_dir()`.
Add missing initialization to fix that.

Fixes: #3792
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/800>
2024-09-13 12:38:21 -04:00
Igor V. Kovalenko
a8b28d86cd shell-completion: Fix typo in --use-pid-file= suggestion
Fixes #3786

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/799>
2024-09-13 12:38:21 -04:00
Igor V. Kovalenko
f2836dc6b6 rtp: Accept CRLF delimiters in SDP as required by RFC 4566
RFC 4566 states that SDP record is terminated with CRLF, and parsers should be
able to accept records terminated with just LF. Pulseaudio only accepts LF here.

Fix this by accepting both CRLF and LF terminators.
2024-09-13 12:38:21 -04:00
Georg Chini
686ae9c696 time-smoother-2: Fix stream time when stream starts paused
When a stream is started but has not yet called smoother_2_put(), pa_smoother_2_get()
returns the time since the start of the stream even if the stream was started paused.
When the stream is started paused, pa_smoother_2_get() should return 0 instead. This
patch fixes the problem.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/745>
2024-09-13 12:33:02 -04:00
Tanu Kaskinen
e5ad31e873 Update NEWS for 16.1
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/727>
2022-06-21 13:54:48 +03:00
Jan Palus
e4d54dae91 bluetooth/gst: Correct var type for GST_TYPE_BITMASK
GST_TYPE_BITMASK is 64-bit bit mask while corresponding channel_mask in
pulseaudio is int therefore usually 32-bit. Switch to uint64_t instead
to match internal representation in gstreamer.

Fixes pulseaudio crash on ARM 32-bit when pulseaudio is compiled with
gstreamer and either LDAC or aptX support is available.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/723>
2022-06-20 14:02:29 +03:00
Georg Chini
0e896eb518 combine-sink: Fix threading issue during underrun
A recent commit added i->origin sink for the sink inputs of the combine sinks.
Therefore pa_sink_process_input_underruns() treated the combine sink like
filter sinks. pa_sink_process_input_underruns() calls itself with the
origin sink, which is only correct for filter sinks because they run in the
thread context of the origin sink. The combine sink however has its own
thread context, so pa_sink_process_input_underruns() was executed in the
wrong context.
This patch fixes the issue by skipping the section for module-combine-sink.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/722>
2022-06-20 14:02:15 +03:00
Igor V. Kovalenko
ca8c5242eb rtp: Initialize SDP info struct field added for OPUS
Turned out that pa_sdp_info::enable_opus is never initialized, which seldom
makes module-rtp-recv believe it will be playing OPUS-encoded stream even though
discovered SDP record does not indicate OPUS codec in metadata.

Fix this by adding missing initializer.

Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/720>
2022-06-20 14:01:56 +03:00
Jaechul Lee
437cfe4630 sound-file-stream: Fix crash when playing a file which is not aligned
pulseaudio crash occurred when I play a file using pacmd play-file command.
The file is not aligned with its frame size and the last rendering size
is also not aligned. Thus, an assertion was generated at the end of the
file as the following.

memblockq.c: Assertion 'uchunk->length % bq->base == 0' failed at
../src/pulsecore/memblockq.c:288, function pa_memblockq_push(). Aborting.

When I play the file using paplay, it works good. So, I changed to
pa_memblockq_push_align instead of pa_memblockq_push to prevent the
assertion.

Signed-off-by: Jaechul Lee <jcsing.lee@samsung.com>
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/717>
2022-06-20 14:01:47 +03:00
Sean Greenslade
8299a7f100 pactl: fix parsing of percentages with decimal points
The logic for detecting which type of volume was given incorrectly interpreted
any value with a decimal as a VOL_LINEAR. It also could set multiple flags,
which would put the flags variable into an indeterminate state. Additionally,
the flags stack variable was uninitialized which could also lead to an
indeterminate flag state.

Percentages are now prioritized over all other types, and only one type flag
can be set.
2022-06-20 14:01:26 +03:00
158 changed files with 5020 additions and 20139 deletions

1
.gitignore vendored
View file

@ -37,4 +37,3 @@ stamp-*
.dirstamp
*.orig
*.rej
subprojects/*/

View file

@ -2,7 +2,7 @@
# container and push it to the project's container registry on fd.o GitLab.
# This step is only run when the tag for the container changes, else it is
# effectively a no-op. All of this infrastructure is inherited from the
# freedesktop/ci-templates repository which is the recommended way to set up CI
# wayland/ci-templates repository which is the recommended way to set up CI
# infrastructure on fd.o GitLab.
#
# Once the container stage is done, we move on to the 'build' stage where we
@ -10,15 +10,6 @@
# there doesn't seem to be significant value to splitting the stages at the
# moment.
# Create merge request pipelines for open merge requests, branch pipelines
# otherwise. This allows MRs for new users to run CI.
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: never
- if: $CI_COMMIT_BRANCH
stages:
- container
- build
@ -28,21 +19,22 @@ variables:
# CI runs, for example when adding new packages to FDO_DISTRIBUTION_PACKAGES.
# The tag is an arbitrary string that identifies the exact container
# contents.
FDO_DISTRIBUTION_TAG: '2023-08-13-00'
FDO_DISTRIBUTION_TAG: '2021-11-03-00'
FDO_DISTRIBUTION_VERSION: '20.04'
FDO_UPSTREAM_REPO: 'pulseaudio/pulseaudio'
UBUNTU_IMAGE: "$CI_REGISTRY_IMAGE/ubuntu/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"
include:
# We pull templates from master to avoid the overhead of periodically
# scanning for changes upstream. This does means builds might occasionally
# break due to upstream changing things, so if you see unexpected build
# failures, this might be one cause.
- project: 'freedesktop/ci-templates'
- project: 'wayland/ci-templates'
ref: 'master'
file: '/templates/ubuntu.yml'
build-container:
extends: .fdo.container-build@ubuntu
extends: .fdo.container-ifnot-exists@ubuntu
stage: container
variables:
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
@ -56,7 +48,6 @@ build-container:
check
curl
dbus-x11
doxygen
g++
gcc
gettext
@ -97,19 +88,17 @@ build-container:
wget
build-meson:
extends: .fdo.distribution-image@ubuntu
stage: build
image: $UBUNTU_IMAGE
script:
# Install meson (higher than our min version to support our wrap file)
- wget -q https://github.com/mesonbuild/meson/releases/download/0.63.2/meson-0.63.2.tar.gz
- tar -xf meson-0.63.2.tar.gz
- cd meson-0.63.2
# Install meson
- wget -q https://github.com/mesonbuild/meson/releases/download/0.50.0/meson-0.50.0.tar.gz
- tar -xf meson-0.50.0.tar.gz
- cd meson-0.50.0
- python3 setup.py install
- cd ..
# needed to generate a version
- git fetch https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git --tags
# Do the actual build
- meson build -Dwebrtc-aec=enabled
- meson build --werror
- cd build
- ninja
- ulimit -c 0 # don't dump core files on tests that are supposed to assert

70
NEWS
View file

@ -1,74 +1,18 @@
PulseAudio 17.0
PulseAudio 16.2
Changes at a glance:
* Notes for end users
* Updates to ALSA UCM-based setups
* Battery level indication to Bluetooth devices
* Support for the Bluetooth FastStream codec
* webrtc-audio-processing dependency updated
* Trigger role groups added to module-role-cork
* XDG base directory spec for profile-set loading
* Notes for application developers
* PA_RATE_MAX increased
* Notes for packagers
* webrtc-audio-processing dependency updated
A bug fix release.
* A couple of time-smoother-2 fixes, mainly manifesting in issues for GStreamer clients
* Fix a crash in some restricted environments
* Minor RTP spec compliance fix
* Minur completion and tests fixups
Contributors
Alistair Leslie-Hughes
Alper Nebi Yasak
Arun Raghavan
Asier Sarasua Garmendia
Ataberk Özen
Balázs Meskó
Biswapriyo Nath
Dylan Van Assche
Eero Nurkkala
Ettore Atalan
Fabrice Fontaine
Fran Diéguez
Georg Chini
Gioele Barabucci
Gogo Gogsi
Hector Martin
Hugo Carvalho
Hui Wang
Igor V. Kovalenko
Jaechul Lee
Jan Kuparinen
Jan Palus
Jaroslav Kysela
Jiri Grönroos
Joachim Philipp
Jordi Mas
Marijn Suijten
Mart Raudsepp
Nicolas Cavallari
Peter Meerwald-Stadler
Philip Goto
Rosen Penev
Rudi Heitbaum
Sabri Ünal
Sean Greenslade
Seong-ho Cho
Shunsuke Shimizu
SimonP
Takashi Sakamoto
Tanu Kaskinen
Temuri Doghonadze
Toni Estevez
Weijia Wang
Wim Taymans
Yureka
acheronfail
flyingOwl
grimst
hashitaku
mooo
peijiankang
redfast00
wael
김인수
PulseAudio 16.1

View file

@ -174,9 +174,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
<option>
<p><opt>set-default-sink</opt> <arg>SINK</arg></p>
<optdesc><p>Make the specified sink (identified by its symbolic name or numerical index) the default sink.
Use the special name \@NONE@ to unset the user defined default sink. This will make pulseaudio return to the default
sink selection based on sink priority.</p></optdesc>
<optdesc><p>Make the specified sink (identified by its symbolic name or numerical index) the default sink.</p></optdesc>
</option>
<option>
@ -191,9 +189,7 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
<option>
<p><opt>set-default-source</opt> <arg>SOURCE</arg></p>
<optdesc><p>Make the specified source (identified by its symbolic name or numerical index) the default source.
Use the special name \@NONE@ to unset the user defined default source. This will make pulseaudio return to the default
source selection based on source priority.</p></optdesc>
<optdesc><p>Make the specified source (identified by its symbolic name or numerical index) the default source.</p></optdesc>
</option>
<option>

View file

@ -143,10 +143,8 @@ License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
<p><opt>set-default-sink|set-default-source</opt> <arg>index|name</arg></p>
<optdesc><p>Make a sink (resp. source) the default. You may specify the
sink (resp. source) by its index in the sink (resp. source) list or by its
name. Use the special name \@NONE@ to unset the user defined default sink or
source. In this case, pulseaudio will return to the default sink or source
selection based on priority.</p><p>Note that defaults may be overridden by
various policy modules or by specific stream configurations.</p></optdesc>
name.</p><p>Note that defaults may be overridden by various policy modules
or by specific stream configurations.</p></optdesc>
</option>
<option>

View file

@ -1,12 +1,10 @@
project('pulseaudio', 'c',
version : run_command(find_program('git-version-gen'), join_paths(meson.current_source_dir(), '.tarball-version'), check : false).stdout().strip(),
project('pulseaudio', 'c', 'cpp',
version : run_command(find_program('git-version-gen'), join_paths(meson.current_source_dir(), '.tarball-version')).stdout().strip(),
meson_version : '>= 0.50.0',
default_options : [ 'c_std=gnu11', 'cpp_std=c++17' ]
default_options : [ 'c_std=gnu11', 'cpp_std=c++11' ]
)
if not meson.is_subproject()
meson.add_dist_script('scripts/save-tarball-version.sh', meson.project_version())
endif
meson.add_dist_script('scripts/save-tarball-version.sh', meson.project_version())
pa_version_str = meson.project_version()
# For tarballs, the first split will do nothing, but for builds in git, we
@ -27,7 +25,7 @@ pa_protocol_version = 35
# The stable ABI for client applications, for the version info x:y:z
# always will hold x=z
libpulse_version_info = [24, 3, 24]
libpulse_version_info = [24, 2, 24]
# A simplified, synchronous, ABI-stable interface for client
# applications, for the version info x:y:z always will hold x=z
@ -150,11 +148,7 @@ cdata.set_quoted('PA_MACHINE_ID', join_paths(sysconfdir, 'machine-id'))
cdata.set_quoted('PA_MACHINE_ID_FALLBACK', join_paths(localstatedir, 'lib', 'dbus', 'machine-id'))
cdata.set_quoted('PA_SRCDIR', join_paths(meson.current_source_dir(), 'src'))
cdata.set_quoted('PA_BUILDDIR', meson.current_build_dir())
if host_machine.system() == 'windows'
cdata.set_quoted('PA_SOEXT', '.dll')
else
cdata.set_quoted('PA_SOEXT', '.so')
endif
cdata.set_quoted('PA_SOEXT', '.so')
cdata.set_quoted('PA_DEFAULT_CONFIG_DIR', pulsesysconfdir)
cdata.set('PA_DEFAULT_CONFIG_DIR_UNQUOTED', pulsesysconfdir)
cdata.set_quoted('PA_BINARY', join_paths(bindir, 'pulseaudio'))
@ -166,7 +160,8 @@ cdata.set_quoted('PA_SYSTEM_USER', get_option('system_user'))
cdata.set_quoted('PA_SYSTEM_GROUP', get_option('system_group'))
cdata.set_quoted('PA_ACCESS_GROUP', get_option('access_group'))
cdata.set_quoted('PA_CFLAGS', 'Not yet supported on meson')
cdata.set_quoted('PA_ALSA_DATA_DIR', alsadatadir)
cdata.set_quoted('PA_ALSA_PATHS_DIR', join_paths(alsadatadir, 'paths'))
cdata.set_quoted('PA_ALSA_PROFILE_SETS_DIR', join_paths(alsadatadir, 'profile-sets'))
cdata.set_quoted('DESKTOPFILEDIR', join_paths(datadir, 'applications'))
cdata.set_quoted('PULSE_LOCALEDIR', localedir)
cdata.set_quoted('GETTEXT_PACKAGE', 'pulseaudio')
@ -190,7 +185,6 @@ endif
# rather than ending up in the config.h file?
if host_machine.system() == 'darwin'
cdata.set('OS_IS_DARWIN', 1)
cdata.set('HAVE_COREAUDIO', 1)
cdata.set('_DARWIN_C_SOURCE', '200112L') # Needed to get NSIG on Mac OS
elif host_machine.system() == 'windows'
cdata.set('OS_IS_WIN32', 1)
@ -430,7 +424,7 @@ cdata.set('MESON_BUILD', 1)
# so we request the nodelete flag to be enabled.
# On other systems, we don't really know how to do that, but it's welcome if somebody can tell.
# Windows doesn't support this flag.
if host_machine.system() != 'windows' and host_machine.system() != 'darwin'
if host_machine.system() != 'windows'
nodelete_link_args = ['-Wl,-z,nodelete']
else
nodelete_link_args = []
@ -439,7 +433,6 @@ endif
# Code coverage
if get_option('gcov')
add_languages('cpp')
add_project_arguments('--coverage', language: ['c', 'cpp'])
add_project_link_arguments('--coverage', language: ['c', 'cpp'])
endif
@ -505,24 +498,22 @@ endif
need_libatomic_ops = false
atomictest = '''int main() {
atomictest = '''void func() {
volatile int atomic = 2;
__sync_bool_compare_and_swap (&atomic, 2, 3);
return 0;
}
'''
if cc.links(atomictest)
if cc.compiles(atomictest)
cdata.set('HAVE_ATOMIC_BUILTINS', 1)
newatomictest = '''int main() {
newatomictest = '''void func() {
int c = 0;
__atomic_store_n(&c, 4, __ATOMIC_SEQ_CST);
return 0;
}
'''
if(cc.links(newatomictest))
if(cc.compiles(newatomictest))
cdata.set('HAVE_ATOMIC_BUILTINS_MEMORY_MODEL', 1)
endif
@ -690,7 +681,7 @@ if get_option('daemon')
cdata.set('HAVE_ALSA_UCM', 1)
endif
gio_dep = dependency('gio-2.0', version : '>= 2.26.0', required : false)
gio_dep = dependency('gio-2.0', version : '>= 2.26.0')
if get_option('gsettings').enabled()
assert(gio_dep.found(), 'GSettings support needs glib I/O library (GIO)')
cdata.set('HAVE_GSETTINGS', 1)
@ -726,7 +717,7 @@ if get_option('daemon')
cdata.set('HAVE_SOXR', 1)
endif
webrtc_dep = dependency('webrtc-audio-processing-1', version : '>= 1.0', required : get_option('webrtc-aec'))
webrtc_dep = dependency('webrtc-audio-processing', version : '>= 0.2', required : get_option('webrtc-aec'))
if webrtc_dep.found()
cdata.set('HAVE_WEBRTC', 1)
endif
@ -741,10 +732,6 @@ if get_option('daemon')
cdata.set('HAVE_SYSTEMD_LOGIN', 1)
endif
if get_option('consolekit').enabled()
assert(dbus_dep.found(), 'ConsoleKit requires D-Bus support')
endif
tcpwrap_dep = cc.find_library('wrap', required: get_option('tcpwrap'))
if cc.has_header('tcpd.h') and cc.has_function('hosts_access', dependencies : tcpwrap_dep)
cdata.set('HAVE_LIBWRAP', 1)
@ -1014,7 +1001,6 @@ summary += [
' Enable HAL->udev compat: @0@'.format(get_option('hal-compat')),
'Enable systemd units: @0@'.format(systemd_dep.found()),
'Enable elogind: @0@'.format(libelogind_dep.found()),
'Enable ConsoleKit: @0@'.format(not get_option('consolekit').disabled() and dbus_dep.found()),
'Enable TCP Wrappers: @0@'.format(tcpwrap_dep.found()),
'Enable OpenSSL (for Airtunes): @0@'.format(openssl_dep.found()),
'Database: @0@'.format(get_option('database')),

View file

@ -99,9 +99,6 @@ option('bluez5-native-headset',
option('bluez5-ofono-headset',
type : 'boolean',
description : 'Optional oFono headset backend support (BlueZ 5)')
option('consolekit',
type : 'feature', value : 'auto',
description : 'Optional ConsoleKit support')
option('dbus',
type : 'feature', value : 'auto',
description : 'Optional D-Bus support')
@ -169,7 +166,7 @@ option('x11',
type : 'feature', value : 'auto',
description : 'Optional X11 support')
option('enable-smoother-2',
type : 'boolean', value : true,
type : 'boolean', value : 'true',
description : 'Use alternative time smoother implementation')
# Echo cancellation

View file

@ -49,7 +49,3 @@ zh_TW
eo
si
ka
eu
ar
sl
ro

View file

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2019-01-09 12:17+0200\n"
"Last-Translator: F Wolff <friedel@translate.org.za>\n"
"Language-Team: translate-discuss-af@lists.sourceforge.net\n"
@ -988,8 +988,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-gebaseerde effenaar op %s"
@ -1046,14 +1046,14 @@ msgstr "Klank op @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tonnel vir %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tonnel na %s/%s"
@ -1390,11 +1390,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Ingeboude oudio"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

2903
po/ar.po

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.as\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:52+0000\n"
"Last-Translator: Amitakhya Phukan <aphukan@fedoraproject.org>\n"
"Language-Team: Assamese <>\n"
@ -1142,8 +1142,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1206,14 +1206,14 @@ msgstr "@HOSTNAME@ ত অ'ডিঅ'"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1564,11 +1564,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] লগ লক্ষ্য '%s' বৈধ নহয় ।"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "আভ্যন্তৰীণ অ'ডিঅ'"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "মোডেম"

225
po/be.po
View file

@ -9,22 +9,20 @@ msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-05-01 06:49+0000\n"
"Last-Translator: Yauhen Bugamol "
"<bugamol@users.noreply.translate.fedoraproject.org>\n"
"Language-Team: Belarusian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/be/>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2016-07-19 11:06+0300\n"
"Last-Translator: Viktar Vaŭčkievič <victorenator@gmail.com>\n"
"Language-Team: Belarusian <>\n"
"Language: be\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.11.1\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 2.0\n"
#: src/daemon/cmdline.c:113
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@ -99,71 +97,70 @@ msgstr ""
"Каманды:\n"
" -h, --help Паказаць гэту даведку.\n"
" --version Паказаць версію.\n"
" --dump-conf Выгрузіць прадвызначаную "
"канфігурацыю.\n"
" --dump-modules Выгрузіць спіс даступных модуляў.\n"
" --dump-resample-methods Выгрузіць спіс даступных метадаў\n"
" --dump-conf Вывесці агаданую канфігурацыю.\n"
" --dump-modules Вывесці спіс даступных модуляў.\n"
" --dump-resample-methods Вывесці спіс даступных метадаў\n"
" перадыскрэтызацыі.\n"
" --cleanup-shm Ачысціць выкарыстаныя сегменты\n"
" сумеснай памяці.\n"
" --start Запусціць дэман, калі ён\n"
" --start Запусціць фонавы сэрвіс, калі ён\n"
" яшчэ не запушчаны.\n"
" -k --kill Знішчыць запушчаны дэман.\n"
" --check Праверыць ці запушчаны дэман\n"
" -k --kill Знішчыць запушчаны фонавы сэрвіс.\n"
" --check Праверыць ці запушчаны фонавы "
"сэрвіс\n"
" (толькі код завяршэння).\n"
"\n"
"Параметры:\n"
" --system[=BOOL] Агульнасістэмны рэжым.\n"
" -D, --daemonize[=BOOL] Запусціць як дэман.\n"
" -D, --daemonize[=BOOL] Запусціць як фонавы сэрвіс.\n"
" --fail[=BOOL] Выйсці пры памылцы запуску.\n"
" --high-priority[=BOOL] Паспрабаваць павысіць прыярытэт "
"(nice)\n"
" (даступна толькі карыстальніку root,"
"\n"
" з уключаным SUID або з павышаным\n"
" --high-priority[=BOOL] Паспрабаваць павысіць прыярытэт\n"
" (nice)\n"
" (даступна толькі карыстальніку "
"root,\n"
" з уключаным SUID ці з павышаным\n"
" RLIMIT_NICE).\n"
" --realtime[=BOOL] Паспрабаваць уключыць планіроўшчык\n"
" рэальнага часу\n"
" (даступна толькі карыстальніку root,"
"\n"
" з уключаным SUID або з павышаным\n"
" (даступна толькі root,\n"
" з уключаным SUID ці з павышаным\n"
" RLIMIT_RTPRIO).\n"
" --disallow-module-loading[=BOOL] Забараніць загрузку/выгрузку "
"модуляў\n"
" па запыту карыстальніка пасля "
"запуску.\n"
" па запыту карыстальніка пасля\n"
" запуску.\n"
" --disallow-exit[=BOOL] Забараніць выхад па запыту\n"
" карыстальніка.\n"
" --exit-idle-time=СЕКУНДЫ Завяршыць работу пасля азначанага\n"
" часу бяздзеяння.\n"
" --scache-idle-time=СЕКУНДЫ Выгрузіць аўтаматычна загружаныя\n"
" сэмплы пасля азначанага часу "
"бяздзеяння.\n"
" сэмплы пасля азначанага часу\n"
" бяздзеяння.\n"
" --log-level[=УЗРОВЕНЬ] Павялічыць або ўставіць узровень\n"
" інфарматыўнасці.\n"
" -v --verbose Павялічыць узровень інфарматыўнасці."
"\n"
" -v --verbose Павялічыць узровень "
"інфарматыўнасці.\n"
" --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
" Вызначыць журнал.\n"
" --log-meta[=BOOL] Дадаць месца ў кодзе да "
"паведамленняў журнала.\n"
" --log-time[=BOOL] Дадаць час да паведамленняў журнала."
"\n"
" --log-meta[=BOOL] Дадаць месца ў коду да паведамленняў "
"журнала.\n"
" --log-time[=BOOL] Дадаць час да паведамленняў "
"журнала.\n"
" --log-backtrace=FRAMES Дадаць стэк выклікаў да "
"паведамленняў журнала.\n"
" -p, --dl-search-path=ШЛЯХ Задаць шлях для пошуку дынамічных\n"
" раздзяляльных абʼектаў (плагінаў).\n"
" раздзяляльных абʼектаў (дадаткаў).\n"
" --resample-method=МЕТАД Выкарыстоўваць азначаны метад\n"
" перадыскрэтызацыі\n"
" (Глядзіце --dump-resample-methods "
"для магчымых значэнняў).\n"
" (Глядзіце --dump-resample-methods\n"
" для магчымых значэнняў).\n"
" --use-pid-file[=BOOL] Стварыць PID-файл.\n"
" --no-cpu-limit[=BOOL] Не ўсталёўваць абмежаванні на "
"выкарыстанне\n"
" працэсара на платформах, якія\n"
" падтрымліваюць гэта.\n"
" --disable-shm[=BOOL] Адключыць падтрымку сумеснай памяці."
"\n"
" --disable-shm[=BOOL] Адключыць падтрымку сумеснай "
"памяці.\n"
" --enable-memfd[=BOOL] Уключыць падтрымку memfd-сумеснай\n"
" памяці.\n"
"\n"
@ -173,8 +170,7 @@ msgstr ""
" -F, --file=НАЗВААЙЛА Выканаць азначаны сцэнарый.\n"
" -C Адкрыць камандны радок у\n"
" бягучым тэрмінале пасля запуску.\n"
" -n Не загружаць прадвызначаны файл "
"сцэнарыя.\n"
" -n Не загружаць агаданы файл сцэнарыю.\n"
#: src/daemon/cmdline.c:246
msgid "--daemonize expects boolean argument"
@ -512,7 +508,7 @@ msgstr ""
#: src/daemon/main.c:922
msgid "Failed to acquire stdio."
msgstr "Не ўдалося атрымаць stdio."
msgstr "Не атрымалася атрымаць stdio."
#: src/daemon/main.c:928 src/daemon/main.c:999
#, c-format
@ -540,7 +536,7 @@ msgstr "setsid() пацярпела няўдачу: %s"
#: src/daemon/main.c:1119
msgid "Failed to get machine ID"
msgstr "Не ўдалося атрымаць ідэнтыфікатар машыны"
msgstr "Не атрымалася атрымаць ідэнтыфікатар машыны"
#: src/daemon/main.c:1145
msgid ""
@ -565,8 +561,9 @@ msgid "pa_core_new() failed."
msgstr "pa_core_new() пацярпела няўдачу."
#: src/daemon/main.c:1268
#, fuzzy
msgid "command line arguments"
msgstr "аргументы каманднага радка"
msgstr "Занадта шмат аргументаў."
#: src/daemon/main.c:1275
#, c-format
@ -699,12 +696,14 @@ msgid "Analog Output"
msgstr "Аналагавы выхад"
#: src/modules/alsa/alsa-mixer.c:2808
#, fuzzy
msgid "Headphones 2"
msgstr "Навушнікі 2"
msgstr "Навушнікі"
#: src/modules/alsa/alsa-mixer.c:2809
#, fuzzy
msgid "Headphones Mono Output"
msgstr "Манавыхад навушнікаў"
msgstr "Аналагавы монавыхад"
#: src/modules/alsa/alsa-mixer.c:2810
msgid "Line Out"
@ -712,7 +711,7 @@ msgstr "Лінейны выхад"
#: src/modules/alsa/alsa-mixer.c:2811
msgid "Analog Mono Output"
msgstr "Аналагавы манавыхад"
msgstr "Аналагавы монавыхад"
#: src/modules/alsa/alsa-mixer.c:2812
msgid "Speakers"
@ -739,32 +738,38 @@ msgid "Multichannel Output"
msgstr "Шматканальны выхад"
#: src/modules/alsa/alsa-mixer.c:2818
#, fuzzy
msgid "Game Output"
msgstr "Выхад гульні"
msgstr "%s выхад"
#: src/modules/alsa/alsa-mixer.c:2819 src/modules/alsa/alsa-mixer.c:2820
#, fuzzy
msgid "Chat Output"
msgstr "Выхад размовы"
msgstr "%s выхад"
#: src/modules/alsa/alsa-mixer.c:2821
#, fuzzy
msgid "Chat Input"
msgstr "Уваход размовы"
msgstr "%s уваход"
#: src/modules/alsa/alsa-mixer.c:2822
#, fuzzy
msgid "Virtual Surround 7.1"
msgstr "Віртуальны абʼёмны 7.1"
msgstr "Віртуальны абʼёмны прыёмнік"
#: src/modules/alsa/alsa-mixer.c:4563
msgid "Analog Mono"
msgstr "Аналагавы мона"
#: src/modules/alsa/alsa-mixer.c:4564
#, fuzzy
msgid "Analog Mono (Left)"
msgstr "Аналагавы мона (левы)"
msgstr "Аналагавы мона"
#: src/modules/alsa/alsa-mixer.c:4565
#, fuzzy
msgid "Analog Mono (Right)"
msgstr "Аналагавы мона (правы)"
msgstr "Аналагавы мона"
#. Note: Not translated to "Analog Stereo Input", because the source
#. * name gets "Input" appended to it automatically, so adding "Input"
@ -791,8 +796,9 @@ msgid "Headset"
msgstr "Гарнітура"
#: src/modules/alsa/alsa-mixer.c:4577 src/modules/alsa/alsa-mixer.c:4735
#, fuzzy
msgid "Speakerphone"
msgstr "Гучная сувязь"
msgstr "Дынамік"
#: src/modules/alsa/alsa-mixer.c:4578 src/modules/alsa/alsa-mixer.c:4579
msgid "Multichannel"
@ -868,35 +874,36 @@ msgstr "Лічбавы абʼёмны 5.1 (HDMI)"
#: src/modules/alsa/alsa-mixer.c:4597
msgid "Chat"
msgstr "Размова"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4598
msgid "Game"
msgstr "Гульня"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4732
msgid "Analog Mono Duplex"
msgstr "Дуплексны аналагавы мона"
msgstr "Аналагавы мона дуплекс"
#: src/modules/alsa/alsa-mixer.c:4733
msgid "Analog Stereo Duplex"
msgstr "Дуплексны аналагавы стэрэа"
msgstr "Аналагавы стэрэа дуплекс"
#: src/modules/alsa/alsa-mixer.c:4736
msgid "Digital Stereo Duplex (IEC958)"
msgstr "Дуплексны лічбавы стэрэа (IEC958)"
msgstr "Лічбавы стэрэа дуплекс (IEC958)"
#: src/modules/alsa/alsa-mixer.c:4737
msgid "Multichannel Duplex"
msgstr "Дуплексны шматканальны"
msgstr "Шматканальны дуплекс"
#: src/modules/alsa/alsa-mixer.c:4738
#, fuzzy
msgid "Stereo Duplex"
msgstr "Дуплексны стэрэа"
msgstr "Аналагавы стэрэа дуплекс"
#: src/modules/alsa/alsa-mixer.c:4739
msgid "Mono Chat + 7.1 Surround"
msgstr "Размова, мона + аб'ёмны 7.1"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4740 src/modules/alsa/module-alsa-card.c:197
#: src/modules/bluetooth/module-bluez5-device.c:2263
@ -1170,8 +1177,8 @@ msgstr ""
"autoloaded=<зададзены, калі гэты модуль загружаны аўтаматычна> "
"use_volume_sharing=<yes ці no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1236,14 +1243,14 @@ msgstr "Аўдыя на @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Тунэль для %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Тунэль да %s/%s"
@ -1253,6 +1260,7 @@ msgid "Virtual surround sink"
msgstr "Віртуальны абʼёмны прыёмнік"
#: src/modules/module-virtual-surround-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"master=<name of sink to filter> sink_master=<name of sink to filter> "
@ -1263,21 +1271,19 @@ msgid ""
"this module is being loaded automatically> "
msgstr ""
"sink_name=<назва прыёмніка> sink_properties=<уласцівасці прыёмніка> "
"master=<назва прыёмніка для фільтрацыі> sink_master=<назва прыёмніка для "
"фільтрацыі> format=<фармат сэмлаў> rate=<частата дыскрэдытацыі> "
"channels=<колькасць каналаў> channel_map=<карта каналаў> "
"use_volume_sharing=<yes або no> force_flat_volume=<yes або no> hrir=/шлях/да/"
евага_hrir.wav hrir_left=/шлях/да/левага_hrir.wav "
"hrir_right=/шлях/да/неабавязковага/правага_hrir.wav autoloaded=<задаецца, "
"калі модуль загружаецца аўтаматычна> "
"master=<назва прыёмніка для фільтрацыі> format=<фармат сэмлаў> rate=<частата "
"сэмлаў> channels=<number of channels> channel_map=<колькасць каналаў> "
"use_volume_sharing=<yes ці no> force_flat_volume=<yes ці no> hrir=<шлях да "
"left_hrir.wav> "
#: src/modules/raop/module-raop-discover.c:295
#, fuzzy
msgid "Unknown device model"
msgstr "Невядомая мадэль прылады"
msgstr "Невядомы код памылкі"
#: src/modules/raop/raop-sink.c:689
msgid "RAOP standard profile"
msgstr "Стандартны профіль RAOP"
msgstr ""
#: src/modules/reserve-wrap.c:149
msgid "PulseAudio Sound Server"
@ -1591,11 +1597,11 @@ msgstr "Не атрымалася адкрыць файлы журнала «%s
msgid "Invalid log target."
msgstr "Некарэктны журнал."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Убудаванае аўдыя"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Мадэм"
@ -1826,7 +1832,7 @@ msgstr "Паток перасунуты ў прыладу %s (%u, %sпрыпын
#: src/utils/pacat.c:393
msgid "not "
msgstr "не "
msgstr "не"
#: src/utils/pacat.c:400
#, c-format
@ -1897,7 +1903,7 @@ msgstr "Атрыманы сігнал — выхад."
#: src/utils/pacat.c:640
#, c-format
msgid "Failed to get latency: %s"
msgstr "Не ўдалося атрымаць затрымку: %s"
msgstr "Не атрымалася атрымаць затрымку: %s"
#: src/utils/pacat.c:645
#, c-format
@ -2362,7 +2368,7 @@ msgstr "read(): %s"
#: src/utils/pactl.c:183
#, c-format
msgid "Failed to get statistics: %s"
msgstr "Не ўдалося атрымаць статыстыку: %s"
msgstr "Не атрымалася атрымаць статыстыку: %s"
#: src/utils/pactl.c:199
#, fuzzy, c-format
@ -2398,7 +2404,7 @@ msgstr "Памер кэшу сэмплаў: %s\n"
#: src/utils/pactl.c:219 src/utils/pactl.c:231 src/utils/pactl.c:245
#, c-format
msgid "Failed to get server information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб серверы: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб серверы: %s"
#: src/utils/pactl.c:224 src/utils/pactl.c:236
#, c-format
@ -2447,15 +2453,15 @@ msgstr ""
#: src/utils/pactl.c:320
msgid "availability unknown"
msgstr "даступнасць невядомая"
msgstr ""
#: src/utils/pactl.c:321
msgid "available"
msgstr "даступна"
msgstr ""
#: src/utils/pactl.c:322
msgid "not available"
msgstr "недаступна"
msgstr ""
#: src/utils/pactl.c:331 src/utils/pactl.c:355
#, fuzzy
@ -2473,7 +2479,7 @@ msgstr "Лінейны ўваход"
#: src/utils/pactl.c:336
msgid "Mic"
msgstr "Мікрафон"
msgstr ""
#: src/utils/pactl.c:338
#, fuzzy
@ -2486,11 +2492,11 @@ msgstr ""
#: src/utils/pactl.c:340
msgid "SPDIF"
msgstr "SPDIF"
msgstr ""
#: src/utils/pactl.c:341
msgid "HDMI"
msgstr "HDMI"
msgstr ""
#: src/utils/pactl.c:342
msgid "TV"
@ -2498,7 +2504,7 @@ msgstr ""
#: src/utils/pactl.c:345
msgid "USB"
msgstr "USB"
msgstr ""
#: src/utils/pactl.c:346
#, fuzzy
@ -2507,17 +2513,18 @@ msgstr "Bluetooth-уваход"
#: src/utils/pactl.c:352
msgid "Network"
msgstr "Сетка"
msgstr ""
#: src/utils/pactl.c:353
#, fuzzy
msgid "Analog"
msgstr "Аналагавы"
msgstr "Аналагавы мона"
#: src/utils/pactl.c:567 src/utils/pactl.c:1834 src/utils/pactl.c:1852
#: src/utils/pactl.c:1875 src/utils/pactl.c:1992
#, c-format
msgid "Failed to get sink information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб прыёмніку: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб прыёмніку: %s"
#: src/utils/pactl.c:664
#, c-format
@ -2564,13 +2571,13 @@ msgid "\tPorts:\n"
msgstr "\tПарты:\n"
#: src/utils/pactl.c:708 src/utils/pactl.c:892
#, c-format
#, fuzzy, c-format
msgid "\t\t%s: %s (type: %s, priority: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (тып: %s, прыярытэт: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (прыёмнікаў: %u, крыніц: %u, прыярытэт: %u, даступны: %s)\n"
#: src/utils/pactl.c:710 src/utils/pactl.c:894 src/utils/pactl.c:1256
msgid ", availability group: "
msgstr ", група даступнасці: "
msgstr ""
#: src/utils/pactl.c:715 src/utils/pactl.c:899
#, c-format
@ -2586,7 +2593,7 @@ msgstr "\tФарматы:\n"
#: src/utils/pactl.c:1934 src/utils/pactl.c:2007
#, c-format
msgid "Failed to get source information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб крыніцы: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб крыніцы: %s"
#: src/utils/pactl.c:849
#, c-format
@ -2638,7 +2645,7 @@ msgstr "н/д"
#: src/utils/pactl.c:924 src/utils/pactl.c:1793
#, c-format
msgid "Failed to get module information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб модулі: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб модулі: %s"
#: src/utils/pactl.c:976
#, c-format
@ -2660,7 +2667,7 @@ msgstr ""
#: src/utils/pactl.c:1002
#, c-format
msgid "Failed to get client information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб кліенце: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб кліенце: %s"
#: src/utils/pactl.c:1056
#, c-format
@ -2680,7 +2687,7 @@ msgstr ""
#: src/utils/pactl.c:1168
#, c-format
msgid "Failed to get card information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб картцы: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб картцы: %s"
#: src/utils/pactl.c:1224
#, c-format
@ -2737,7 +2744,7 @@ msgstr "\t\t\tЧастка профілю(яў): %s"
#: src/utils/pactl.c:1290 src/utils/pactl.c:1954 src/utils/pactl.c:2022
#, c-format
msgid "Failed to get sink input information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб уваходзе прыёмніка: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб уваходзе прыёмніка: %s"
#: src/utils/pactl.c:1366
#, c-format
@ -2781,7 +2788,7 @@ msgstr ""
#: src/utils/pactl.c:1413 src/utils/pactl.c:1974 src/utils/pactl.c:2037
#, c-format
msgid "Failed to get source output information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб выхадзе крыніцы: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб выхадзе крыніцы: %s"
#: src/utils/pactl.c:1489
#, c-format
@ -2825,7 +2832,7 @@ msgstr ""
#: src/utils/pactl.c:1536
#, c-format
msgid "Failed to get sample information: %s"
msgstr "Не ўдалося атрымаць інфармацыю аб сэмпле: %s"
msgstr "Не атрымалася атрымаць інфармацыю аб сэмпле: %s"
#: src/utils/pactl.c:1604
#, c-format
@ -2885,9 +2892,9 @@ msgid "list-handlers message response array element %d is not a JSON object"
msgstr ""
#: src/utils/pactl.c:1800
#, c-format
#, fuzzy, c-format
msgid "Failed to unload module: Module %s not loaded"
msgstr "Не ўдалося выгрузіць модуль: модуль %s не загружаны"
msgstr "Не атрымалася выгрузіць модуль: модуль не загружаны"
#: src/utils/pactl.c:1818
#, fuzzy, c-format
@ -3261,7 +3268,7 @@ msgstr ""
#: src/utils/pactl.c:3194
msgid "You have to specify a card name/index, a port name and a latency offset"
msgstr "Неабходна задаць назву/нумар карты, назву порта і зрух затрымкі"
msgstr "Неабходна задаць нумар ці назву карткі, назву порту і зрух затрымкі."
#: src/utils/pactl.c:3201
msgid "Could not parse latency offset"
@ -3416,7 +3423,7 @@ msgstr "Не атрымалася захаваць дадзеныя cookie\n"
#: src/utils/pax11publish.c:168
#, c-format
msgid "Failed to get FQDN.\n"
msgstr "Не ўдалося атрымаць поўнае даменнае імя (FQDN).\n"
msgstr "Не атрымалася атрымаць поўнае даменнае імя (FQDN).\n"
#: src/utils/pax11publish.c:188
#, c-format

View file

@ -4,7 +4,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2020-10-15 21:30+0000\n"
"Last-Translator: Emanuil Novachev <em.novachev@gmail.com>\n"
"Language-Team: Bulgarian <https://translate.fedoraproject.org/projects/"
@ -1046,8 +1046,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1104,14 +1104,14 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1448,11 +1448,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr ""
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr ""

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.bn_IN\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:52+0000\n"
"Last-Translator: Runa Bhattacharjee <runab@redhat.com>\n"
"Language-Team: Bengali INDIA <anubad@lists.ankur.org.in>\n"
@ -1157,8 +1157,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1221,14 +1221,14 @@ msgstr "@HOSTNAME@-র মধ্যে অডিও"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1579,11 +1579,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] লগ টার্গেট '%s' বৈধ নয়।"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "অভ্যন্তরীণ অডিও"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "মোডেম"

View file

@ -28,17 +28,14 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2022-09-26 14:19+0000\n"
"Last-Translator: Toni Estevez <toni.estevez@gmail.com>\n"
"Language-Team: Catalan <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/ca/>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:52+0000\n"
"Last-Translator: Josep Torné Llavall <josep.torne@gmail.com>\n"
"Language-Team: Catalan <fedora@softcatala.net>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.1\n"
#: src/daemon/cmdline.c:113
#, fuzzy, c-format
@ -707,23 +704,25 @@ msgstr "Entrada analògica"
#: src/modules/alsa/alsa-mixer.c:2800
msgid "Dock Microphone"
msgstr "Micròfon de l'acoblador"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:2802
msgid "Headset Microphone"
msgstr "Micròfon de l'auricular"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Output"
msgstr "Sortida analògica"
#: src/modules/alsa/alsa-mixer.c:2808
#, fuzzy
msgid "Headphones 2"
msgstr "Auriculars 2"
msgstr "Auriculars"
#: src/modules/alsa/alsa-mixer.c:2809
#, fuzzy
msgid "Headphones Mono Output"
msgstr "Sortida mono analògica dels auriculars"
msgstr "Sortida mono analògica"
#: src/modules/alsa/alsa-mixer.c:2810
msgid "Line Out"
@ -880,7 +879,7 @@ msgstr "Envoltant digital 4.0 (IEC958/AC3)"
#: src/modules/alsa/alsa-mixer.c:4593
msgid "Digital Surround 5.1 (IEC958/AC3)"
msgstr "Envoltant digital 5.1 (IEC958/AC3)"
msgstr "Envolvent digital 5.1 (IEC958/AC3)"
#: src/modules/alsa/alsa-mixer.c:4594
msgid "Digital Surround 5.1 (IEC958/DTS)"
@ -896,11 +895,11 @@ msgstr "So envoltant digital 5.1 (HDMI)"
#: src/modules/alsa/alsa-mixer.c:4597
msgid "Chat"
msgstr "Xat"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4598
msgid "Game"
msgstr "Joc"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4732
msgid "Analog Mono Duplex"
@ -1176,8 +1175,8 @@ msgstr ""
"pulgin=<nom del connector ladspa> label=<etiqueta del connector ladspa> "
"control=<llista separada per comes dels valors de control d'entrada>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1240,14 +1239,14 @@ msgstr "Àudio a @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Túnel per %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1448,7 +1447,7 @@ msgstr "Auxiliar 28"
#: src/pulse/channelmap.c:150
msgid "Auxiliary 29"
msgstr "Auxiliar 29"
msgstr "Auxiliar 31"
#: src/pulse/channelmap.c:151
msgid "Auxiliary 30"
@ -1591,11 +1590,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Àudio intern"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Mòdem"
@ -2775,12 +2774,10 @@ msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
msgstr ""
"no s'ha pogut analitzar correctament la resposta del missatge de list-"
"handlers"
#: src/utils/pactl.c:1718
msgid "list-handlers message response is not a JSON array"
msgstr "la resposta del missatge de list-handlers no és una matriu de JSON"
msgstr ""
#: src/utils/pactl.c:1729
#, c-format

View file

@ -10,17 +10,16 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2023-12-31 14:36+0000\n"
"Last-Translator: Matěj Valášek <valmatej@seznam.cz>\n"
"Language-Team: Czech <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/cs/>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2018-09-30 17:34+0200\n"
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
"Language-Team: čeština <gnome-cs-list@gnome.org>\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Weblate 5.3.1\n"
"X-Generator: Gtranslator 2.91.7\n"
#: src/daemon/cmdline.c:113
#, fuzzy, c-format
@ -562,8 +561,6 @@ msgid ""
"Failed to initialize daemon due to errors while executing startup commands. "
"Source of commands: %s"
msgstr ""
"Nepodařilo se inicializovat démona kvůli chybám při provádění startup "
"příkazů. Zdroj příkazů: %s"
#: src/daemon/main.c:1280
msgid "Daemon startup without any loaded modules, refusing to work."
@ -862,11 +859,11 @@ msgstr "Digitální Surround 5.1 (HDMI)"
#: src/modules/alsa/alsa-mixer.c:4597
msgid "Chat"
msgstr "Chat"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4598
msgid "Game"
msgstr "Hra"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4732
msgid "Analog Mono Duplex"
@ -890,7 +887,7 @@ msgstr "Duplexní stereo"
#: src/modules/alsa/alsa-mixer.c:4739
msgid "Mono Chat + 7.1 Surround"
msgstr "Mono Chat + 7.1 Surround"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4740 src/modules/alsa/module-alsa-card.c:197
#: src/modules/bluetooth/module-bluez5-device.c:2263
@ -1161,8 +1158,8 @@ msgstr ""
"channels=<počet kanálů> channel_map=<mapa kanálů> autoloaded=<zda se má "
"modul načítat automaticky> use_volume_sharing=<používat sdílenou hlasitost>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Ekvalizér používající FFT na %s"
@ -1228,14 +1225,14 @@ msgstr "Zvuk na @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunel pro %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunel do %s/%s"
@ -1585,11 +1582,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Neplatný cíl pro záznam."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Vnitřní zvukový systém"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -2438,15 +2435,15 @@ msgstr ""
#: src/utils/pactl.c:320
msgid "availability unknown"
msgstr "dostupnost neznámá"
msgstr ""
#: src/utils/pactl.c:321
msgid "available"
msgstr "dostupné"
msgstr ""
#: src/utils/pactl.c:322
msgid "not available"
msgstr "není dostupné"
msgstr ""
#: src/utils/pactl.c:331 src/utils/pactl.c:355
#, fuzzy
@ -2455,7 +2452,7 @@ msgstr "neznámo"
#: src/utils/pactl.c:332
msgid "Aux"
msgstr "Aux"
msgstr ""
#: src/utils/pactl.c:335
#, fuzzy
@ -2464,7 +2461,7 @@ msgstr "Linkový vstup"
#: src/utils/pactl.c:336
msgid "Mic"
msgstr "Mic"
msgstr ""
#: src/utils/pactl.c:338
#, fuzzy
@ -2473,23 +2470,23 @@ msgstr "Náhlavní souprava"
#: src/utils/pactl.c:339
msgid "Earpiece"
msgstr "Sluchátka do uší"
msgstr ""
#: src/utils/pactl.c:340
msgid "SPDIF"
msgstr "SPDIF"
msgstr ""
#: src/utils/pactl.c:341
msgid "HDMI"
msgstr "HDMI"
msgstr ""
#: src/utils/pactl.c:342
msgid "TV"
msgstr "TV"
msgstr ""
#: src/utils/pactl.c:345
msgid "USB"
msgstr "USB"
msgstr ""
#: src/utils/pactl.c:346
#, fuzzy
@ -2498,7 +2495,7 @@ msgstr "Vstup přes Bluetooth"
#: src/utils/pactl.c:352
msgid "Network"
msgstr "Síť"
msgstr ""
#: src/utils/pactl.c:353
#, fuzzy
@ -2861,22 +2858,20 @@ msgstr "Selhalo volání read(): %s"
#: src/utils/pactl.c:1695
#, c-format
msgid "list-handlers message failed: %s"
msgstr "list-handlers zpráva selhala: %s"
msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
#, fuzzy
msgid "list-handlers message response could not be parsed correctly"
msgstr "odpověď na zprávu list-handlers nelze správně analyzovat"
msgstr ""
#: src/utils/pactl.c:1718
#, fuzzy
msgid "list-handlers message response is not a JSON array"
msgstr "odpověď zprávy list-handlers není pole JSON"
msgstr ""
#: src/utils/pactl.c:1729
#, c-format
msgid "list-handlers message response array element %d is not a JSON object"
msgstr "prvek pole odpovědí list-handlers %d není objekt JSON"
msgstr ""
#: src/utils/pactl.c:1800
#, c-format
@ -3243,8 +3238,6 @@ msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"Nadbytečné argumenty budou ignorovány. Všimněte si, že všechny parametry "
"zprávy musí být zadány jako jeden řetězec."
#: src/utils/pactl.c:3182
msgid ""

View file

@ -7,9 +7,9 @@ msgstr ""
"Project-Id-Version: PulseAudio master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2024-12-13 17:38+0000\n"
"Last-Translator: DK Guy <peter@nozen.dk>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-05-21 23:01+0000\n"
"Last-Translator: scootergrisen <scootergrisen@gmail.com>\n"
"Language-Team: Danish <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/da/>\n"
"Language: da\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.8.4\n"
"X-Generator: Weblate 4.6.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -175,12 +175,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail venter boolesk argument"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level forventer logniveau argument (enten numerisk i området 0..4 "
"eller en af debug, info, notice, warn, error)."
"--log-level venter logniveau argument (enten numerisk i området 0..4 eller "
"en af debug, info, notice, warn, error)."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
@ -1132,8 +1133,8 @@ msgstr ""
"channel_map=<kanalkort> autoloaded=<indstil hvis modulet indlæses "
"automatisk> use_volume_sharing=<yes eller no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-baseret equalizer på %s"
@ -1199,14 +1200,14 @@ msgstr "Lyd på @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel for %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel til %s/%s"
@ -1555,11 +1556,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Ugyldigt logmål."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Indbygget lyd"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

View file

@ -14,8 +14,8 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.de\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2022-12-06 09:20+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-12-05 21:16+0000\n"
"Last-Translator: Ettore Atalan <atalanttore@googlemail.com>\n"
"Language-Team: German <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/de/>\n"
@ -24,7 +24,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.2\n"
"X-Generator: Weblate 4.9.1\n"
#: src/daemon/cmdline.c:113
#, fuzzy, c-format
@ -188,6 +188,7 @@ msgid "--fail expects boolean argument"
msgstr "--fail erfordert boolesche Variable"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
@ -217,12 +218,14 @@ msgid "--use-pid-file expects boolean argument"
msgstr "--use-pid-file erfordert boolesche Variable"
#: src/daemon/cmdline.c:328
#, fuzzy
msgid ""
"Invalid log target: use either 'syslog', 'journal', 'stderr' or 'auto' or a "
"valid file name 'file:<path>', 'newfile:<path>'."
msgstr ""
"Ungültiges Protokollziel: Benutzen Sie entweder »syslog«, »journal«, »stderr«"
" oder »auto« oder einen gültigen Dateinamen »file:<Pfad>«, »newfile:<Pfad>«."
"Ungültiges Protokollziel: Benutzen Sie entweder »syslog«, »journal«, "
"»stderr« oder »auto« oder einen gültigen Dateinamen »file:<Pfad>«, »newfile:"
"<Pfad>«."
#: src/daemon/cmdline.c:330
msgid ""
@ -1149,8 +1152,8 @@ msgstr ""
"autoloaded=<setzen, wenn dieses Modul automatisch geladen wird> "
"use_volume_sharing=<yes oder no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1217,14 +1220,14 @@ msgstr "Audio auf @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel für %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel zu %s/%s"
@ -1573,11 +1576,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Ungültiges Protokollziel."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Internes Audio"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -3157,7 +3160,7 @@ msgstr "Sie müssen einen Ziel-Namen/-Indexwert und eine Lautstärke angeben."
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#, fuzzy
msgid "You have to specify a source name/index"
msgstr "Sie müssen einen Quellennamen/-index angeben"
msgstr "Sie müssen einen Quellennamen angeben."
#: src/utils/pactl.c:3031
msgid "You have to specify a source name/index and a volume"

View file

@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:53+0000\n"
"Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de@redhat.com>\n"
@ -1130,8 +1130,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1191,14 +1191,14 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1543,11 +1543,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Internes Audio"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

492
po/el.po

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-02-05 01:40+0000\n"
"Last-Translator: Carmen Bianca Bakker <carmen@carmenbianca.eu>\n"
"Language-Team: Esperanto <https://translate.fedoraproject.org/projects/"
@ -984,8 +984,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1042,14 +1042,14 @@ msgstr "Sono sur @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunelo por %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunelo al %s/%s"
@ -1386,11 +1386,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Integrita sono"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr ""

975
po/es.po

File diff suppressed because it is too large Load diff

2902
po/eu.po

File diff suppressed because it is too large Load diff

124
po/fi.po
View file

@ -9,9 +9,9 @@ msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-04-22 16:19+0000\n"
"Last-Translator: Ricky Tigg <ricky.tigg@gmail.com>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-20 18:18+0000\n"
"Last-Translator: Jan Kuparinen <copper_fin@hotmail.com>\n"
"Language-Team: Finnish <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/fi/>\n"
"Language: fi\n"
@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.11\n"
"X-Generator: Weblate 4.12.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -742,11 +742,11 @@ msgstr "Peli ulostulo"
#: src/modules/alsa/alsa-mixer.c:2819 src/modules/alsa/alsa-mixer.c:2820
msgid "Chat Output"
msgstr "Pikakeskustelun lähtö"
msgstr "Chatti ulostulo"
#: src/modules/alsa/alsa-mixer.c:2821
msgid "Chat Input"
msgstr "Pikakeskustelun syöttö"
msgstr "Chatti sisääntulo"
#: src/modules/alsa/alsa-mixer.c:2822
msgid "Virtual Surround 7.1"
@ -1141,8 +1141,8 @@ msgstr ""
"liitännäisen nimiö (label)> control=<pilkulla erotettu luettelo "
"syötteenhallinta-arvoja> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-pohjainen taajuuskorjain %s:lla"
@ -1209,14 +1209,14 @@ msgstr "Ääni koneella @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunneli %s@%s:ta varten"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunneli %s/%s:een"
@ -1566,17 +1566,17 @@ msgstr ""
msgid "Invalid log target."
msgstr "Virheellinen lokikirjoituksen kohde."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Sisäinen äänentoisto"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modeemi"
#: src/pulse/error.c:38
msgid "OK"
msgstr "Hyvä on"
msgstr "OK"
#: src/pulse/error.c:39
msgid "Access denied"
@ -1818,7 +1818,7 @@ msgstr "Korkkipyyntöpino on tyhjä: poistetaan korkkivirta"
#: src/utils/pacat.c:425
msgid "Warning: Received more uncork requests than cork requests."
msgstr "Varoitus: Vastaanotettu enemmän cork-poistopyyntöjä kuin cork-pyyntöjä."
msgstr ""
#: src/utils/pacat.c:450
#, c-format
@ -1972,8 +1972,8 @@ msgstr ""
"palvelimella\n"
" --volume=ÄÄNENVOIMAKKUUS Määritä (lineaarinen) "
"aloitusäänenvoimakkuus väliltä 0...65536\n"
" --rate=NÄYTTEENOTTOTAAJUUS Näytteenottotaajuus "
"hertseinä(oletus: 44100)\n"
" --rate=NÄYTTEENOTTOTAAJUUS Näytteenottotaajuus hertseinä(oletus:"
" 44100)\n"
" --format=NÄYTEMUOTO Näytteen tyyppi, yksi seuraavista:"
"s16le, s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be\n"
@ -1993,8 +1993,8 @@ msgstr ""
" --no-remix Älä yli- tai alimiksaa kanavia.\n"
" --no-remap Kartoita kanavat indeksin mukaan, "
"älä nimen mukaan.\n"
" --latency=TAVUA Pyydä määritettyä latenssia "
"tavuissa.\n"
" --latency=TAVUA Pyydä määritettyä latenssia tavuissa."
"\n"
" --process-time=TAVUA Pyydä määritettyä prosessiaikaa "
"pyyntöä kohti tavuissa.\n"
" --property=ASETUS=ARVO Anna määritetylle asetukselle "
@ -2007,29 +2007,24 @@ msgstr ""
#: src/utils/pacat.c:793
msgid "Play back encoded audio files on a PulseAudio sound server."
msgstr "Toista koodattuja äänitiedostoja PulseAudio-äänipalvelimella."
msgstr ""
#: src/utils/pacat.c:797
msgid ""
"Capture audio data from a PulseAudio sound server and write it to a file."
msgstr ""
"Kaappaa äänidataa PulseAudio-äänipalvelimelta ja kirjoita se tiedostoon."
#: src/utils/pacat.c:801
msgid ""
"Capture audio data from a PulseAudio sound server and write it to STDOUT or "
"the specified file."
msgstr ""
"Kaappaa äänidataa PulseAudio-äänipalvelimelta ja kirjoita se STDOUTiin tai "
"määritettyyn tiedostoon."
#: src/utils/pacat.c:805
msgid ""
"Play back audio data from STDIN or the specified file on a PulseAudio sound "
"server."
msgstr ""
"Toista äänidataa STDINistä tai määritetystä tiedostosta PulseAudio-"
"äänipalvelimella."
#: src/utils/pacat.c:819
#, c-format
@ -2079,7 +2074,7 @@ msgstr "Tuntematon tiedostomuoto %s."
#: src/utils/pacat.c:1000
msgid "Failed to parse the argument for --monitor-stream"
msgstr "Argumentin --monitor-stream jäsentäminen epäonnistui"
msgstr ""
#: src/utils/pacat.c:1011
msgid "Invalid sample specification"
@ -2209,7 +2204,7 @@ msgstr "NIMI|#N AVAIN=ARVO"
#: src/utils/pacmd.c:59
msgid "#N KEY=VALUE"
msgstr "#N AVAIN=ARVO"
msgstr ""
#: src/utils/pacmd.c:61
msgid "#N"
@ -2233,7 +2228,7 @@ msgstr "TIEDOSTONIMI NIELU|#N"
#: src/utils/pacmd.c:69 src/utils/pactl.c:2645
msgid "#N SINK|SOURCE"
msgstr "#N SINKKI|LÄHDE"
msgstr ""
#: src/utils/pacmd.c:71 src/utils/pacmd.c:77 src/utils/pacmd.c:78
msgid "1|0"
@ -2249,23 +2244,23 @@ msgstr "NIMI|#N PORT"
#: src/utils/pacmd.c:74 src/utils/pactl.c:2658
msgid "CARD-NAME|CARD-#N PORT OFFSET"
msgstr "KORTIN NIMI|KORTIN-#N PORTTI OFFSET"
msgstr ""
#: src/utils/pacmd.c:75
msgid "TARGET"
msgstr "KOHDE"
msgstr ""
#: src/utils/pacmd.c:76
msgid "NUMERIC-LEVEL"
msgstr "NUMEROTASO"
msgstr ""
#: src/utils/pacmd.c:79
msgid "FRAMES"
msgstr "ÄÄNIRUUDUT"
msgstr ""
#: src/utils/pacmd.c:80 src/utils/pactl.c:2659
msgid "RECIPIENT MESSAGE [MESSAGE_PARAMETERS]"
msgstr "VASTAAJAN VIESTI [MESSAGE_PARAMETERS]"
msgstr ""
#: src/utils/pacmd.c:82
#, c-format
@ -2375,12 +2370,6 @@ msgid ""
"Client Index: %u\n"
"Tile Size: %zu\n"
msgstr ""
"Palvelinmerkkijono: %s\n"
"Kirjastoprotokollan versio: %u\n"
"Palvelinprotokollan versio: %u\n"
"On paikallinen: %s\n"
"Asiakasindeksi: %u\n"
"Laattojen koko: %zu\n"
#: src/utils/pactl.c:294
#, c-format
@ -2407,7 +2396,7 @@ msgstr ""
#: src/utils/pactl.c:320
msgid "availability unknown"
msgstr "saatavuus tuntematon"
msgstr ""
#: src/utils/pactl.c:321
msgid "available"
@ -2423,7 +2412,7 @@ msgstr "Tuntematon"
#: src/utils/pactl.c:332
msgid "Aux"
msgstr "Aux"
msgstr ""
#: src/utils/pactl.c:335
msgid "Line"
@ -2431,27 +2420,27 @@ msgstr "Linja"
#: src/utils/pactl.c:336
msgid "Mic"
msgstr "Mikrofoni"
msgstr ""
#: src/utils/pactl.c:338
msgid "Handset"
msgstr "Luuri"
msgstr ""
#: src/utils/pactl.c:339
msgid "Earpiece"
msgstr "Kuuloke"
msgstr ""
#: src/utils/pactl.c:340
msgid "SPDIF"
msgstr "SPDIF"
msgstr ""
#: src/utils/pactl.c:341
msgid "HDMI"
msgstr "HDMI"
msgstr ""
#: src/utils/pactl.c:342
msgid "TV"
msgstr "TV"
msgstr ""
#: src/utils/pactl.c:345
msgid "USB"
@ -2522,11 +2511,11 @@ msgstr "\tPortit:\n"
#: src/utils/pactl.c:708 src/utils/pactl.c:892
#, c-format
msgid "\t\t%s: %s (type: %s, priority: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (tyyppi: %s, prioriteetti: %u%s%s, %s)\n"
msgstr ""
#: src/utils/pactl.c:710 src/utils/pactl.c:894 src/utils/pactl.c:1256
msgid ", availability group: "
msgstr ", saatavuusryhmä: "
msgstr ""
#: src/utils/pactl.c:715 src/utils/pactl.c:899
#, c-format
@ -2664,7 +2653,6 @@ msgstr "\tProfiilit:\n"
#, c-format
msgid "\t\t%s: %s (sinks: %u, sources: %u, priority: %u, available: %s)\n"
msgstr ""
"\t\t%s: %s (nielut: %u, lähteet: %u, prioriteetti: %u, käytettävissä: %s)\n"
#: src/utils/pactl.c:1245
#, c-format
@ -2676,8 +2664,6 @@ msgstr "\tAktiivinen profiili: %s\n"
msgid ""
"\t\t%s: %s (type: %s, priority: %u, latency offset: %<PRId64> usec%s%s, %s)\n"
msgstr ""
"\t\t%s: %s (tyyppi: %s, prioriteetti: %u, latenssipoikkeama: %<PRId64> "
"usec%s%s, %s)\n"
#: src/utils/pactl.c:1261
#, c-format
@ -2685,13 +2671,11 @@ msgid ""
"\t\t\tProperties:\n"
"\t\t\t\t%s\n"
msgstr ""
"\t\t\tOminaisuudet:\n"
"\t\t\t\t%s\n"
#: src/utils/pactl.c:1265
#, c-format
msgid "\t\t\tPart of profile(s): %s"
msgstr "\t\t\tOsa profiilista (profiileista): %s"
msgstr ""
#: src/utils/pactl.c:1290 src/utils/pactl.c:1954 src/utils/pactl.c:2022
#, c-format
@ -2828,7 +2812,7 @@ msgstr "Viestin lähetys epäonnistui: %s"
#: src/utils/pactl.c:1695
#, c-format
msgid "list-handlers message failed: %s"
msgstr "listakäsittelijöiden viesti epäonnistui: %s"
msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
@ -2842,7 +2826,6 @@ msgstr "list-handlers viestivastaus ei ole JSON-taulukko"
#, c-format
msgid "list-handlers message response array element %d is not a JSON object"
msgstr ""
"listakäsittelijöiden viestivastaustaulukon elementti %d ei ole JSON-objekti"
#: src/utils/pactl.c:1800
#, c-format
@ -2858,11 +2841,7 @@ msgid_plural ""
"Failed to set volume: You tried to set volumes for %d channels, whereas "
"channel(s) supported = %d\n"
msgstr[0] ""
"Äänenvoimakkuuden asettaminen epäonnistui: Yritit asettaa äänenvoimakkuutta "
"%d kanavalle, kun taas tuetut kanavat = %d\n"
msgstr[1] ""
"Äänenvoimakkuuden asettaminen epäonnistui: Yritit asettaa äänenvoimakkuutta "
"%d kanaville, kun taas tuetut kanavat = %d\n"
#: src/utils/pactl.c:2107
#, c-format
@ -2899,7 +2878,7 @@ msgstr "lähde"
#: src/utils/pactl.c:2167
msgid "sink-input"
msgstr "nielun sisääntulo"
msgstr ""
#: src/utils/pactl.c:2170
msgid "source-output"
@ -2915,7 +2894,7 @@ msgstr "asiakas"
#: src/utils/pactl.c:2179
msgid "sample-cache"
msgstr "näyte-välimuisti"
msgstr ""
#: src/utils/pactl.c:2182
msgid "server"
@ -2923,12 +2902,12 @@ msgstr "palvelin"
#: src/utils/pactl.c:2185
msgid "card"
msgstr "kortti"
msgstr ""
#: src/utils/pactl.c:2206
#, c-format
msgid "Event '%s' on %s #%u\n"
msgstr "Tapahtuma '%s' %s #%u\n"
msgstr ""
#: src/utils/pactl.c:2514
msgid "Got SIGINT, exiting."
@ -2940,7 +2919,7 @@ msgstr "Virheellinen äänenvoimakkuuden määritys"
#: src/utils/pactl.c:2581
msgid "Volume outside permissible range.\n"
msgstr "Äänenvoimakkuus sallitun alueen ulkopuolella.\n"
msgstr ""
#: src/utils/pactl.c:2594
msgid "Invalid number of volume specifications.\n"
@ -2972,7 +2951,7 @@ msgstr "TIEDOSTONIMI [NIMI]"
#: src/utils/pactl.c:2641
msgid "NAME [SINK]"
msgstr "NIMI [NIELU]"
msgstr ""
#: src/utils/pactl.c:2653
msgid "NAME|#N VOLUME [VOLUME ...]"
@ -3001,9 +2980,6 @@ msgid ""
"The special names @DEFAULT_SINK@, @DEFAULT_SOURCE@ and @DEFAULT_MONITOR@\n"
"can be used to specify the default sink, source and monitor.\n"
msgstr ""
"\n"
"Erikoisnimiä @DEFAULT_SINK@, @DEFAULT_SOURCE@ ja @DEFAULT_MONITOR@\n"
"voidaan käyttää oletusnielun, lähteen ja näytön määrittämiseen.\n"
#: src/utils/pactl.c:2664
#, c-format
@ -3047,7 +3023,7 @@ msgstr "Virheellinen muotoarvo ”%s”"
#: src/utils/pactl.c:2778
#, c-format
msgid "Specify nothing, or one of: %s"
msgstr "Määritä tyhjäksi tai jokin seuraavista: %s"
msgstr ""
#: src/utils/pactl.c:2788
msgid "Please specify a sample file to load"
@ -3203,8 +3179,6 @@ msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"Ylimääräisiä argumentteja annettu, ne jätetään huomiotta. Huomaa, että "
"kaikki viestiparametrit on annettava yhtenä merkkijonona."
#: src/utils/pactl.c:3182
msgid ""
@ -3220,7 +3194,7 @@ msgstr "Kortin nimi/indeksi ja portin nimi ja viivästysasetus on annettava"
#: src/utils/pactl.c:3201
msgid "Could not parse latency offset"
msgstr "Latenssipoikkeamaa ei voitu jäsentää"
msgstr ""
#: src/utils/pactl.c:3213
msgid "No valid command specified."

View file

@ -16,9 +16,9 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2023-03-19 17:20+0000\n"
"Last-Translator: grimst <grimaitres@gmail.com>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2020-12-13 17:35+0000\n"
"Last-Translator: Julien Humbert <julroy67@gmail.com>\n"
"Language-Team: French <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/fr/>\n"
"Language: fr\n"
@ -26,10 +26,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.15.2\n"
"X-Generator: Weblate 4.3.2\n"
#: src/daemon/cmdline.c:113
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@ -114,8 +114,8 @@ msgstr ""
" --start Lancer le démon sil nest pas en "
"cours dexécution\n"
" -k --kill Tuer un démon en cours dexécution\n"
" --check Rechercher un démon en cours d"
"exécution (retourne uniquement un code de sortie)\n"
" --check Rechercher un démon en cours "
"dexécution (retourne uniquement un code de sortie)\n"
"\n"
"OPTIONS :\n"
" --system[=BOOL] Exécuter en tant quinstance "
@ -136,8 +136,8 @@ msgstr ""
"déchargement de modules\n"
" requis par lutilisateur de module "
"après le lancement\n"
" --disallow-exit[=BOOL] Interdire la sortie requise par l"
"utilisateur\n"
" --disallow-exit[=BOOL] Interdire la sortie requise par "
"lutilisateur\n"
" --exit-idle-time=SECS Quitter le démon lorsquinactif et "
"que cette\n"
" période sest écoulée\n"
@ -169,8 +169,6 @@ msgstr ""
"charge\n"
" --disable-shm[=BOOL] Désactiver la prise en charge de "
"mémoire partagée.\n"
" --enable-memfd[=BOOL] Activer le support de mémoire "
"partagée memfd.\n"
"\n"
"SCRIPT DE LANCEMENT :\n"
" -L, --load=\"MODULE ARGUMENTS\" Charger le module du greffon "
@ -503,23 +501,29 @@ msgstr ""
"plus précise en cours."
#: src/daemon/main.c:878
#, fuzzy
msgid "Running in system mode, but --disallow-exit not set."
msgstr "Exécution en mode système, mais --disallow-exit nest pas défini."
msgstr ""
"Le démon sexécute en mode système, mais --disallow-exit nest pas défini!"
#: src/daemon/main.c:881
#, fuzzy
msgid "Running in system mode, but --disallow-module-loading not set."
msgstr ""
"Exécution en mode système, mais --disallow-module-loading nest pas défini."
"Le démon sexécute en mode système, mais --disallow-module-loading nest pas "
"défini!"
#: src/daemon/main.c:884
#, fuzzy
msgid "Running in system mode, forcibly disabling SHM mode."
msgstr "Exécution en mode système, désactivation forcée du mode SHM."
msgstr "Le démon sexécute en mode système, désactivation forcée du mode SHM!"
#: src/daemon/main.c:889
#, fuzzy
msgid "Running in system mode, forcibly disabling exit idle time."
msgstr ""
"Exécution en mode système, désactivation forcée de la fermeture après délai "
"dinactivité."
"Le démon sexécute en mode système, désactivation forcée de la fermeture "
"après délai dinactivité!"
#: src/daemon/main.c:922
msgid "Failed to acquire stdio."
@ -554,6 +558,7 @@ msgid "Failed to get machine ID"
msgstr "Échec lors de lobtention de lID de la machine"
#: src/daemon/main.c:1145
#, fuzzy
msgid ""
"OK, so you are running PA in system mode. Please make sure that you actually "
"do want to do that.\n"
@ -561,11 +566,13 @@ msgid ""
"Documentation/User/WhatIsWrongWithSystemWide/ for an explanation why system "
"mode is usually a bad idea."
msgstr ""
"Ok, vous êtes en train d'exécuter PA en mode système. Assurez-vous que vous "
"voulez vraiment faire cela.\n"
"Vous exécutez PA dans un mode système. Sachez que vous ne devriez pas faire "
"cela.\n"
"Si vous choisissez malgré tout de le faire, vous êtes responsable de tout "
"dysfonctionnement inattendu.\n"
"Veuillez lire http://www.freedesktop.org/wiki/Software/PulseAudio/"
"Documentation/User/WhatIsWrongWithSystemWide/ pour savoir pourquoi le mode "
"système est généralement une mauvaise idée."
"Documentation/User/WhatIsWrongWithSystemWide/ pour comprendre pourquoi le "
"mode système est généralement une mauvaise idée."
#: src/daemon/main.c:1161
msgid "pa_pid_file_create() failed."
@ -576,8 +583,9 @@ msgid "pa_core_new() failed."
msgstr "Échec de pa_core_new()."
#: src/daemon/main.c:1268
#, fuzzy
msgid "command line arguments"
msgstr "paramètres de la ligne de commande"
msgstr "Trop de paramètres."
#: src/daemon/main.c:1275
#, c-format
@ -1176,8 +1184,8 @@ msgstr ""
"autoloaded=<définir si ce module est chargé automatiquement> "
"use_volume_sharing=<oui ou non> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1241,14 +1249,14 @@ msgstr "Audio sur @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel pour %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel vers %s/%s"
@ -1598,11 +1606,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Cible du journal non valide."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Audio interne"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1850,10 +1858,11 @@ msgid "Cork request stack is empty: uncorking stream"
msgstr "La pile de requêtes de bouchons est vide : débouchonnage du flux"
#: src/utils/pacat.c:425
#, fuzzy
msgid "Warning: Received more uncork requests than cork requests."
msgstr ""
"Avertissement : il a été reçu davantage de requêtes de bouchonnage que de "
"requêtes de bouchonnage."
"Avertissement : il a été reçu davantage de requêtes de bouchonnage que de "
"requêtes de débouchonnage !"
#: src/utils/pacat.c:450
#, c-format

View file

@ -11,8 +11,8 @@ msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2023-04-14 18:20+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-09-01 12:04+0000\n"
"Last-Translator: Fran Diéguez <frandieguez@gnome.org>\n"
"Language-Team: Galician <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/gl/>\n"
@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.15.2\n"
"X-Generator: Weblate 4.8\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -189,13 +189,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail agarda un argumento booleano"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level agarda un argumento no nivel do rexistro (xa sexa numérico, "
"dentro do rango de 0-4 ou ben un destos valores: error, warn, notice, info, "
"debug)."
"dentro do rango de 0..4; xa sexa un de debug, info, notice, warn, ou error)."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
@ -1150,8 +1150,8 @@ msgstr ""
"de canles> autoloaded=<estabelézao se este módulo se carga automaticamente> "
"use_volume_sharing=<si ou non> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Ecualizador baseado en FFT en %s"
@ -1219,14 +1219,14 @@ msgstr "Son en @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Túnel para %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Túnel a %s/%s"
@ -1236,6 +1236,7 @@ msgid "Virtual surround sink"
msgstr "Sumideiro envolvente virtual"
#: src/modules/module-virtual-surround-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"master=<name of sink to filter> sink_master=<name of sink to filter> "
@ -1246,9 +1247,9 @@ msgid ""
"this module is being loaded automatically> "
msgstr ""
"sink_name=<nome para o destino> sink_properties=<propiedades para o destino> "
"master=<nome do destino a filtrar> sink_master=<nome do destino a filtrar> "
"format=<formato de mostra> rate=<taxa de mostra> channels=<número de canles> "
"channel_map=<asignación de canles> use_volume_sharing=<si ou non> "
"master=<nome do destino a filtrar> sink_master=<nome do destino a "
"filtrar>format=<formato de mostra> rate=<taxa de mostra> channels=<número de "
"canles> channel_map=<asignación de canles> use_volume_sharing=<si ou non> "
"force_flat_volume=<si ou non> hrir=/ruta/ao/left_hrir.wav "
"autoloaded=<estabelecer se este módulo se vai cargar automaticamente> "
@ -1575,11 +1576,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Obxectivo do rexistro incorrecto."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Audio interno"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Módem"
@ -1894,7 +1895,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "Produciuse un fallo en pa_stream_update_timing_info(): %s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1973,10 +1974,8 @@ msgstr ""
" -v, --verbose Activar operacións verbosas\n"
"\n"
" -s, --server=SERVER O nome do servidor co que conectar\n"
" -d, --device=DEVICE O nome do sumideiro/orixe ao que "
"conectarse. Os nomes especiais @DEFAULT_SINK@, @DEFAULT_SOURCE@ e "
"@DEFAULT_MONITOR@ poden usarse para especificar o sumideiro, orixe ou "
"monitor predeterminado respectivamente.\n"
" -d, --device=DEVICE O nome do dispositivo co que "
"conectar\n"
" -n, --client-name=NAME Como chamar a este cliente no "
"servidor\n"
" --stream-name=NAME Como chamar a este fluxo no "
@ -1985,10 +1984,12 @@ msgstr ""
"inicial no intervalo entre 0...65536\n"
" --rate=SAMPLERATE A taxa de mostra en Hz (defaults to "
"44100)\n"
" --format=SAMPLEFORMAT O tipo de mostra, para máis "
"información vexa\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" --format=SAMPLEFORMAT O tipo de mostra, unha de s16le, "
"s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
" s24-32le, s24-32be (o predeterminado "
"é s16ne)\n"
" --channels=CHANNELS O número de canles, 1 para mono, 2 "
"para estéreo\n"
" (predeterminado é 2)\n"
@ -2391,7 +2392,7 @@ msgid "Failed to get server information: %s"
msgstr "Produciuse un fallo ao tentar obter información do servidor: %s"
#: src/utils/pactl.c:224 src/utils/pactl.c:236
#, c-format
#, fuzzy, c-format
msgid "%s\n"
msgstr "%s\n"
@ -2472,18 +2473,22 @@ msgid "Earpiece"
msgstr "Auricular"
#: src/utils/pactl.c:340
#, fuzzy
msgid "SPDIF"
msgstr "SPDIF"
#: src/utils/pactl.c:341
#, fuzzy
msgid "HDMI"
msgstr "HDMI"
#: src/utils/pactl.c:342
#, fuzzy
msgid "TV"
msgstr "TV"
#: src/utils/pactl.c:345
#, fuzzy
msgid "USB"
msgstr "USB"
@ -2863,18 +2868,15 @@ msgstr "Produciuse un fallo no mensaxe list-handlers: %s"
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
msgstr ""
"Non foi posíbel analizar correctamente a resposta da mensaxe de list-handlers"
#: src/utils/pactl.c:1718
msgid "list-handlers message response is not a JSON array"
msgstr "A respostaa da mensaxe de list-handlers non é unha matriz de JSON"
msgstr ""
#: src/utils/pactl.c:1729
#, c-format
msgid "list-handlers message response array element %d is not a JSON object"
msgstr ""
"O elemento %d da matriz de resposta da mensaxe de list-handlers non é un "
"obxecto JSON"
#: src/utils/pactl.c:1800
#, c-format
@ -3038,7 +3040,7 @@ msgstr ""
"poden usarse para especificar o destino, orixe e monitor predeterminados.\n"
#: src/utils/pactl.c:2664
#, c-format
#, fuzzy, c-format
msgid ""
"\n"
" -h, --help Show this help\n"
@ -3054,9 +3056,6 @@ msgstr ""
"\n"
" -h, --help Mostra esta axuda\n"
" --version Mostra a versión\n"
"\n"
" -f, --format=FORMAT O formato da saída. Puede ser "
"«normal» o «json»\n"
" -s, --server=SERVIDOR O nome do servidor co que conectar\n"
" -n, --client-name=NOME Como chamar a este cliente no "
"servidor\n"
@ -3073,9 +3072,9 @@ msgstr ""
"Vinculado con libpulse %s\n"
#: src/utils/pactl.c:2751
#, c-format
#, fuzzy, c-format
msgid "Invalid format value '%s'"
msgstr "Formato do valor «%s» incorrecto"
msgstr "Nome do fluxo «%s» incorrecto"
#: src/utils/pactl.c:2778
#, c-format
@ -3160,16 +3159,18 @@ msgid "You have to specify a source name"
msgstr "Ten que especificar un nome para a fonte"
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076
#, fuzzy
msgid "You have to specify a sink name/index"
msgstr "Ten que especificar un nome/índice de destino"
msgstr "Ten que especificar un nome de destino"
#: src/utils/pactl.c:3008
msgid "You have to specify a sink name/index and a volume"
msgstr "Debe especificar un nome/índice de destino e un volume"
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#, fuzzy
msgid "You have to specify a source name/index"
msgstr "Ten que especificar un nome/índice de fonte"
msgstr "Ten que especificar un nome para a fonte"
#: src/utils/pactl.c:3031
msgid "You have to specify a source name/index and a volume"
@ -3234,18 +3235,15 @@ msgid "Invalid source output index specification"
msgstr "Especificación de índice de saída de orixe non válida"
#: src/utils/pactl.c:3162
#, fuzzy
msgid "You have to specify at least an object path and a message name"
msgstr ""
"Debe especificar cando menos unha ruta de acceso ao obxecto e un nome de "
"mensaxe"
msgstr "Debe especificar un nome/índice de destino e un nome de porto"
#: src/utils/pactl.c:3172
msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"Fornecéronse argumentos de máis, serán ignorados. Teña en conta que todos os "
"parámetros de mensaxe deben ingresarse como unha única cadea."
#: src/utils/pactl.c:3182
msgid ""
@ -3310,7 +3308,7 @@ msgid "WARNING: Child process terminated by signal %u\n"
msgstr "AVISO: o proceso fillo foi rematado polo sinal %u\n"
#: src/utils/pasuspender.c:228
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options] -- PROGRAM [ARGUMENTS ...]\n"
"\n"
@ -3322,9 +3320,7 @@ msgid ""
"to\n"
"\n"
msgstr ""
"%s [opcións] --PROGRAMA [ARGUMENTOS ...]... \n"
"\n"
"Suspende temporalmente PulseAudio mentres se executa o PROGRAMA.\n"
"%s [opcións] ... \n"
"\n"
" -h, --help Mostra esta axuda\n"
" --version Mostra a versión\n"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:53+0000\n"
"Last-Translator: Sweta Kothari <swkothar@redhat.com>\n"
"Language-Team: Gujarati\n"
@ -1147,8 +1147,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1211,14 +1211,14 @@ msgstr "@HOSTNAME@ પર ઓડિયો"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1569,11 +1569,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] અયોગ્ય લોગ લક્ષ્ય '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "આંતરિક ઓડિયો"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "મોડેમ"

View file

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-05-12 11:02+0000\n"
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
"Language-Team: Hebrew <https://translate.fedoraproject.org/projects/"
@ -980,8 +980,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1038,14 +1038,14 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1382,11 +1382,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "צליל פנימי"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "מודם"

1754
po/hi.po

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-03-28 19:10+0000\n"
"Last-Translator: Gogo Gogsi <linux.hr@protonmail.com>\n"
"Language-Team: Croatian <https://translate.fedoraproject.org/projects/"
@ -1160,8 +1160,6 @@ msgstr ""
"autoloaded=<postavi ako se ovaj modul učitava automatski> "
"use_volume_sharing=<da ili ne> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
@ -1229,16 +1227,12 @@ msgstr "Zvuk na @NAZIVRAČUNALA@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunel za %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
@ -1589,11 +1583,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Neispravno odredište zapisa."
#: src/pulsecore/sink.c:3609 src/pulsecore/sink.c:3600
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Ugrađeni zvuk"
#: src/pulsecore/sink.c:3614 src/pulsecore/sink.c:3605
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1910,7 +1904,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() neuspjelo: %s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1991,9 +1985,7 @@ msgstr ""
" -s, --server=POSLUŽITELJ Naziv poslužitelja za "
"povezivanje\n"
" -d, --device=UREĐAJ Naziv slivnika/izvora za "
"povezivanje. Posebni nazivi @DEFAULT_SINK@, @DEFAULT_SOURCE@ i "
"@DEFAULT_MONITOR@ mogu se koristiti za određivanje zadanog slivnika, izvora "
"i nadgledanja.\n"
"povezivanje\n"
" -n, --client-name=NAZIV Naziv klijenta na poslužitelju\n"
" --stream-name=NAZIV Naziv strujanja na poslužitelju\n"
" --volume=GLASNOĆA ZVUKA Određuje početnu (linearnu) "
@ -2002,7 +1994,7 @@ msgstr ""
" --format=FORMAT UZORKA Vrsta uzorka, pogledajte\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" za moguće vrijednosti (zadano je "
" za moguće vrijenosti (zadano je "
"s16ne)\n"
" --channels=KANALI Broj kanala, 1 za mono, 2 za stereo\n"
" (zadano 2)\n"
@ -2010,14 +2002,14 @@ msgstr ""
"umjesto zadanog\n"
" --fix-format Uzima uzorak formata iz slivnika/"
"izvora s kojim\n"
" je strujanje povezano.\n"
" je tok povezan.\n"
" --fix-rate Uzima frekvenciju iz slivnika/izvora "
"s kojim\n"
" je strujanje povezano.\n"
" je tok povezan.\n"
" --fix-channels Uzima broj kanala i mapiranje "
"kanala\n"
" iz slivnika/izvora s kojim je "
"strujanje povezano.\n"
" iz slivnika/izvora s kojim je tok "
"povezan.\n"
" --no-remix Ne smanjuj ili pojačavaj kanale.\n"
" --no-remap Mapiraj kanale prema sadržaju "
"umjesto nazivu.\n"
@ -2029,8 +2021,8 @@ msgstr ""
"msek.\n"
" --process-time-msec=MSEK Zahtijevaj određeno vrijeme procesa "
"po zahtjevu u msek.\n"
" --property=SVOJSTVO=VRIJEDNOST Postavi određeno svojstvo za "
"određenu vrijednost.\n"
" --property=VLASNIŠTVO=VRIJEDNOST Postavi određeno vlasništvo "
"za određenu vrijednost.\n"
" --raw Snimaj/Reproduciraj osnovne PCM "
"podatke.\n"
" --passthrough Prolaz podataka.\n"

View file

@ -10,9 +10,9 @@ msgstr ""
"Project-Id-Version: PulseAudio master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2022-08-09 21:19+0000\n"
"Last-Translator: Balázs Meskó <meskobalazs@mailbox.org>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-11-21 13:16+0000\n"
"Last-Translator: . Ovari <ovari123@zoho.com>\n"
"Language-Team: Hungarian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/hu/>\n"
"Language: hu\n"
@ -20,13 +20,13 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13\n"
"X-Generator: Weblate 4.9\n"
"X-Poedit-Language: Hungarian\n"
"X-Poedit-Country: HUNGARY\n"
"X-Poedit-SourceCharset: utf-8\n"
#: src/daemon/cmdline.c:113
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@ -187,6 +187,7 @@ msgid "--fail expects boolean argument"
msgstr "a --fail paraméter logikai értéket vár"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
@ -215,13 +216,14 @@ msgid "--use-pid-file expects boolean argument"
msgstr "a --use-pid-file paraméter logikai értéket vár"
#: src/daemon/cmdline.c:328
#, fuzzy
msgid ""
"Invalid log target: use either 'syslog', 'journal', 'stderr' or 'auto' or a "
"valid file name 'file:<path>', 'newfile:<path>'."
msgstr ""
"Érvénytelen naplózási cél: használja a „syslog”, „journal”, „stderr” vagy az "
"„auto” egyikét, vagy egy érvényes fájlnevet: „file:<útvonal>”, "
"„newfile:<útvonal>”."
"„auto” egyikét, vagy egy érvényes fájlnevet: „file:<útvonal>”, „newfile:"
"<útvonal>”."
#: src/daemon/cmdline.c:330
msgid ""
@ -958,7 +960,7 @@ msgstr ""
"más érték volt."
#: src/modules/alsa/alsa-util.c:1183 src/modules/alsa/alsa-util.c:1277
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu byte (%lu "
"ms).\n"
@ -981,7 +983,7 @@ msgstr[1] ""
"ezt a problémát az ALSA fejlesztői felé."
#: src/modules/alsa/alsa-util.c:1249
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li byte (%s"
"%lu ms).\n"
@ -1017,7 +1019,7 @@ msgstr ""
"ezt a problémát az ALSA fejlesztői felé."
#: src/modules/alsa/alsa-util.c:1339
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu byte "
"(%lu ms).\n"
@ -1161,8 +1163,8 @@ msgstr ""
"channel_map=<csatornaleképzés> autoloaded=<beállítva, ha ez a modul "
"automatikusan betöltődik> use_volume_sharing=<igen vagy nem> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT alapú hangszínszabályzó ezen: %s"
@ -1176,6 +1178,7 @@ msgid "Virtual LADSPA sink"
msgstr "Látszólagos LADSPA nyelő"
#: src/modules/module-ladspa-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"sink_input_properties=<properties for the sink input> master=<name of sink "
@ -1194,8 +1197,7 @@ msgstr ""
"control=<bemenetszabályzó értékek vesszővel elválasztott listája> "
"input_ladspaport_map=<bemeneti LADSPA portnevek vesszővel elválasztott "
"listája> output_ladspaport_map=<kimeneti LADSPA portnevek vesszővel "
"elválasztott listája> autoloaded=<állítsa be ha a modul automatikusan "
"töltődik be> "
"elválasztott listája> "
#: src/modules/module-null-sink.c:46
msgid "Clocked NULL sink"
@ -1228,14 +1230,14 @@ msgstr "Hangok ezen a számítógépen: @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Alagút ennek: %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Alagút ehhez: %s/%s"
@ -1245,6 +1247,7 @@ msgid "Virtual surround sink"
msgstr "Virtuális térhatású nyelő"
#: src/modules/module-virtual-surround-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"master=<name of sink to filter> sink_master=<name of sink to filter> "
@ -1259,7 +1262,6 @@ msgstr ""
"rate=<mintavételezési gyakoriság> channels=<csatornák száma> "
"channel_map=<csatornaleképzés> use_volume_sharing=<igen vag nem> "
"force_flat_volume=<igen vag nem> hrir=/útvonal/left_hrir.wav "
"autoloaded=<állítsa be ha a modul automatikusan töltődik be> "
#: src/modules/raop/module-raop-discover.c:295
msgid "Unknown device model"
@ -1544,7 +1546,7 @@ msgid "invalid"
msgstr "érvénytelen"
#: src/pulsecore/core-util.c:1790
#, c-format
#, fuzzy, c-format
msgid ""
"XDG_RUNTIME_DIR (%s) is not owned by us (uid %d), but by uid %d! (This could "
"e.g. happen if you try to connect to a non-root PulseAudio as a root user, "
@ -1552,7 +1554,7 @@ msgid ""
msgstr ""
"Az XDG_RUNTIME_DIR (%s) tulajdonosa nem a PulseAudio (uid %d), hanem ez az "
"uid: %d! (Ez például akkor fordulhat elő, ha egy nem rootként futó "
"PulseAudióhoz root felhasználóként próbál csatlakozni a natív protokollon. "
"PulseAudio-hoz root felhasználóként próbál csatlakozni a natív protokollon. "
"Ne tegye.)"
#: src/pulsecore/core-util.h:97
@ -1584,11 +1586,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Érvénytelen naplózási cél."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Belső hangforrás"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1908,7 +1910,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "A „pa_stream_update_timing_info()” függvényhívás meghiúsult: %s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1975,7 +1977,7 @@ msgid ""
" --monitor-stream=INDEX Record from the sink input with "
"index INDEX.\n"
msgstr ""
"%s [KAPCSOLÓK]\n"
"%s [KAPCSOLÓ]\n"
"\n"
"%s\n"
"\n"
@ -2018,8 +2020,8 @@ msgstr ""
" --fix-channels A csatornaszám és a csatornaleképzés "
"átvétele a nyelőtől/forrástól,\n"
" amelyhez az adatfolyam csatlakozik.\n"
" --no-remix Ne keverjen fel vagy le csatornákat."
"\n"
" --no-remix Ne keverjen fel vagy le "
"csatornákat.\n"
" --no-remap Csatornák leképezése index és nem "
"név szerint.\n"
" --latency=BÁJT A bájtokban megadott késleltetés "
@ -2374,14 +2376,14 @@ msgid "Failed to get statistics: %s"
msgstr "Nem sikerült a statisztika lekérdezése: %s"
#: src/utils/pactl.c:199
#, c-format
#, fuzzy, c-format
msgid "Currently in use: %u block containing %s bytes total.\n"
msgid_plural "Currently in use: %u blocks containing %s bytes total.\n"
msgstr[0] "Jelenleg használt: %u blokk, összesen %s bájt tartalommal.\n"
msgstr[1] "Jelenleg használt: %u blokk, összesen %s bájt tartalommal.\n"
#: src/utils/pactl.c:205
#, c-format
#, fuzzy, c-format
msgid "Allocated during whole lifetime: %u block containing %s bytes total.\n"
msgid_plural ""
"Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
@ -2560,9 +2562,9 @@ msgid "\tPorts:\n"
msgstr "\tPortok:\n"
#: src/utils/pactl.c:708 src/utils/pactl.c:892
#, c-format
#, fuzzy, c-format
msgid "\t\t%s: %s (type: %s, priority: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (típus: %s, prioritás: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (nyelők: %u, források: %u, prioritás: %u, elérhető: %s)\n"
#: src/utils/pactl.c:710 src/utils/pactl.c:894 src/utils/pactl.c:1256
msgid ", availability group: "
@ -2715,8 +2717,6 @@ msgstr "\tAktív profil: %s\n"
msgid ""
"\t\t%s: %s (type: %s, priority: %u, latency offset: %<PRId64> usec%s%s, %s)\n"
msgstr ""
"\t\t%s: %s (típus: %s, prioritás: %u, késleltetési eltolás: %<PRId64> "
"usec%s%s, %s)\n"
#: src/utils/pactl.c:1261
#, c-format
@ -2888,7 +2888,7 @@ msgid "Failed to unload module: Module %s not loaded"
msgstr "Nem sikerült eltávolítani a modult: nincs betöltve %s nevű modul"
#: src/utils/pactl.c:1818
#, c-format
#, fuzzy, c-format
msgid ""
"Failed to set volume: You tried to set volumes for %d channel, whereas "
"channel(s) supported = %d\n"
@ -3044,7 +3044,7 @@ msgstr ""
"használhatók az alapértelmezett nyelő, forrás és megfigyelő megadására.\n"
#: src/utils/pactl.c:2664
#, c-format
#, fuzzy, c-format
msgid ""
"\n"
" -h, --help Show this help\n"
@ -3061,8 +3061,6 @@ msgstr ""
" -h, --help Ezen súgó megjelenítése\n"
" --version Verziószám megjelenítése\n"
"\n"
" -f, --format=FORMAT A kimenet formátuma. „normal” vagy "
"„json”.\n"
" -s, --server=KISZOLGÁLÓ Csatlakozás ehhez a kiszolgálóhoz\n"
" -n, --client-name=NÉV A kliens neve a kiszolgálón\n"
@ -3161,16 +3159,18 @@ msgid "You have to specify a source name"
msgstr "Meg kell adnia egy forrás nevét"
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076
#, fuzzy
msgid "You have to specify a sink name/index"
msgstr "Meg kell adnia egy nyelő nevét/indexét"
msgstr "Meg kell adnia egy nyelő nevét"
#: src/utils/pactl.c:3008
msgid "You have to specify a sink name/index and a volume"
msgstr "Meg kell adnia egy nyelő nevét vagy indexét és egy hangerőt"
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#, fuzzy
msgid "You have to specify a source name/index"
msgstr "Meg kell adnia egy forrás nevét/indexét"
msgstr "Meg kell adnia egy forrás nevét"
#: src/utils/pactl.c:3031
msgid "You have to specify a source name/index and a volume"
@ -3235,17 +3235,15 @@ msgid "Invalid source output index specification"
msgstr "A forrás bemeneti indexének megadása érvénytelen"
#: src/utils/pactl.c:3162
#, fuzzy
msgid "You have to specify at least an object path and a message name"
msgstr "Meg kell adnia legalább egy objektumútvonalat és egy üzenetnevet"
msgstr "Meg kell adnia a nyelő nevét vagy indexét, és egy port nevét"
#: src/utils/pactl.c:3172
msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"Túl sok argumentum lett megadva, figyelmen kívül lesznek hagyva. Vegye "
"figyelembe, hogy az üzenetparamétereket egyetlen karakterláncban kell "
"megadni."
#: src/utils/pactl.c:3182
msgid ""
@ -3311,7 +3309,7 @@ msgstr ""
"FIGYELMEZTETÉS: A gyermek folyamat a következő szignállal fejeződött be: %u\n"
#: src/utils/pasuspender.c:228
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options] -- PROGRAM [ARGUMENTS ...]\n"
"\n"
@ -3323,9 +3321,7 @@ msgid ""
"to\n"
"\n"
msgstr ""
"%s [KAPCSOLÓK] -- PROGRAM [ARGUMENTUMOK …]\n"
"\n"
"A PulseAudio ideiglenes felfüggesztése, amíg a PROGRAM fut.\n"
"%s [KAPCSOLÓK] ... \n"
"\n"
" -h, --help Ezen súgó megjelenítése\n"
" --version Verziószám megjelenítése\n"

176
po/id.po
View file

@ -9,8 +9,8 @@ msgstr ""
"Project-Id-Version: PulseAudio master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2024-11-03 10:40+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-09-24 12:05+0000\n"
"Last-Translator: Andika Triwidada <andika@gmail.com>\n"
"Language-Team: Indonesian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/id/>\n"
@ -19,10 +19,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.8.2\n"
"X-Generator: Weblate 4.8\n"
#: src/daemon/cmdline.c:113
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"\n"
@ -113,8 +113,8 @@ msgstr ""
"OPSI:\n"
" --system[=BOOL] Jalankan sebagai instansi seluruh "
"sistem\n"
" -D, --daemonize[=BOOL] Jadikan daemon setelah awal mula\n"
" --fail[=BOOL] Keluar ketika awal mula gagal\n"
" -D, --daemonize[=BOOL] Jadikan daemon setelah awalan\n"
" --fail[=BOOL] Keluar ketika awalan gagal\n"
" --high-priority[=BOOL] Coba tata ke aras nice tinggi\n"
" (hanya tersedia sebagai root, ketika "
"SUID\n"
@ -126,19 +126,21 @@ msgstr ""
" atau RLIMIT_RTPRIO yang dinaikkan)\n"
" --disallow-module-loading[=BOOL] Larang muat/bongkar modul yang "
"diminta\n"
" pengguna setelah awal mula\n"
" pengguna setelah awalan\n"
" --disallow-exit[=BOOL] Larang permintaan keluar dari "
"pengguna\n"
" --exit-idle-time=SECS Matikan daemon ketika menganggur "
"dan\n"
" waktu ini berlalu\n"
" waktu ini habis\n"
" --module-idle-time=SECS Bongkar modul yang dimuat sendiri "
"ketika\n"
" menganggur dan waktu ini habis\n"
" --scache-idle-time=SECS Bongkar contoh yang dimuat sendiri "
"ketika\n"
" menganggur dan waktu ini berlalu\n"
" menganggur dan waktu ini habis\n"
" --log-level[=LEVEL] Naikkan atau tata aras kerincian\n"
" -v --verbose Naikkan aras kerincian\n"
" --log-target={auto,syslog,stderr,file:PATH,newfile:PATH} \n"
" Nyatakan target log\n"
" -v Naikkan aras kerincian\n"
" --log-target={auto,syslog,stderr} Nyatakan target log\n"
" --log-meta[=BOOL] Sertakan lokasi kode dalam pesan "
"log\n"
" --log-time[=BOOL] Sertakan penanda waktu dalam pesan "
@ -157,10 +159,8 @@ msgstr ""
" --no-cpu-limit[=BOOL] Jangan pasang pembatas beban CPU\n"
" pada platform yang mendukungannya.\n"
" --disable-shm[=BOOL] Matikan dukungan memori bersama.\n"
" --enable-memfd[=BOOL] Fungsikan dukungan memori bersama "
"memfd.\n"
"\n"
"SKRIP AWAL MULA:\n"
"SKRIP AWALAN:\n"
" -L, --load=\"ARGUMEN MODUL\" Muat modul plugin yang dinyatakan\n"
" dengan argumen yang disertakan\n"
" -F, --file=NAMABERKAS Jalankan skrip yang dinyatakan\n"
@ -179,12 +179,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail mengharapkan argumen bool"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level mengharapkan argumen aras log (bisa berupa angka 0..4 atau salah "
"satu dari error, warn, notice, info, debug)."
"satu dari debug, info, notice, warn, error)."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
@ -590,10 +591,12 @@ msgid "Docking Station Microphone"
msgstr "Mikrofon Docking Station"
#: src/modules/alsa/alsa-mixer.c:2711
#, fuzzy
msgid "Docking Station Line In"
msgstr "Jalur Masuk Docking Station"
#: src/modules/alsa/alsa-mixer.c:2712 src/modules/alsa/alsa-mixer.c:2803
#, fuzzy
msgid "Line In"
msgstr "Jalur Masuk"
@ -695,6 +698,7 @@ msgid "Headphones Mono Output"
msgstr "Keluaran Mono Headphone"
#: src/modules/alsa/alsa-mixer.c:2810
#, fuzzy
msgid "Line Out"
msgstr "Jalur Keluar"
@ -727,8 +731,9 @@ msgid "Multichannel Output"
msgstr "Keluaran Multikanal"
#: src/modules/alsa/alsa-mixer.c:2818
#, fuzzy
msgid "Game Output"
msgstr "Keluaran Game"
msgstr "Keluaran %s"
#: src/modules/alsa/alsa-mixer.c:2819 src/modules/alsa/alsa-mixer.c:2820
msgid "Chat Output"
@ -936,7 +941,7 @@ msgstr ""
"mengembalikan 0 atau nilai lain < min_avail."
#: src/modules/alsa/alsa-util.c:1183 src/modules/alsa/alsa-util.c:1277
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_avail() returned a value that is exceptionally large: %lu byte (%lu "
"ms).\n"
@ -948,13 +953,13 @@ msgid_plural ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr[0] ""
"snd_pcm_avail() mengembalikan nilai yang luar biasa besar: %lu byte (%lu ms)."
"\n"
"snd_pcm_avail() mengembalikan nilai yang luar biasa besar: %lu byte (%lu "
"ms).\n"
"Sangat mungkin ini adalah kutu pada driver ALSA '%s'. Silakan laporkan hal "
"ini ke para pengembang ALSA."
#: src/modules/alsa/alsa-util.c:1249
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li byte (%s"
"%lu ms).\n"
@ -985,7 +990,7 @@ msgstr ""
"kasus ini ke para pengembang ALSA."
#: src/modules/alsa/alsa-util.c:1339
#, c-format
#, fuzzy, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu byte "
"(%lu ms).\n"
@ -997,8 +1002,8 @@ msgid_plural ""
"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
"to the ALSA developers."
msgstr[0] ""
"snd_pcm_mmap_begin() mengembalikan nilai yang luar biasa besar: %lu byte ("
"%lu ms).\n"
"snd_pcm_mmap_begin() mengembalikan nilai yang luar biasa besar: %lu byte "
"(%lu ms).\n"
"Sangat mungkin ini adalah kutu pada driver ALSA '%s'. Silakan laporkan hal "
"ini ke para pengembang ALSA."
@ -1038,30 +1043,37 @@ msgid "Phone"
msgstr "Telepon"
#: src/modules/bluetooth/module-bluez5-device.c:2042
#, fuzzy
msgid "High Fidelity Playback (A2DP Sink)"
msgstr "Putar High Fidelity (Muara A2DP)"
msgstr "High Fidelity Playback (Muara A2DP)"
#: src/modules/bluetooth/module-bluez5-device.c:2054
#, fuzzy
msgid "High Fidelity Capture (A2DP Source)"
msgstr "Penangkapan High Fidelity (Sumber A2DP)"
msgstr "High Fidelity Capture (Sumber A2DP)"
#: src/modules/bluetooth/module-bluez5-device.c:2066
#, fuzzy
msgid "Headset Head Unit (HSP)"
msgstr "Headset Head Unit (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2079
#, fuzzy
msgid "Headset Audio Gateway (HSP)"
msgstr "Gateway Audio Headset (HSP/HFP)"
msgstr "Headset Audio Gateway (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2092
#, fuzzy
msgid "Handsfree Head Unit (HFP)"
msgstr "Unit Kepala Handsfree (HFP)"
msgstr "Headset Head Unit (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2105
#, fuzzy
msgid "Handsfree Audio Gateway (HFP)"
msgstr "Gateway Audio Handsfree (HSP/HFP)"
msgstr "Headset Audio Gateway (HSP/HFP)"
#: src/modules/echo-cancel/module-echo-cancel.c:59
#, fuzzy
msgid ""
"source_name=<name for the source> source_properties=<properties for the "
"source> source_master=<name of source to filter> sink_name=<name for the "
@ -1074,16 +1086,16 @@ msgid ""
"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
"or no> "
msgstr ""
"source_name=<nama sumber> source_properties=<properti sumber> "
"source_master=<nama sumber untuk disaring> sink_name=<nama muara> "
"sink_properties=<properti muara> sink_master=<nama muara untuk disaraing> "
"adjust_time=<seberapa sering menyetel ulang laju dalam detik> "
"adjust_threshold=<seberapa banyak drift disetel ulang setelahnya dalam mili "
"detik> format=<format cuplikan> rate=<laju cuplikan> channels=<cacah kanal> "
"channel_map=<peta kanal> aec_method=<implementasi yang dipakai> "
"aec_args=<parameter bagi mesin AEC> save_aec=<simpan data AEC dalam /tmp> "
"autoloaded=<tata apakah modul ini dimuat secara otomatis> "
"use_volume_sharing=<yes atau no> use_master_format=<yes atau no> "
"source_name=<name for the source> source_properties=<properties for the "
"source> source_master=<name of source to filter> sink_name=<name for the "
"sink> sink_properties=<properties for the sink> sink_master=<name of sink to "
"filter> adjust_time=<how often to readjust rates in s> adjust_threshold=<how "
"much drift to readjust after in ms> format=<sample format> rate=<sample "
"rate> channels=<number of channels> channel_map=<channel map> "
"aec_method=<implementation to use> aec_args=<parameters for the AEC engine> "
"save_aec=<save AEC data in /tmp> autoloaded=<set if this module is being "
"loaded automatically> use_volume_sharing=<yes or no> use_master_format=<yes "
"or no> "
#. add on profile
#: src/modules/macosx/module-coreaudio-device.c:825
@ -1104,6 +1116,7 @@ msgid "Always keeps at least one source loaded even if it's a null one"
msgstr "Selalu jaga paling tidak satu muara bermuatan bahkan jika berupa null"
#: src/modules/module-equalizer-sink.c:68
#, fuzzy
msgid "General Purpose Equalizer"
msgstr "Equalizer Tujuan Umum"
@ -1119,8 +1132,8 @@ msgstr ""
"channels=<cacah kanal> channel_map=<peta kanal> autoloaded=<tata bila modul "
"ini dimuat secara otomatis> use_volume_sharing=<yes atau no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Ekualiser berbasis FFT pada %s"
@ -1134,6 +1147,7 @@ msgid "Virtual LADSPA sink"
msgstr "Muara virtual LADSPA"
#: src/modules/module-ladspa-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"sink_input_properties=<properties for the sink input> master=<name of sink "
@ -1145,15 +1159,15 @@ msgid ""
"separated list of output LADSPA port names> autoloaded=<set if this module "
"is being loaded automatically> "
msgstr ""
"sink_name=<nama muara> sink_properties=<properti muara> "
"sink_input_properties=<properti masukan muara> master=<nama muara untuk "
"sink_name=<nama bagi muara> sink_properties=<properti bagi muara> "
"sink_input_properties=<properti bagi masukan muara> master=<nama muara untuk "
"disaring> sink_master=<nama muara yang akan disaring> format=<format "
"cuplikan> rate=<laju cuplikan> channels=<cacah kanal> channel_map=<peta "
"kanal> plugin=<nama plugin ladspa> label=<label plugin ladspa> "
"control=<daftar nilai kendali masukan yang dipisah koma> "
"input_ladspaport_map=<daftar dipisah koma dari nama port masukan LADSPA> "
"output_ladspaport_map=<daftar dipisah koma dari nama port keluaran LADSPA> "
"autoloaded=<tata apakah modul dimuat secara otomatis> "
"control=<daftar nilai kendali masukan yang dipisahkan dengan koma> \n"
"input_ladspaport_map=<comma separated list of input LADSPA port names> "
"output_ladspaport_map=<comma separated list of output LADSPA port names> "
"autoloaded=<set if this module is being loaded automatically> "
#: src/modules/module-null-sink.c:46
msgid "Clocked NULL sink"
@ -1186,14 +1200,14 @@ msgstr "Audio pada @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel untuk %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel ke %s/%s"
@ -1543,11 +1557,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Target log tidak valid."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Audio Bawaan"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1862,7 +1876,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() gagal: %s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1941,9 +1955,7 @@ msgstr ""
" -v, --verbose Aktifkan operasi cerewet\n"
"\n"
" -s, --server=SERVER Nama server untuk dihubungi\n"
" -d, --device=DEVICE Nama muara/sumber untuk dihubungi. "
"Nama khusus @DEFAULT_SINK@, @DEFAULT_SOURCE@, dan @DEFAULT_MONITOR@ masing-"
"masing dapat dipakai untuk menyatakan muara, sumber, dan monitor.\n"
" -d, --device=DEVICE Nama muara/sumber untuk dihubungi\n"
" -n, --client-name=NAME Bagaimana memanggil klien ini di "
"server\n"
" --stream-name=NAME Bagaimana memanggil stream ini di "
@ -1952,34 +1964,35 @@ msgstr ""
"jangkauan 0...65536\n"
" --rate=SAMPLERATE Laju cuplikan dalam Hz (nilai baku "
"44100)\n"
" --format=SAMPLEFORMAT Format cuplikan, lihat\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" untuk nilai-nilai yang mungkin ("
"nilai baku s16ne)\n"
" --format=SAMPLEFORMAT Jenis cuplikan, salah satu dari "
"s16le, s16be, u8, float32le,\n"
" float32be, ulaw, alaw, s32le, s32be, "
"s24le, s24be,\n"
" s24-32le, s24-32be (nilai baku "
"s16ne)\n"
" --channels=CHANNELS Cacah kanal, 1 untuk mono, 2 untuk "
"stereo\n"
" (nilai baku 2)\n"
" --channel-map=CHANNELMAP Peta kanal yang dipakai sebagai "
"pengganti baku\n"
" --fix-format Ambil format cuplikan dari muara/"
"sumber stream\n"
" --fix-format Ambil format cuplikan dari muara "
"stream\n"
" yang sedang tersambung.\n"
" --fix-rate Ambil laju cuplikan dari muara/"
"sumber stream\n"
" --fix-rate Ambil laju cuplikan dari muara "
"stream\n"
" yang sedang tersambung.\n"
" --fix-channels Ambil cacah kanal dan peta kanal "
"dari muara/sumber stream\n"
"dari muara stream\n"
" yang sedang tersambung.\n"
" --no-remix Jangan upmix atau downmix kanal.\n"
" --no-remap Petakan kanal berdasar indeks bukan "
"nama.\n"
" --latency=BYTE Minta latensi yang dinyatakan dalam "
" --latency=BYTE Minta latensi yang dinyatakan, dalam "
"byte.\n"
" --process-time=BYTE Minta waktu proses yang dinyatakan "
"bagi tiap permintaan\n"
" dalam byte.\n"
" --latency-msec=MSEC Minta latensi yang dinyatakan dalam "
" --latency-msec=MSEC Minta latensi yang dinyatakan, dalam "
"milidetik.\n"
" --process-time-msec=MSEC Minta waktu proses yang dinyatakan "
"bagi tiap permintaan\n"
@ -2249,10 +2262,12 @@ msgid "TARGET"
msgstr "TARGET"
#: src/utils/pacmd.c:76
#, fuzzy
msgid "NUMERIC-LEVEL"
msgstr "ARAS-NUMERIK"
msgstr "NUMERIC-LEVEL"
#: src/utils/pacmd.c:79
#, fuzzy
msgid "FRAMES"
msgstr "BINGKAI"
@ -2419,8 +2434,9 @@ msgid "Aux"
msgstr "Aux"
#: src/utils/pactl.c:335
#, fuzzy
msgid "Line"
msgstr "Jalur"
msgstr "Jalur Masuk"
#: src/utils/pactl.c:336
msgid "Mic"
@ -2510,7 +2526,7 @@ msgstr ""
#: src/utils/pactl.c:706 src/utils/pactl.c:890 src/utils/pactl.c:1251
#, c-format
msgid "\tPorts:\n"
msgstr "\tPort:\n"
msgstr "»Port:\n"
#: src/utils/pactl.c:708 src/utils/pactl.c:892
#, c-format
@ -2524,7 +2540,7 @@ msgstr ", grup ketersediaan: "
#: src/utils/pactl.c:715 src/utils/pactl.c:899
#, c-format
msgid "\tActive Port: %s\n"
msgstr "\tPort Aktif: %s\n"
msgstr "»Port Aktif: %s\n"
#: src/utils/pactl.c:721 src/utils/pactl.c:905
#, c-format
@ -2993,7 +3009,7 @@ msgstr ""
"dapat dipakai untuk menyatakan muara, sumber, dan pemantau baku.\n"
#: src/utils/pactl.c:2664
#, c-format
#, fuzzy, c-format
msgid ""
"\n"
" -h, --help Show this help\n"
@ -3010,8 +3026,6 @@ msgstr ""
" -h, --help Tampilkan bantuan ini\n"
" --version Tampilkan versi\n"
"\n"
" -f, --format=FORMAT Format keluaran. \"normal\" atau "
"\"json\"\n"
" -s, --server=SERVER Nama server tujuan koneksi\n"
" -n, --client-name=NAMA Bagaimana memanggil klien ini pada "
"server\n"
@ -3028,9 +3042,9 @@ msgstr ""
"Ditaut dengan libpulse %s\n"
#: src/utils/pactl.c:2751
#, c-format
#, fuzzy, c-format
msgid "Invalid format value '%s'"
msgstr "Nilai format '%s' tidak valid"
msgstr "Nama stream '%s' tak valid"
#: src/utils/pactl.c:2778
#, c-format
@ -3262,7 +3276,7 @@ msgid "WARNING: Child process terminated by signal %u\n"
msgstr "PERINGATAN: Proses anak diakhiri oleh sinyal %u\n"
#: src/utils/pasuspender.c:228
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options] -- PROGRAM [ARGUMENTS ...]\n"
"\n"
@ -3274,9 +3288,7 @@ msgid ""
"to\n"
"\n"
msgstr ""
"%s [opsi] -- PROGRAM [ARGUMEN ...]\n"
"\n"
"Sementara mensuspensi PulseAudio ketika PROGRAM berjalan.\n"
"%s [opsi] ... \n"
"\n"
" -h, --help Tampilkan bantuan ini\n"
" --version Tampilkan versi\n"

View file

@ -11,9 +11,9 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-06-08 14:42+0000\n"
"Last-Translator: Salvatore Cocuzza <info@salvatorecocuzza.it>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-04-19 20:02+0000\n"
"Last-Translator: Milo Casagrande <milo@milo.name>\n"
"Language-Team: Italian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/it/>\n"
"Language: it\n"
@ -21,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.11.4\n"
"X-Generator: Weblate 4.6\n"
# mamma mia che impressione
#: src/daemon/cmdline.c:113
@ -198,12 +198,14 @@ msgid "--fail expects boolean argument"
msgstr "--fail richiede un argomento booleano"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level si aspetta un argomento a livello di log (un valore numerico "
"compreso tra 0 e 4 oppure uno tra error, warn, notice, info, debug)."
"--log-level richiede il livello di registro come argomento (sia "
"nell'intervallo numerico 0..4 oppure uno tra debug, info, notice, warn, "
"error)."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
@ -1161,8 +1163,8 @@ msgstr ""
"channel_map=<mappa canali> autoloaded=<imposta se il modulo viene caricato "
"automaticamente> use_volume_sharing=<yes o no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Equalizzatore basato su FFT su %s"
@ -1228,14 +1230,14 @@ msgstr "Audio su @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel per %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel verso %s/%s"
@ -1245,6 +1247,7 @@ msgid "Virtual surround sink"
msgstr "Sink surround virtuale"
#: src/modules/module-virtual-surround-sink.c:54
#, fuzzy
msgid ""
"sink_name=<name for the sink> sink_properties=<properties for the sink> "
"master=<name of sink to filter> sink_master=<name of sink to filter> "
@ -1587,11 +1590,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Destinazione di registrazione non valida."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Audio interno"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -2417,7 +2420,7 @@ msgstr "Recupero delle informazioni del server non riuscito: %s"
#: src/utils/pactl.c:224 src/utils/pactl.c:236
#, c-format
msgid "%s\n"
msgstr "%s\n"
msgstr ""
#: src/utils/pactl.c:281
#, c-format
@ -2488,6 +2491,7 @@ msgid "Mic"
msgstr "Mic"
#: src/utils/pactl.c:338
#, fuzzy
msgid "Handset"
msgstr "Cuffie con microfono"
@ -2582,6 +2586,7 @@ msgid "\t\t%s: %s (type: %s, priority: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (tipo: %s, priorità: %u%s%s, %s)\n"
#: src/utils/pactl.c:710 src/utils/pactl.c:894 src/utils/pactl.c:1256
#, fuzzy
msgid ", availability group: "
msgstr ", gruppo disponibilità: "
@ -2893,7 +2898,7 @@ msgstr "Invia messaggio non riuscito: %s"
#: src/utils/pactl.c:1695
#, c-format
msgid "list-handlers message failed: %s"
msgstr "messaggio list-handlers non riuscito: %s"
msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
@ -2907,8 +2912,6 @@ msgstr ""
#, c-format
msgid "list-handlers message response array element %d is not a JSON object"
msgstr ""
"l'elemento %d dell'array di risposta al messaggio dei gestori di elenchi non "
"è un oggetto JSON"
#: src/utils/pactl.c:1800
#, c-format
@ -3107,9 +3110,9 @@ msgstr ""
"Link eseguito con libpulse %s\n"
#: src/utils/pactl.c:2751
#, c-format
#, fuzzy, c-format
msgid "Invalid format value '%s'"
msgstr "Formato valore non valido '%s'"
msgstr "Nome dello stream «%s» non valido"
#: src/utils/pactl.c:2778
#, c-format
@ -3195,16 +3198,18 @@ msgid "You have to specify a source name"
msgstr "È necessario specificare il nome di una sorgente"
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076
#, fuzzy
msgid "You have to specify a sink name/index"
msgstr "Devi specificare un nome/indice del sink"
msgstr "È necessario specificare un nome di sink"
#: src/utils/pactl.c:3008
msgid "You have to specify a sink name/index and a volume"
msgstr "È necessario specificare un nome/indice di sink e un nome di porta"
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#, fuzzy
msgid "You have to specify a source name/index"
msgstr "Devi specificare un nome/indice sorgente"
msgstr "È necessario specificare il nome di una sorgente"
#: src/utils/pactl.c:3031
msgid "You have to specify a source name/index and a volume"
@ -3270,17 +3275,15 @@ msgid "Invalid source output index specification"
msgstr "Specifica di indice di uscita per la sorgente non valida"
#: src/utils/pactl.c:3162
#, fuzzy
msgid "You have to specify at least an object path and a message name"
msgstr ""
"Devi specificare almeno un percorso dell'oggetto e un nome del messaggio"
msgstr "È necessario specificare un nome/indice di sink e un nome di porta"
#: src/utils/pactl.c:3172
msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"Gli argomenti in eccesso verranno ignorati. Si noti che tutti i parametri "
"del messaggio devono essere specificati come un'unica stringa."
#: src/utils/pactl.c:3182
msgid ""

View file

@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-02-20 03:16+0000\n"
"Last-Translator: Takuro Onoue <kusanaginoturugi@gmail.com>\n"
"Language-Team: Japanese <https://translate.fedoraproject.org/projects/"
@ -1140,8 +1140,8 @@ msgstr ""
"ル数> channel_map=<チャンネルマップ> autoloaded=<このモジュールが自動でロード"
"されている場合にセット> use_volume_sharing=<yes 又は no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1205,14 +1205,14 @@ msgstr "@HOSTNAME@ 上のオーディオ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "%s@%s のトンネル"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "%s/%s へのトンネル"
@ -1560,11 +1560,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "無効なログターゲット。"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "内部オーディオ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "モデム"

997
po/ka.po

File diff suppressed because it is too large Load diff

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2020-06-30 08:04+0500\n"
"Last-Translator: Baurzhan Muftakhidinov <baurthefirst@gmail.com>\n"
"Language-Team: \n"
@ -989,8 +989,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1047,14 +1047,14 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1391,11 +1391,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Журнал мақсаты дұрыс емес."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Құрамындағы аудио"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Модем"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.kn\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:54+0000\n"
"Last-Translator: Shankar Prasad <svenkate@redhat.com>\n"
"Language-Team: Kannada <kde-l10n-kn@kde.org>\n"
@ -1153,8 +1153,8 @@ msgstr ""
"label=<ladspa ಪ್ಲಗ್‌ಇನ್ ಹೆಸರು> control=<ವಿರಾಮ ಚಿಹ್ನೆಗಳನ್ನು ಹೊಂದಿರುವ ಇನ್‌ಪುಟ್ ನಿಯಂತ್ರಣ "
"ಮೌಲ್ಯಗಳ ಪಟ್ಟಿ>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1217,14 +1217,14 @@ msgstr "@HOSTNAME@ ನಲ್ಲಿನ ಆಡಿಯೊ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1575,11 +1575,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] ಅಮಾನ್ಯವಾದ ದಾಖಲೆ ಗುರಿ '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "ಆಂತರಿಕ ಆಡಿಯೊ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "ಮಾಡೆಮ್"

221
po/ko.po
View file

@ -6,8 +6,8 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-06-14 13:17+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-20 18:18+0000\n"
"Last-Translator: 김인수 <simmon@nplob.com>\n"
"Language-Team: Korean <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/ko/>\n"
@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.11.4\n"
"X-Generator: Weblate 4.12.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -94,23 +94,23 @@ msgstr ""
"명령:\n"
" -h, --help 도움말을 표시\n"
" --version 버전을 표시\n"
" --dump-conf 기본 구성 덤프\n"
" --dump-modules 사용 가능한 모듈의 덤프 목록\n"
" --dump-resample-methods 재표본 방법 덤프\n"
" --dump-conf 기본 구성 덤프\n"
" --dump-modules 사용 가능한 모듈의 목록을 덤프\n"
" --dump-resample-methods 사용 가능한 재표본 방식으로 덤프\n"
" --cleanup-shm 오래된 공유 메모리 세그멘트 정리\n"
" --start 만약 실행되지 않았으면 데몬을 시작\n"
" -k --kill 실행 중인 데몬을 제거\n"
" --check 동작 중인 데몬 점검 (종료 코드만 "
"반환)\n"
" --check 동작 중인 데몬을 위한 점검 (종료 "
"코드만 반환)\n"
"\n"
"옵션:\n"
"OPTIONS:\n"
" --system[=BOOL] 시스템-전반의 인스턴스로 실행\n"
" -D, --daemonize[=BOOL] 시작 후에 데몬화\n"
" --fail[=BOOL] 시작이 실패 할 때에 종료\n"
" --high-priority[=BOOL] 높은 수준으로 설정을 시도\n"
" (root로만 사용 가능, SUID 또는\n"
" 높은 RLIMIT_NICE일 때에)\n"
" --realtime[=BOOL] 실시간 스케쥴링 활성 시도\n"
" --realtime[=BOOL] Try to enable realtime scheduling\n"
" (root로만 사용 가능, SUID 또는\n"
" 높은 RLIMIT_RTPRIO일 때에)\n"
" --disallow-module-loading[=BOOL] 시작 후 사용자가 요청 모듈을\n"
@ -121,7 +121,7 @@ msgstr ""
" --exit-idle-time=SECS 유휴 상태이고 시간이 경과하면\n"
" 데몬을 종료함\n"
" --scache-idle-time=SECS 유휴 상태이고 시간이 경과하면\n"
" 자동 적재된 표을 내려 놓음\n"
" 자동 적재된 표을 내려 놓음\n"
" --log-level[=LEVEL] 자세한 표시 수준을 높이거나 설정\n"
" -v --verbose 자세한 표시 수준을 높임\n"
" --log-target={auto,syslog,stderr,file:PATH,newfile:PATH}\n"
@ -132,11 +132,11 @@ msgstr ""
" -p, --dl-search-path=PATH 동적 공유 객체(플러그인)을 위한\n"
" 검색 경로를 설정\n"
" --resample-method=METHOD 지정한 재표본 방식을 사용\n"
" (사용 가능한 값은 --dump-resample-"
"methods 옵션을\n"
" (사용 가능한 값을 위해 --dump-"
"resample-methods을\n"
" 참조)\n"
" --use-pid-file[=BOOL] PID 파일을 생성\n"
" --no-cpu-limit[=BOOL] 이를 지원하는 CPU 부하 제한기를\n"
" --no-cpu-limit[=BOOL] 이를 지원하는 CPU 적재 제한기를\n"
" 설치하지 않음.\n"
" --disable-shm[=BOOL] 공유 메모리 지원을 비활성화.\n"
" --enable-memfd[=BOOL] memfd 공유 메모리 지원을 활성화.\n"
@ -145,7 +145,7 @@ msgstr ""
" -L, --load=\"MODULE ARGUMENTS\" 지정된 인수와 함께 지정된 "
"플러그인\n"
" 모듈을 적재\n"
" -F, --file=FILENAME 지정 스크립트 실행\n"
" -F, --file=FILENAME 지정 스크립트 실행\n"
" -C 시작 후에 동작 중인 TTY에서\n"
" 명령 줄을 엽니다\n"
"\n"
@ -153,39 +153,39 @@ msgstr ""
#: src/daemon/cmdline.c:246
msgid "--daemonize expects boolean argument"
msgstr "--daemonize 에는 부울 인자 값이 필요합니다"
msgstr "--daemonize 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:254
msgid "--fail expects boolean argument"
msgstr "--fail 에는 부울 인자 값이 필요합니다"
msgstr "--fail 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:265
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level 에는 로그 수준 인자 값이 필요합니다 (0~4 숫자 범위 또는 오류, 경"
"고, 알림, 정보, 디버그 중 하나)."
"--log-level 에는 로그 수준 인수가 필요합니다 (0~4 숫자 범위 또는 오류, 경고, "
"알림, 정보, 디버그 중 하나 )."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
msgstr "--high-priority 에는 부울 인자 값이 필요합니다"
msgstr "--high-priority 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:285
msgid "--realtime expects boolean argument"
msgstr "--realtime 에는 부울 인자 값이 필요합니다"
msgstr "--realtime 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:293
msgid "--disallow-module-loading expects boolean argument"
msgstr "--disallow-module-loading 에는 부울 인자 값이 필요합니다"
msgstr "--disallow-module-loading 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:301
msgid "--disallow-exit expects boolean argument"
msgstr "--disallow-exit 에는 부울 인자 값이 필요합니다"
msgstr "--disallow-exit 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:309
msgid "--use-pid-file expects boolean argument"
msgstr "--use-pid-file 부울 인자 값이 필요합니다"
msgstr "--use-pid-file 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:328
msgid ""
@ -205,32 +205,32 @@ msgstr ""
#: src/daemon/cmdline.c:338
msgid "--log-time expects boolean argument"
msgstr "--log-time 에는 부울 인자 값이 필요합니다"
msgstr "--log-time 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:346
msgid "--log-meta expects boolean argument"
msgstr "--log-meta 에는 부울 인자 값이 필요합니다"
msgstr "--log-meta 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:366
#, c-format
msgid "Invalid resample method '%s'."
msgstr "잘못된 리샘플링 방 '%s'."
msgstr "잘못된 리샘플링 방 '%s'."
#: src/daemon/cmdline.c:373
msgid "--system expects boolean argument"
msgstr "--system 에는 부울 인자 값이 필요합니다"
msgstr "--system 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:381
msgid "--no-cpu-limit expects boolean argument"
msgstr "--no-cpu-limit 에는 부울 인자 값이 필요합니다"
msgstr "--no-cpu-limit 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:389
msgid "--disable-shm expects boolean argument"
msgstr "--disable-shm 에는 부울 인자 값이 필요합니다"
msgstr "--disable-shm 에는 부울 인수가 필요합니다"
#: src/daemon/cmdline.c:397
msgid "--enable-memfd expects boolean argument"
msgstr "--enable-memfd 는 부울 인수가 예상됩니다"
msgstr "--enable-memfd는 부울 인수가 예상됩니다"
#: src/daemon/daemon-conf.c:270
#, c-format
@ -275,12 +275,12 @@ msgstr "[%s:%u] 잘못된 채널 맵 '%s'."
#: src/daemon/daemon-conf.c:433
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] 잘못된 조각 수 '%s'."
msgstr "[%s:%u] 잘못된 fragment 수 '%s'."
#: src/daemon/daemon-conf.c:450
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] 잘못된 조각 크기 '%s'."
msgstr "[%s:%u] 잘못된 fragment 크기 '%s'."
#: src/daemon/daemon-conf.c:467
#, c-format
@ -302,7 +302,7 @@ msgid ""
"The specified default channel map has a different number of channels than "
"the specified default number of channels."
msgstr ""
"지정 기본 채널 맵은 지정 기본 채널 수와는 다른 채널 수를 가지고 있습니다."
"지정 기본 채널 맵은 지정 기본 채널 수와는 다른 채널 수를 가지고 있습니다."
#: src/daemon/daemon-conf.c:788
#, c-format
@ -342,7 +342,7 @@ msgstr "사용법: %s\n"
#: src/daemon/dumpmodules.c:70
#, c-format
msgid "Load Once: %s\n"
msgstr "한 번 적재하기: %s\n"
msgstr "한 번 로딩하기: %s\n"
#: src/daemon/dumpmodules.c:72
#, c-format
@ -365,7 +365,7 @@ msgstr "기존 lt_dlopen 로더를 찾는데 실패했습니다."
#: src/daemon/ltdl-bind-now.c:131
msgid "Failed to allocate new dl loader."
msgstr "새 dl 로더 할당에 실패했습니다."
msgstr "새 dl 로더를 할당하는데 실패했습니다."
#: src/daemon/ltdl-bind-now.c:144
msgid "Failed to add bind-now-loader."
@ -374,22 +374,22 @@ msgstr "bind-now-loader를 추가하는데 실패했습니다."
#: src/daemon/main.c:265
#, c-format
msgid "Failed to find user '%s'."
msgstr "'%s' 사용자를 찾을 수 없습니다."
msgstr "사용자 '%s'를 찾을 수 없습니다."
#: src/daemon/main.c:270
#, c-format
msgid "Failed to find group '%s'."
msgstr "'%s' 그룹을 찾을 수 없습니다."
msgstr "그룹 '%s'를 찾을 수 없습니다."
#: src/daemon/main.c:279
#, c-format
msgid "GID of user '%s' and of group '%s' don't match."
msgstr "'%s' 사용자의 GID와 '%s' 그룹 정보가 일치하지 않습니다."
msgstr "사용자 '%s'의 GID와 그룹 '%s'가 일치하지 않습니다."
#: src/daemon/main.c:284
#, c-format
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "사용자 '%s'의 홈 디렉토리가 '%s' 아니면, 무시합니다."
msgstr "사용자 '%s'의 홈 디렉토리가 '%s'가 아닙니다, 무시됨."
#: src/daemon/main.c:287 src/daemon/main.c:292
#, c-format
@ -413,7 +413,7 @@ msgstr "UID 변경 실패: %s"
#: src/daemon/main.c:360
msgid "System wide mode unsupported on this platform."
msgstr "시스템 전역 모드는 이 기술환경에서 지원하지 않습니다."
msgstr "시스템 전역 모드는 이 플랫폼에서 지원되지 않습니다."
#: src/daemon/main.c:650
msgid "Failed to parse command line."
@ -423,7 +423,8 @@ msgstr "명령어 행 분석 실패."
msgid ""
"System mode refused for non-root user. Only starting the D-Bus server lookup "
"service."
msgstr "non-root 사용자에게 시스템 방식이 거부되었습니다. D-Bus 서버 검색 서비스만 "
msgstr ""
"비 root 사용자에 대해 시스템 모드는 거부되었습니다. D-Bus 서버 검색 서비스만 "
"시작합니다."
#: src/daemon/main.c:788
@ -435,12 +436,12 @@ msgstr "데몬 종료 실패: %s"
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "이와 같은 프로그램은 root로 동작하도록 의도되지 않았습니다 (--system 이 "
"지정되지 않은 경우)."
msgstr ""
"프로그램이 root로 실행되지 않습니다. (실행하려면 --system을 명기하십시오)."
#: src/daemon/main.c:820
msgid "Root privileges required."
msgstr "루트 권한이 필요합니다."
msgstr "Root 권한이 필요합니다."
#: src/daemon/main.c:827
msgid "--start not supported for system instances."
@ -449,22 +450,24 @@ msgstr "--start는 시스템 인스턴스에 대해 지원되지 않습니다."
#: src/daemon/main.c:867
#, c-format
msgid "User-configured server at %s, refusing to start/autospawn."
msgstr "%s에 User-configured 서버, start/autospawn을 거부하고 있습니다."
msgstr "%s에서 사용자 설정한 서버, start/autospawn을 거부하고 있습니다."
#: src/daemon/main.c:873
#, c-format
msgid ""
"User-configured server at %s, which appears to be local. Probing deeper."
msgstr "%s에 User-configured 서버, 이는 로컬에 있습니다. 상세히 조사합니다."
msgstr "%s에 사용자가 설정한 서버, 이는 로컬에 있습니다. 상세히 조사합니다."
#: src/daemon/main.c:878
msgid "Running in system mode, but --disallow-exit not set."
msgstr "시스템 방식에서 실행 중이지만, --disallow-exit 를 설정하지 않았습니다."
msgstr ""
"시스템 모드에서 실행중입니다. 하지만 --disallow-exit가 설정되지 않았습니다."
#: src/daemon/main.c:881
msgid "Running in system mode, but --disallow-module-loading not set."
msgstr "시스템 방식에서 실행 중이지만, --disallow-module-loading 를 설정하지 "
"않았습니다."
msgstr ""
"시스템 모드에서 실행 중입니다. 하지만 --disallow-module-loading이 설정되어 있"
"지 않습니다."
#: src/daemon/main.c:884
msgid "Running in system mode, forcibly disabling SHM mode."
@ -656,7 +659,7 @@ msgstr "도킹스테이션 마이크"
#: src/modules/alsa/alsa-mixer.c:2802
msgid "Headset Microphone"
msgstr "헤드셋 마이크"
msgstr "후면 마이크"
#: src/modules/alsa/alsa-mixer.c:2806
msgid "Analog Output"
@ -716,7 +719,7 @@ msgstr "대화 입력"
#: src/modules/alsa/alsa-mixer.c:2822
msgid "Virtual Surround 7.1"
msgstr "가상 서라운드 7.1"
msgstr "가상 서라운드 싱크"
#: src/modules/alsa/alsa-mixer.c:4563
msgid "Analog Mono"
@ -860,7 +863,7 @@ msgstr "스테레오 듀플렉스"
#: src/modules/alsa/alsa-mixer.c:4739
msgid "Mono Chat + 7.1 Surround"
msgstr "모노 대화 + 7.1 서라운드"
msgstr "모노 Chat + 7.1 Surround"
#: src/modules/alsa/alsa-mixer.c:4740 src/modules/alsa/module-alsa-card.c:197
#: src/modules/bluetooth/module-bluez5-device.c:2263
@ -1010,15 +1013,15 @@ msgstr "전화기"
#: src/modules/bluetooth/module-bluez5-device.c:2042
msgid "High Fidelity Playback (A2DP Sink)"
msgstr "고음질 재생 (A2DP Sink)"
msgstr "Hi-Fi 재생 (A2DP Sink)"
#: src/modules/bluetooth/module-bluez5-device.c:2054
msgid "High Fidelity Capture (A2DP Source)"
msgstr "고음질 캡쳐 (A2DP Source)"
msgstr "Hi-Fi 캡쳐 (A2DP Source)"
#: src/modules/bluetooth/module-bluez5-device.c:2066
msgid "Headset Head Unit (HSP)"
msgstr "헤드셋 헤드 단위 (HSP)"
msgstr "헤드셋 헤드 유닛 (HSP)"
#: src/modules/bluetooth/module-bluez5-device.c:2079
msgid "Headset Audio Gateway (HSP)"
@ -1026,7 +1029,7 @@ msgstr "헤드셋 오디오 게이트웨어 (HSP)"
#: src/modules/bluetooth/module-bluez5-device.c:2092
msgid "Handsfree Head Unit (HFP)"
msgstr "핸즈프리 헤드 단위 (HFP)"
msgstr "핸즈프리 헤드 유닛 (HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2105
msgid "Handsfree Audio Gateway (HFP)"
@ -1089,8 +1092,8 @@ msgstr ""
"channel_map=<채널 맵> autoloaded=<이 모듈이 자동으로 로드된다면 설정하십시오"
"> use_volume_sharing=<yes 또는 no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "고속퓨리에변환 기반 이퀄라이저 동작 %s"
@ -1154,14 +1157,14 @@ msgstr "호스트 @HOSTNAME@의 오디오"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "%s@%s 위한 터널"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "%s/%s가는 터널"
@ -1475,9 +1478,9 @@ msgid ""
"e.g. happen if you try to connect to a non-root PulseAudio as a root user, "
"over the native protocol. Don't do that.)"
msgstr ""
"XDG_RUNTIME_DIR (%s)는 우리(uid %d)가 아니라 uid %d가 소유합니다! (자체 "
"통신규약을 통해 root 사용자로 root가 아닌 PluseAudio에 연결을 시도 할 때에 "
"예시로 발생 할 수 있습니다. 그렇게 하지 않습니다.)"
"XDG_RUNTIME_DIR (%s)는 우리(uid %d)가 아니라 uid %d가 소유합니다! (기본적인 "
"통신규약을 통해 비-root가 PluseAudio에 root 사용자로 연결을 시도할 때에 예를 "
"들어 발생 할 수 있습니다. 그렇게 하지 않습니다.)"
#: src/pulsecore/core-util.h:97
msgid "yes"
@ -1508,17 +1511,17 @@ msgstr ""
msgid "Invalid log target."
msgstr "잘못된 기록 대상."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "내장 오디오"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "모뎀"
#: src/pulse/error.c:38
msgid "OK"
msgstr "확인"
msgstr "OK"
#: src/pulse/error.c:39
msgid "Access denied"
@ -1586,7 +1589,7 @@ msgstr "자료 없음"
#: src/pulse/error.c:55
msgid "Incompatible protocol version"
msgstr "호환되지 않는 프로토콜 버전"
msgstr "호환되지 않는 통신규약 버전"
#: src/pulse/error.c:56
msgid "Too large"
@ -1905,11 +1908,11 @@ msgstr ""
" -v, --verbose 자세한 작업 활성화합니다\n"
"\n"
" -s, --server=SERVER 연결하고자 하는 서버의 이름\n"
" -d, --device=DEVICE 연결하고자 하는 싱크/원천의 이름. "
"별한 이름 @DEFAULT_SINK@, @DEFAULT_SOURCE@과 @DEFAULT_MONITOR@는 각기 기본 "
"크, 원천과 관리를 지정하는데 사용 될 수 있습니다.\n"
" -n, --client-name=NAME 서버에서 이와 같은 클라이언트를 호출"
"하는 방법\n"
" -d, --device=DEVICE 연결하고자 하는 싱크/원천의 이름. "
"별한 이름 @DEFAULT_SINK@, @DEFAULT_SOURCE@과 @DEFAULT_MONITOR@는 각기 기본 "
"크, 원천과 관리를 지정하는데 사용 될 수 있습니다.\n"
" -n, --client-name=NAME 서버에서 이와 같은 클라이언트를 "
"호출하는 방법\n"
" --stream-name=NAME 서버에서 이와 같은 스트림을 호출하는 "
"방법\n"
" --volume=VOLUME 범위 0...65536에서 초기(선형) 소리를 "
@ -1922,29 +1925,29 @@ msgstr ""
" --channels=CHANNELS 채널의 수, 모노 1, 스테레오 2\n"
" (기본값 2)\n"
" --channel-map=CHANNELMAP 기본값 대신에 사용하려는 채널맵\n"
" --fix-format 스트림이 연결되고 있는 싱크/원천에"
"서\n"
" --fix-format 스트림이 연결되고 있는 싱크/"
"원천에서\n"
" 샘플 형식을 가져옵니다.\n"
" --fix-rate 스트림이 연결되고 있는 싱크/원천에"
"서\n"
" --fix-rate 스트림이 연결되고 있는 싱크/"
"원천에서\n"
" 샘플 비율을 가져옵니다.\n"
" --fix-channels 스트림이 연결되고 있는 싱크/원천에"
"서\n"
" --fix-channels 스트림이 연결되고 있는 싱크/"
"원천에서\n"
" 채널 수와 채널맵을 가져옵니다.\n"
" --no-remix 채널을 언믹스하거나 다운믹스 하지 "
"습니다.\n"
" --no-remap 이름 대신에 색인으로 채널을 맵핑합니"
"다.\n"
" --latency=BYTES 바이트 단위로 지정된 지연시간을 요청"
"합니다.\n"
" --process-time=BYTES 바이트 단위로 요청당 지정된 처리시간"
"을 요청합니다.\n"
" --latency-msec=MSEC msec 단위로 지정된 지연시간을 요청합"
"니다.\n"
" --no-remix 채널을 언믹스하거나 다운믹스 하지 "
"습니다.\n"
" --no-remap 이름 대신에 색인으로 채널을 "
"맵핑합니다.\n"
" --latency=BYTES 바이트 단위로 지정된 지연시간을 "
"요청합니다.\n"
" --process-time=BYTES 바이트 단위로 요청당 지정된 "
"처리시간을 요청합니다.\n"
" --latency-msec=MSEC msec 단위로 지정된 지연시간을 "
"요청합니다.\n"
" --process-time-msec=MSEC msec 단위로 요청당 지정된 처리시간을 "
"요청합니다.\n"
" --property=PROPERTY=VALUE 지정된 속성을 지정된 값으로 설정합니"
"다.\n"
" --property=PROPERTY=VALUE 지정된 속성을 지정된 값으로 "
"설정합니다.\n"
" --raw raw PCM 자료를 기록하거나/재생.\n"
" --passthrough 통과 자료.\n"
" --file-format[=FFORMAT] 형식화된 PCM 자료 기록/재생.\n"
@ -2438,7 +2441,7 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
"Sink #%u\n"
"싱크 #%u\n"
"\t상태: %s\n"
"\t이름: %s\n"
"\t설명: %s\n"
@ -2447,10 +2450,10 @@ msgstr ""
"\t채널 맵: %s\n"
"\t소유자 모듈: %u\n"
"\t무음: %s\n"
"\t음량: %s\n"
"\t 균형 %0.2f\n"
"\t기본 음량: %s\n"
"\t모니터 원천: %s\n"
"\t볼륨: %s%s%s\n"
"\t균형 %0.2f\n"
"\t기본 볼륨: %s%s%s\n"
"\t모니터 소스: %s\n"
"\t지연시간: %0.0f usec, 설정 %0.0f usec\n"
"\t플래그: %s%s%s%s%s%s%s\n"
"\t속성:\n"
@ -2507,7 +2510,7 @@ msgid ""
"\tProperties:\n"
"\t\t%s\n"
msgstr ""
"원천 #%u\n"
"소스 #%u\n"
"\t상태: %s\n"
"\t이름: %s\n"
"\t설명: %s\n"
@ -2516,11 +2519,11 @@ msgstr ""
"\t채널 맵: %s\n"
"\t소유자 모듈: %u\n"
"\t무음: %s\n"
"\t볼륨: %s\n"
"\t볼륨: %s%s%s\n"
"\t 균형 %0.2f\n"
"\t기본 볼륨: %s\n"
"\t싱크 모니터:%s\n"
"\t지연시간:%0.0f usec, 설정 %0.0f usec\n"
"\t기본 볼륨: %s%s%s\n"
"\t싱크 모니터: %s\n"
"\t지연시간: %0.0f usec, 설정 %0.0f usec\n"
"\t플래그: %s%s%s%s%s%s\n"
"\t속성:\n"
"\t\t%s\n"
@ -2670,7 +2673,8 @@ msgstr ""
"\t코르크: %s\n"
"\t무음: %s\n"
"\t볼륨: %s\n"
"\t 균형 %0.2f\n"
"\t %s\n"
"\t균형 %0.2f\n"
"\t버퍼 지연 시간: %0.0f usec\n"
"\t싱크 지연 시간: %0.0f usec\n"
"\t리샘플링 방법: %s\n"
@ -2747,7 +2751,8 @@ msgstr ""
"\t샘플 사양: %s\n"
"\t채널맵: %s\n"
"\t볼륨: %s\n"
"\t 균형 %0.2f\n"
"\t %s\n"
"\t균형 %0.2f\n"
"\t길이: %0.1fs\n"
"\t크기: %s\n"
"\t레이지: %s\n"
@ -3131,8 +3136,8 @@ msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
msgstr ""
"초과 인자 값을 부여하면 무시합니다. 모든 메시지 변수는 단일 문자열로 주어져"
"야 합니다."
"초과 인수가 주어지면, 이들은 무시될 것입니다. 모든 메시지 변수는 단일 문자열"
"로 주어져야 합니다."
#: src/utils/pactl.c:3182
msgid ""
@ -3206,7 +3211,7 @@ msgid ""
"to\n"
"\n"
msgstr ""
"%s [옵션] -- 프로그램 -[ 인 ...]\n"
"%s [옵션] -- 프로그램 -[ 인 ...]\n"
"\n"
"프로그램이 동작 할 때에 일시적으로 PulseAudio를 중지합니다.\n"
"\n"

107
po/lt.po
View file

@ -8,18 +8,17 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2024-02-15 22:36+0000\n"
"Last-Translator: mooo <hazap@hotmail.com>\n"
"Language-Team: Lithuanian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/lt/>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2019-09-01 16:15+0300\n"
"Last-Translator: Moo\n"
"Language-Team: \n"
"Language: lt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && ("
"n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.4\n"
"X-Generator: Poedit 2.2.1\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n"
"%100<10 || n%100>=20) ? 1 : 2);\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -703,8 +702,9 @@ msgid "Analog Output"
msgstr "Analoginė išvestis"
#: src/modules/alsa/alsa-mixer.c:2808
#, fuzzy
msgid "Headphones 2"
msgstr "Ausinės 2"
msgstr "Ausinės"
#: src/modules/alsa/alsa-mixer.c:2809
msgid "Headphones Mono Output"
@ -751,24 +751,28 @@ msgid "Chat Output"
msgstr "Pokalbio išvestis"
#: src/modules/alsa/alsa-mixer.c:2821
#, fuzzy
msgid "Chat Input"
msgstr "Pokalbio įvestis"
msgstr "Pokalbio vestis"
#: src/modules/alsa/alsa-mixer.c:2822
#, fuzzy
msgid "Virtual Surround 7.1"
msgstr "Virtuali erdvinė 7.1"
msgstr "Virtualus erdvinis rinktuvas"
#: src/modules/alsa/alsa-mixer.c:4563
msgid "Analog Mono"
msgstr "Analoginė mono"
#: src/modules/alsa/alsa-mixer.c:4564
#, fuzzy
msgid "Analog Mono (Left)"
msgstr "Analoginė mono (kairioji)"
msgstr "Analoginė mono"
#: src/modules/alsa/alsa-mixer.c:4565
#, fuzzy
msgid "Analog Mono (Right)"
msgstr "Analoginė mono (dešinioji)"
msgstr "Analoginė mono"
#. Note: Not translated to "Analog Stereo Input", because the source
#. * name gets "Input" appended to it automatically, so adding "Input"
@ -873,11 +877,11 @@ msgstr "Skaitmeninė erdvinė 5.1 (HDMI)"
#: src/modules/alsa/alsa-mixer.c:4597
msgid "Chat"
msgstr "Pokalbis"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4598
msgid "Game"
msgstr "Žaidimas"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4732
msgid "Analog Mono Duplex"
@ -901,7 +905,7 @@ msgstr "Dvipusė stereo"
#: src/modules/alsa/alsa-mixer.c:4739
msgid "Mono Chat + 7.1 Surround"
msgstr "Mono pokalbis + 7.1 erdvinė"
msgstr ""
#: src/modules/alsa/alsa-mixer.c:4740 src/modules/alsa/module-alsa-card.c:197
#: src/modules/bluetooth/module-bluez5-device.c:2263
@ -1098,16 +1102,19 @@ msgid "Headset Head Unit (HSP)"
msgstr "Ausinių su mikrofonu pagrindinis įtaisas (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2079
#, fuzzy
msgid "Headset Audio Gateway (HSP)"
msgstr "Ausinių su mikrofonu garso tinklų sietuvas (HSP)"
msgstr "Ausinių su mikrofonu garso tinklų sietuvas (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2092
#, fuzzy
msgid "Handsfree Head Unit (HFP)"
msgstr "Laisvų rankų įrangos pagrindinis įtaisas (HFP)"
msgstr "Ausinių su mikrofonu pagrindinis įtaisas (HSP/HFP)"
#: src/modules/bluetooth/module-bluez5-device.c:2105
#, fuzzy
msgid "Handsfree Audio Gateway (HFP)"
msgstr "Laisvų rankų įrangos garso tinklų sietuvas (HFP)"
msgstr "Ausinių su mikrofonu garso tinklų sietuvas (HSP/HFP)"
#: src/modules/echo-cancel/module-echo-cancel.c:59
msgid ""
@ -1169,8 +1176,8 @@ msgstr ""
"schema> autoloaded=<nustatyti ar šis modulis bus įkeliamas automatiškai> "
"use_volume_sharing=<yes arba no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT pagrįstas glodintuvas ties %s"
@ -1238,14 +1245,14 @@ msgstr "Garsas ties @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunelis, skirtas %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunelis į %s/%s"
@ -1596,11 +1603,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Neteisinga žurnalo paskirtis."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Įtaisytas garsas"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modemas"
@ -2409,9 +2416,9 @@ msgid "Failed to get server information: %s"
msgstr "Nepavyko gauti serverio informacijos: %s"
#: src/utils/pactl.c:224 src/utils/pactl.c:236
#, c-format
#, fuzzy, c-format
msgid "%s\n"
msgstr "%s\n"
msgstr "%s %s\n"
#: src/utils/pactl.c:281
#, c-format
@ -2455,19 +2462,20 @@ msgstr ""
#: src/utils/pactl.c:320
msgid "availability unknown"
msgstr "prieinamumas nežinomas"
msgstr ""
#: src/utils/pactl.c:321
msgid "available"
msgstr "prieinama"
msgstr ""
#: src/utils/pactl.c:322
msgid "not available"
msgstr "neprieinama"
msgstr ""
#: src/utils/pactl.c:331 src/utils/pactl.c:355
#, fuzzy
msgid "Unknown"
msgstr "Nežinoma"
msgstr "nežinoma"
#: src/utils/pactl.c:332
msgid "Aux"
@ -2480,11 +2488,12 @@ msgstr "Įvadinė linija"
#: src/utils/pactl.c:336
msgid "Mic"
msgstr "Mikrofonas"
msgstr ""
#: src/utils/pactl.c:338
#, fuzzy
msgid "Handset"
msgstr "Telefono ragelis"
msgstr "Ausinės su mikrofonu"
#: src/utils/pactl.c:339
msgid "Earpiece"
@ -2492,27 +2501,28 @@ msgstr ""
#: src/utils/pactl.c:340
msgid "SPDIF"
msgstr "SPDIF"
msgstr ""
#: src/utils/pactl.c:341
msgid "HDMI"
msgstr "HDMI"
msgstr ""
#: src/utils/pactl.c:342
msgid "TV"
msgstr "Televizorius"
msgstr ""
#: src/utils/pactl.c:345
msgid "USB"
msgstr "USB"
msgstr ""
#: src/utils/pactl.c:346
#, fuzzy
msgid "Bluetooth"
msgstr "Bluetooth"
msgstr "Bluetooth įvestis"
#: src/utils/pactl.c:352
msgid "Network"
msgstr "Tinklas"
msgstr ""
#: src/utils/pactl.c:353
#, fuzzy
@ -2570,13 +2580,14 @@ msgid "\tPorts:\n"
msgstr "\tPrievadai:\n"
#: src/utils/pactl.c:708 src/utils/pactl.c:892
#, c-format
#, fuzzy, c-format
msgid "\t\t%s: %s (type: %s, priority: %u%s%s, %s)\n"
msgstr "\t\t%s: %s (tipas: %s, pirmenybė: %u%s%s, %s)\n"
msgstr ""
"\t\t%s: %s (rinktuvų: %u, šaltinių: %u, pirmenybė: %u, prieinama: %s)\n"
#: src/utils/pactl.c:710 src/utils/pactl.c:894 src/utils/pactl.c:1256
msgid ", availability group: "
msgstr ", prieinamumo grupė: "
msgstr ""
#: src/utils/pactl.c:715 src/utils/pactl.c:899
#, c-format
@ -2869,9 +2880,9 @@ msgid "Failure: %s"
msgstr "Triktis: %s"
#: src/utils/pactl.c:1667
#, c-format
#, fuzzy, c-format
msgid "Send message failed: %s"
msgstr "Nepavyko išsiųsti pranešimo: %s"
msgstr "read() nepavyko: %s"
#: src/utils/pactl.c:1695
#, c-format
@ -2880,11 +2891,11 @@ msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
msgstr "nepavyko teisingai išnagrinėti list-handlers pranešimo atsako"
msgstr ""
#: src/utils/pactl.c:1718
msgid "list-handlers message response is not a JSON array"
msgstr "list-handlers pranešimo atsakas nėra JSON masyvas"
msgstr ""
#: src/utils/pactl.c:1729
#, c-format

View file

@ -6,7 +6,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ml\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:41+0000\n"
"Last-Translator: \n"
"Language-Team: <en@li.org>\n"
@ -1133,8 +1133,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1197,14 +1197,14 @@ msgstr "@HOSTNAME@-ലുള്ള ഓഡിയോ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1555,11 +1555,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] തെറ്റായ ലോഗ് ടാര്‍ഗറ്റ് '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "ഇന്റേര്‍ണല്‍ ഓഡിയോ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "മോഡം"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:54+0000\n"
"Last-Translator: Sandeep Shedmake <sshedmak@redhat.com>\n"
"Language-Team: Marathi <fedora-trans-mr@redhat.com>\n"
@ -1139,8 +1139,8 @@ msgstr ""
"नाव> label=<ladspa प्लगइन लेबल> control=<इंपुट कंट्रोल मुल्यांची स्वल्पविराम विभाजीत "
"सूची>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1203,14 +1203,14 @@ msgstr "@HOSTNAME@ वरील ऑडिओ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1561,11 +1561,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] अवैध लॉग लक्ष्य '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "आंतरीक ऑडिओ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "मोडेम"

View file

@ -9,9 +9,9 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2022-11-17 18:19+0000\n"
"Last-Translator: Philip Goto <philip.goto@gmail.com>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-03-30 23:01+0000\n"
"Last-Translator: Pjotr Vertaalt <pjotrvertaalt@gmail.com>\n"
"Language-Team: Dutch <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/nl/>\n"
"Language: nl\n"
@ -19,7 +19,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.14.2\n"
"X-Generator: Weblate 4.5.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -1122,8 +1122,8 @@ msgstr ""
"channel_map=<kanalenkaart> autoloaded=<ingesteld indien deze module "
"automatisch wordt geladen> use_volume_sharing=<ja of nee> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-gebaseerd mengpaneel op %s"
@ -1190,14 +1190,14 @@ msgstr "Geluid op @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel voor %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel naar %s/%s"
@ -1546,11 +1546,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Ongeldig logboekdoel."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Ingebouwde audio"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -2237,11 +2237,11 @@ msgstr "NUMERIEK-NIVEAU"
#: src/utils/pacmd.c:79
msgid "FRAMES"
msgstr "FRAMES"
msgstr ""
#: src/utils/pacmd.c:80 src/utils/pactl.c:2659
msgid "RECIPIENT MESSAGE [MESSAGE_PARAMETERS]"
msgstr "ONTVANGER BERICHT [PARAMETERS_BERICHT]"
msgstr ""
#: src/utils/pacmd.c:82
#, c-format
@ -2342,9 +2342,9 @@ msgid "Failed to get server information: %s"
msgstr "Serverinformatie verkrijgen mislukte: %s"
#: src/utils/pactl.c:224 src/utils/pactl.c:236
#, c-format
#, fuzzy, c-format
msgid "%s\n"
msgstr "%s\n"
msgstr "%s %s"
#: src/utils/pactl.c:281
#, c-format
@ -2416,7 +2416,7 @@ msgstr "Mic"
#: src/utils/pactl.c:338
msgid "Handset"
msgstr "Telefoon"
msgstr ""
#: src/utils/pactl.c:339
msgid "Earpiece"
@ -2879,7 +2879,7 @@ msgstr "bron"
#: src/utils/pactl.c:2167
msgid "sink-input"
msgstr "afvoerinvoer"
msgstr ""
#: src/utils/pactl.c:2170
msgid "source-output"
@ -2895,7 +2895,7 @@ msgstr "cliënt"
#: src/utils/pactl.c:2179
msgid "sample-cache"
msgstr "voorbeeldcache"
msgstr ""
#: src/utils/pactl.c:2182
msgid "server"
@ -3017,9 +3017,9 @@ msgstr ""
"Gelinkt met libpulse %s\n"
#: src/utils/pactl.c:2751
#, c-format
#, fuzzy, c-format
msgid "Invalid format value '%s'"
msgstr "Ongeldige formaatwaarde %s"
msgstr "Ongeldige stroomnaam %s"
#: src/utils/pactl.c:2778
#, c-format
@ -3103,16 +3103,18 @@ msgid "You have to specify a source name"
msgstr "U dient een bronnaam op te geven"
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076
#, fuzzy
msgid "You have to specify a sink name/index"
msgstr "U dient een afvoernaam/-index op te geven"
msgstr "U dient een afvoernaam op te geven"
#: src/utils/pactl.c:3008
msgid "You have to specify a sink name/index and a volume"
msgstr "U dient een afvoernaam/index en een volume op te geven"
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#, fuzzy
msgid "You have to specify a source name/index"
msgstr "U dient een bronnaam/-index op te geven"
msgstr "U dient een bronnaam op te geven"
#: src/utils/pactl.c:3031
msgid "You have to specify a source name/index and a volume"

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-23 11:18+0000\n"
"Last-Translator: Karl Ove Hufthammer <karl@huftis.org>\n"
"Language-Team: Norwegian Nynorsk <https://translate.fedoraproject.org/"
@ -1122,8 +1122,8 @@ msgstr ""
"channels=<talet på kanalar> channel_map=<kanaldefinisjon> autoloaded=<vel "
"dette viss modulen vert lasta automatisk> use_volume_sharing=<yes eller no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-basert lydbalanse­kontroll på %s"
@ -1190,14 +1190,14 @@ msgstr "Lyd på @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunell for %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunell til %s/%s"
@ -1548,11 +1548,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Ugyldig loggmål."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Innebygd lyd"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1946,8 +1946,8 @@ msgstr ""
" --version Vis versjonsinformasjon.\n"
"\n"
" -r, --record Opprett tilkopling for lydopptak.\n"
" -p, --playback Opprett tilkopling for "
"lydavspeling.\n"
" -p, --playback Opprett tilkopling for lydavspeling."
"\n"
"\n"
" -v, --verbose Vis meir detaljerte meldingar.\n"
"\n"
@ -1955,14 +1955,14 @@ msgstr ""
" -d, --device=EINING Namnet på sluket/kjelda å kopla til. "
"Du kan bruka namna @DEFAULT_SINK@, @DEFAULT_SOURCE@ og @DEFAULT_MONITOR@ for "
"å velja standard sluk/kjelde/avlyttar.\n"
" -n, --client-name=NAMN Kva klienten skal kallast på "
"tenaren.\n"
" --stream-name=NAMN Kva straumen skal kallast på "
"tenaren.\n"
" --volume=LYDSTYRKE Vel startlydstyrke (lineær). "
"Verdiar: 065536.\n"
" --rate=SAMPLINGSRATE Samplingsrate i Hz (standard: "
"44100).\n"
" -n, --client-name=NAMN Kva klienten skal kallast på tenaren."
"\n"
" --stream-name=NAMN Kva straumen skal kallast på tenaren."
"\n"
" --volume=LYDSTYRKE Vel startlydstyrke (lineær). Verdiar:"
" 065536.\n"
" --rate=SAMPLINGSRATE Samplingsrate i Hz (standard: 44100)."
"\n"
" --format=SAMPLEFORMAT Samplingsformat. Sjå\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
@ -1983,8 +1983,8 @@ msgstr ""
"frå\n"
" sluket/kjelda som straumen vert "
"kopla til.\n"
" --no-remix Ikkje oppmiks eller nedmiks "
"kanalar.\n"
" --no-remix Ikkje oppmiks eller nedmiks kanalar."
"\n"
" --no-remap Definer kanalar etter indeks, ikkje "
"etter namn.\n"
" --latency=BYTE Be om valt latenstid, målt i byte.\n"
@ -1998,8 +1998,8 @@ msgstr ""
"verdi.\n"
" --raw Ta opp / spel av rå PCM-data.\n"
" --passthrough Vidaresend lyddata.\n"
" --file-format[=FFORMAT] Ta opp / spel av formatert PCM-"
"data.\n"
" --file-format[=FFORMAT] Ta opp / spel av formatert PCM-data."
"\n"
" --list-file-formats Vis tilgjengelege filformat.\n"
" --monitor-stream=INDEKS Ta opp frå sluk-inndata med indeksen "
"INDEKS.\n"

View file

@ -13,7 +13,7 @@ msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2016-10-12 22:20+0200\n"
"Last-Translator: Cédric Valmary (totenoc.eu) <cvalmary@yahoo.fr>\n"
"Language-Team: Tot En Òc\n"
@ -1051,8 +1051,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1119,14 +1119,14 @@ msgstr "Audio sus @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1474,11 +1474,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Àudio integrat"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modèm"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.or\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:55+0000\n"
"Last-Translator: Manoj Kumar Giri <mgiri@redhat.com>\n"
"Language-Team: Oriya <oriya-it@googlegroups.com>\n"
@ -1164,8 +1164,8 @@ msgstr ""
"channel_map=<ଚ୍ୟାନେଲ ମ୍ୟାପ> plugin=<ladspa ପ୍ଲଗଇନ ନାମ> label=<ladspa ପ୍ଲଗଇନ "
"ନାମପଟି> control=<କମା ଦ୍ୱାରା ପୃଥକ ନିବେଶ ନିୟନ୍ତ୍ରଣ ମୂଲ୍ୟ ତାଲିକା>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1227,14 +1227,14 @@ msgstr "@HOSTNAME@ ରେ ଧ୍ୱନି"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1584,11 +1584,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] ଅବୈଧ ଲଗ ଲକ୍ଷ୍ଯସ୍ଥଳ '%s'।"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "ଆଭ୍ୟନ୍ତରୀଣ ଧ୍ୱନି"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "ମଡେମ"

View file

@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.pa\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:55+0000\n"
"Last-Translator: Jaswinder Singh <jsingh@redhat.com>\n"
"Language-Team: Punjabi/Panjabi <kde-i18n-doc@kde.org>\n"
@ -1135,8 +1135,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1199,14 +1199,14 @@ msgstr "@HOSTNAME@ ਉੱਪਰ ਆਡੀਓ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1557,11 +1557,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] ਗਲਤ ਲਾਗ ਟਾਰਗੇਟ '%s'।"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "ਅੰਦਰੂਨੀ ਆਡੀਓ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "ਮਾਡਮ"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-21 10:06+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <https://translate.fedoraproject.org/projects/"
@ -1151,8 +1151,8 @@ msgstr ""
"kanałów> autoloaded=<należy ustawić, jeśli ten moduł jest automatycznie "
"uruchamiany> use_volume_sharing=<yes lub no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Korektor graficzny na podstawie FFT na %s"
@ -1219,14 +1219,14 @@ msgstr "Dźwięk na @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunel dla %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunel do %s/%s"
@ -1576,11 +1576,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Nieprawidłowy dziennik docelowy."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Wbudowany dźwięk"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

509
po/pt.po

File diff suppressed because it is too large Load diff

View file

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-05-10 22:55+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-08-04 08:04+0000\n"
"Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate.fedoraproject.org/"
"projects/pulseaudio/pulseaudio/pt_BR/>\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.11.3\n"
"X-Generator: Weblate 4.7.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -193,12 +193,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail espera argumento booleano"
#: src/daemon/cmdline.c:265
#, fuzzy
msgid ""
"--log-level expects log level argument (either numeric in range 0..4 or one "
"of error, warn, notice, info, debug)."
msgstr ""
"--log-level espera um argumento em nível de log (seja numérico na faixa de "
"0..4 seja algum entre error, warn, notice, info, debug)."
"0..4 seja algum entre debug, info, notice, warn, error)."
#: src/daemon/cmdline.c:277
msgid "--high-priority expects boolean argument"
@ -1161,8 +1162,8 @@ msgstr ""
"canais> autoloaded=<define se este módulo está sendo carregado "
"automaticamente> use_volume_sharing=<yes ou no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Equalizador baseado em FFT em %s"
@ -1229,14 +1230,14 @@ msgstr "Áudio em @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Túnel para %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Túnel para %s/%s"
@ -1586,11 +1587,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Alvo do log inválido."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Áudio interno"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1908,7 +1909,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() falhou: %s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1987,58 +1988,62 @@ msgstr ""
" -v, --verbose Habilita operações no modo "
"detalhado\n"
"\n"
" -s, --server=SERVIDOR O nome do servidor para se conectar\n"
" -d, --device=DISPOSITIVO O nome do destino/fonte para se "
"conectar\n"
" -s, --server=SERVIDOR O nome do servidor a conectar-se\n"
" -d, --device=DISPOSITIVO O nome do destino/fonte a conectar-"
"se\n"
" -n, --client-name=NOME Como chamar este cliente no "
"servidor\n"
" --stream-name=NOME Como chamar este fluxo no servidor\n"
" --volume=VOLUME Especifica o volume (linear) inicial "
"no intervalo 0...65536\n"
" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem em Hz (padrão: "
" --volume=VOLUME Especifica a faixa (linear) inicial\n"
" de volume no intervalo 0...65536\n"
" --rate=TAXA_DE_AMOSTRAGEM Taxa de amostragem, Hz (padrão "
"44100)\n"
" --format=FORMATO_DE_AMOSTRAGEM Formato da amostragem, veja\n"
" --format=FORMATO_DE_AMOSTRAGEM Tipo de amostragem, veja\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" para valores possíveis (padrão: "
"s16ne)\n"
" --channels=CANAIS O número de canais, 1 para mono, 2 "
"para estéreo\n"
" (padrão: 2)\n"
" --channel-map=MAPA_DE_CANAIS Mapeamento de canais para usar em "
"vez do padrão\n"
" --fix-format Obtém o formato da amostragem do "
"destino/fonte onde\n"
" o fluxo está sendo conectado.\n"
" --fix-rate Obtém a taxa de amostragem do "
"destino/fonte onde\n"
" o fluxo está sendo conectado.\n"
" --fix-channels Obtém o número de canais e o mapa de "
"canais do destino\n"
" onde o fluxo está sendo conectado.\n"
" --no-remix Não faz upmix nem downmix dos canais."
"\n"
" --no-remap Mapeia os canais por índice em vez "
"de nome.\n"
" --latency=BYTES Requisita a latência especificada em "
" --channels=CANAIS O número de canais, 1 para mono,\n"
" 2 para estéreo (padrão: 2)\n"
" --channel-map=MAPA_DE_CANAIS Mapeamento de canais a ser usado no\n"
" lugar do padrão\n"
" --fix-format Obtém o formato da amostragem do\n"
" destino/fonte onde o fluxo está\n"
" sendo conectado.\n"
" --fix-rate Obtém a taxa de amostragem do\n"
" destino/fonte onde o fluxo está\n"
" sendo conectado.\n"
" --fix-channels Obtém o número de canais e o mapa "
"de\n"
" canais do destino onde o fluxo está\n"
" sendo conectado.\n"
" --no-remix Não faz upmix nem downmix dos "
"canais.\n"
" --no-remap Mapeia os canais por índice em vez\n"
" de nome\n"
" --latency=BYTES Requisita a latência especificada "
"em\n"
" bytes.\n"
" --process-time=BYTES Requisita o tempo de processo\n"
" especificado por requisições em "
"bytes.\n"
" --process-time=BYTES Requisita o tempo de processo por "
"requisições em bytes.\n"
" --latency-msec=MSEGUNDOS Requisita a latência especificada em "
"milissegundos.\n"
" --process-time-msec=MSEGUNDOS Requisita o tempo de processo por "
"requisições em milissegundos.\n"
" --latency-msec=MSEGUNDOS Requisita a latência especificada "
"em\n"
" milissegundos.\n"
" --process-time-msec=MSEGUNDOS Requisita a o tempo do processo por\n"
" requisição em milissegundos.\n"
" --property=PROPRIEDADE=VALOR Define a propriedade especificada "
"para o valor especificado.\n"
"para\n"
" o valor especificado.\n"
" --raw Grava/reproduz dados PCM não "
"tratados.\n"
" --passthrough Dados para conversão.\n"
" --file-format[=FORMATO_ARQUIVO] Grava/reproduz dados PCM formatados."
"\n"
" --file-format[=FORMATO_ARQUIVO] Grava/reproduz dados PCM "
"formatados.\n"
" --list-file-formats Lista formatos de arquivo "
"disponíveis.\n"
" --monitor-stream=ÍNDICE Grava da entrada do destino com "
"índice ÍNDICE.\n"
"índice.\n"
#: src/utils/pacat.c:793
msgid "Play back encoded audio files on a PulseAudio sound server."
@ -2871,12 +2876,11 @@ msgstr "mensagem list-handlers falhou: %s"
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
msgstr ""
"a resposta da mensagem de list-handlers não pôde ser tratada corretamente"
msgstr "a resposta da mensagem list-handlers não pôde ser tratada corretamente"
#: src/utils/pactl.c:1718
msgid "list-handlers message response is not a JSON array"
msgstr "a resposta da mensagem de list-handlers não é um array JSON"
msgstr "a resposta da mensagem list-handlers não é um array JSON"
#: src/utils/pactl.c:1729
#, c-format
@ -3048,7 +3052,7 @@ msgstr ""
"padrão.\n"
#: src/utils/pactl.c:2664
#, c-format
#, fuzzy, c-format
msgid ""
"\n"
" -h, --help Show this help\n"
@ -3065,9 +3069,7 @@ msgstr ""
" -h, --help Mostra esta ajuda\n"
" --version Mostra a versão\n"
"\n"
" -f, --format=FORMATO O formato da saída. \"normal\" ou "
"\"json\"\n"
" -s, --server=SERVIDOR Nome do servidor para se conectar\n"
" -s, --server=SERVIDOR Nome do servidor a ser conectado\n"
" -n, --client-name=NOME Como chamar este cliente no "
"servidor\n"
@ -3083,9 +3085,9 @@ msgstr ""
"Vinculado com libpulse %s\n"
#: src/utils/pactl.c:2751
#, c-format
#, fuzzy, c-format
msgid "Invalid format value '%s'"
msgstr "Valor de formato “%s” inválido"
msgstr "Nome do fluxo “%s” inválido"
#: src/utils/pactl.c:2778
#, c-format

View file

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -954,7 +954,7 @@ msgid ""
"is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097 src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094 src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1008,12 +1008,12 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370 src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356 src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715 src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697 src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1348,11 +1348,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr ""
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr ""

3412
po/ro.po

File diff suppressed because it is too large Load diff

458
po/ru.po
View file

@ -9,18 +9,18 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-05-11 00:38+0000\n"
"Last-Translator: \"Sergey A.\" <Ser82-png@yandex.ru>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-23 11:18+0000\n"
"Last-Translator: Sergey A. <sw@atrus.ru>\n"
"Language-Team: Russian <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 5.11.3\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 4.12.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -109,8 +109,8 @@ msgstr ""
" --start Запустить демон, если ещё не "
"запущен\n"
" -k --kill Убить процесс запущенного демона\n"
" --check Проверить, запущен ли демон "
"(возвращает только код завершения)\n"
" --check Проверить, запущен ли демон ("
"возвращает только код завершения)\n"
"\n"
"ПАРАМЕТРЫ:\n"
" --system[=BOOL] Запустить в общесистемном режиме\n"
@ -397,7 +397,7 @@ msgstr ""
#: src/daemon/ltdl-bind-now.c:144
msgid "Failed to add bind-now-loader."
msgstr "Не удалось добавить bind-now-loader."
msgstr "Не удалось добавить новый загрузчик bind-now."
#: src/daemon/main.c:265
#, c-format
@ -1063,7 +1063,7 @@ msgstr "Хендс-фри"
#: src/modules/bluetooth/module-bluez5-device.c:1971
msgid "Headphone"
msgstr "Наушники"
msgstr "Наушник"
#: src/modules/bluetooth/module-bluez5-device.c:1977 src/utils/pactl.c:347
msgid "Portable"
@ -1170,8 +1170,8 @@ msgstr ""
"загружен автоматически> use_volume_sharing=<использовать общий уровень "
"громкости (yes или no)> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Эквалайзер на основе БПФ на %s"
@ -1238,14 +1238,18 @@ msgstr "Аудио на @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#: src/modules/module-tunnel-sink-new.c:320
#: src/modules/module-tunnel-source-new.c:305
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Туннель для %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#: src/modules/module-tunnel-sink-new.c:564
#: src/modules/module-tunnel-source-new.c:540
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Туннель к %s/%s"
@ -1268,9 +1272,10 @@ msgstr ""
"приёмника для фильтрации> sink_master=<имя приёмника для фильтрации> "
"format=<формат отсчётов> rate=<частота дискретизации> channels=<число "
"каналов> channel_map=<схема каналов> use_volume_sharing=<использовать общий "
"уровень (yes или no)> force_flat_volume=<yes или no> hrir=/path/to/left_hrir."
"wav hrir_left=/path/to/left_hrir.wav hrir_right=/path/to/optional/right_hrir."
"wav autoloaded=<установлено, если этот модуль загружается автоматически> "
"уровень (yes или no)> force_flat_volume=<yes или no> hrir=/path/to/"
"left_hrir.wav hrir_left=/path/to/left_hrir.wav hrir_right=/path/to/optional/"
"right_hrir.wav autoloaded=<установлено, если этот модуль загружается "
"автоматически> "
#: src/modules/raop/module-raop-discover.c:295
msgid "Unknown device model"
@ -1597,11 +1602,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Недопустимый журнал."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Встроенное аудио"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Модем"
@ -2037,8 +2042,8 @@ msgstr ""
"байтах.\n"
" --process-time=BYTES Запросить указанное время процесса "
"на запрос в байтах.\n"
" --latency-msec=MSEC Запросить указанную задержку в "
"мсек.\n"
" --latency-msec=MSEC Запросить указанную задержку в мсек."
"\n"
" --process-time-msec=MSEC Запросить указанное время процесса "
"на запрос в мсек.\n"
" --property=PROPERTY=VALUE Установить для указанного свойства "
@ -2090,7 +2095,7 @@ msgstr ""
"Скомпилировано с libpulse %s\n"
"Скомпоновано с libpulse %s\n"
#: src/utils/pacat.c:852 src/utils/pactl.c:2731
#: src/utils/pacat.c:852 src/utils/pactl.c:2731 src/utils/pactl.c:2720
#, c-format
msgid "Invalid client name '%s'"
msgstr "Недопустимое имя клиента «%s»"
@ -2163,7 +2168,7 @@ msgstr ""
"Предупреждение: указанная спецификация отсчётов будет заменена спецификацией "
"из файла."
#: src/utils/pacat.c:1091 src/utils/pactl.c:2806
#: src/utils/pacat.c:1091 src/utils/pactl.c:2806 src/utils/pactl.c:2794
msgid "Failed to determine sample specification from file."
msgstr "Не удалось определить спецификацию отсчётов из файла."
@ -2199,7 +2204,7 @@ msgstr "воспроизведения"
msgid "Failed to set media name."
msgstr "Не удалось установить имя потока."
#: src/utils/pacat.c:1172 src/utils/pactl.c:3218
#: src/utils/pacat.c:1172 src/utils/pactl.c:3218 src/utils/pactl.c:3206
msgid "pa_mainloop_new() failed."
msgstr "Произошла ошибка при выполнении pa_mainloop_new()."
@ -2207,11 +2212,11 @@ msgstr "Произошла ошибка при выполнении pa_mainloop_
msgid "io_new() failed."
msgstr "Произошла ошибка при выполнении io_new()."
#: src/utils/pacat.c:1202 src/utils/pactl.c:3230
#: src/utils/pacat.c:1202 src/utils/pactl.c:3230 src/utils/pactl.c:3218
msgid "pa_context_new() failed."
msgstr "Произошла ошибка при выполнении pa_context_new()."
#: src/utils/pacat.c:1210 src/utils/pactl.c:3236
#: src/utils/pacat.c:1210 src/utils/pactl.c:3236 src/utils/pactl.c:3224
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "Произошла ошибка при выполнении pa_context_connect(): %s"
@ -2220,21 +2225,22 @@ msgstr "Произошла ошибка при выполнении pa_context_c
msgid "pa_context_rttime_new() failed."
msgstr "Произошла ошибка при выполнении pa_context_rttime_new()."
#: src/utils/pacat.c:1223 src/utils/pactl.c:3241
#: src/utils/pacat.c:1223 src/utils/pactl.c:3241 src/utils/pactl.c:3229
msgid "pa_mainloop_run() failed."
msgstr "Произошла ошибка при выполнении pa_mainloop_run()."
#: src/utils/pacmd.c:51 src/utils/pactl.c:2643
#: src/utils/pacmd.c:51 src/utils/pactl.c:2643 src/utils/pactl.c:2632
msgid "NAME [ARGS ...]"
msgstr "ИМЯ [АРГУМЕНТЫ ...]"
#: src/utils/pacmd.c:52 src/utils/pacmd.c:60 src/utils/pactl.c:2644
#: src/utils/pactl.c:2651 src/utils/pactl.c:2652
#: src/utils/pactl.c:2651 src/utils/pactl.c:2652 src/utils/pactl.c:2633
#: src/utils/pactl.c:2640 src/utils/pactl.c:2641
msgid "NAME|#N"
msgstr "ИМЯ|№"
#: src/utils/pacmd.c:53 src/utils/pacmd.c:63 src/utils/pactl.c:2642
#: src/utils/pactl.c:2649
#: src/utils/pactl.c:2649 src/utils/pactl.c:2631 src/utils/pactl.c:2638
msgid "NAME"
msgstr "ИМЯ"
@ -2247,6 +2253,7 @@ msgid "#N VOLUME"
msgstr "№ ГРОМКОСТЬ"
#: src/utils/pacmd.c:56 src/utils/pacmd.c:70 src/utils/pactl.c:2646
#: src/utils/pactl.c:2635
msgid "NAME|#N 1|0"
msgstr "ИМЯ|№ 1|0"
@ -2282,7 +2289,7 @@ msgstr "ПУТЬ"
msgid "FILENAME SINK|#N"
msgstr "ИМЯ_ФАЙЛА АУДИОПРИЁМНИК|№"
#: src/utils/pacmd.c:69 src/utils/pactl.c:2645
#: src/utils/pacmd.c:69 src/utils/pactl.c:2645 src/utils/pactl.c:2634
msgid "#N SINK|SOURCE"
msgstr "№ АУДИОПРИЁМНИК|ИСТОЧНИК"
@ -2290,15 +2297,15 @@ msgstr "№ АУДИОПРИЁМНИК|ИСТОЧНИК"
msgid "1|0"
msgstr "1|0"
#: src/utils/pacmd.c:72 src/utils/pactl.c:2647
#: src/utils/pacmd.c:72 src/utils/pactl.c:2647 src/utils/pactl.c:2636
msgid "CARD PROFILE"
msgstr "ПЛАТА ПРОФИЛЬ"
#: src/utils/pacmd.c:73 src/utils/pactl.c:2650
#: src/utils/pacmd.c:73 src/utils/pactl.c:2650 src/utils/pactl.c:2639
msgid "NAME|#N PORT"
msgstr "ИМЯ|№ ПОРТ"
#: src/utils/pacmd.c:74 src/utils/pactl.c:2658
#: src/utils/pacmd.c:74 src/utils/pactl.c:2658 src/utils/pactl.c:2647
msgid "CARD-NAME|CARD-#N PORT OFFSET"
msgstr "ИМЯ_ПЛАТЫ|№_ПЛАТЫ ПОРТ ЗАДЕРЖКА"
@ -2314,7 +2321,7 @@ msgstr "ЧИСЛОВОЙ-УРОВЕНЬ"
msgid "FRAMES"
msgstr "КАДРОВ"
#: src/utils/pacmd.c:80 src/utils/pactl.c:2659
#: src/utils/pacmd.c:80 src/utils/pactl.c:2659 src/utils/pactl.c:2648
msgid "RECIPIENT MESSAGE [MESSAGE_PARAMETERS]"
msgstr "СООБЩЕНИЕ ПОЛУЧАТЕЛЯ [ПАРАМЕТРЫ_СООБЩЕНИЯ]"
@ -2498,7 +2505,7 @@ msgstr "Гарнитура"
#: src/utils/pactl.c:339
msgid "Earpiece"
msgstr "Наушники-вкладыши"
msgstr "Наушник"
#: src/utils/pactl.c:340
msgid "SPDIF"
@ -3012,15 +3019,15 @@ msgstr "Получен сигнал для остановки (SIGINT), выхо
msgid "Invalid volume specification"
msgstr "Недопустимое значение громкости"
#: src/utils/pactl.c:2581
#: src/utils/pactl.c:2581 src/utils/pactl.c:2570
msgid "Volume outside permissible range.\n"
msgstr "Указанная громкость выходит за границы разрешённого диапазона.\n"
#: src/utils/pactl.c:2594
#: src/utils/pactl.c:2594 src/utils/pactl.c:2583
msgid "Invalid number of volume specifications.\n"
msgstr "Недопустимое количество значений громкости.\n"
#: src/utils/pactl.c:2606
#: src/utils/pactl.c:2606 src/utils/pactl.c:2595
msgid "Inconsistent volume specification.\n"
msgstr "Несогласованные способы указания значений громкости.\n"
@ -3032,43 +3039,46 @@ msgstr "Несогласованные способы указания знач
#: src/utils/pactl.c:2651 src/utils/pactl.c:2652 src/utils/pactl.c:2653
#: src/utils/pactl.c:2654 src/utils/pactl.c:2655 src/utils/pactl.c:2656
#: src/utils/pactl.c:2657 src/utils/pactl.c:2658 src/utils/pactl.c:2659
#: src/utils/pactl.c:2660
#: src/utils/pactl.c:2660 src/utils/pactl.c:2625 src/utils/pactl.c:2626
#: src/utils/pactl.c:2627 src/utils/pactl.c:2628 src/utils/pactl.c:2629
#: src/utils/pactl.c:2630 src/utils/pactl.c:2631 src/utils/pactl.c:2632
#: src/utils/pactl.c:2633 src/utils/pactl.c:2634 src/utils/pactl.c:2635
msgid "[options]"
msgstr "[параметры]"
#: src/utils/pactl.c:2638
#: src/utils/pactl.c:2638 src/utils/pactl.c:2627
msgid "[TYPE]"
msgstr "[ТИП]"
#: src/utils/pactl.c:2640
#: src/utils/pactl.c:2640 src/utils/pactl.c:2629
msgid "FILENAME [NAME]"
msgstr "ИМЯ_ФАЙЛА [ИМЯ]"
#: src/utils/pactl.c:2641
#: src/utils/pactl.c:2641 src/utils/pactl.c:2630
msgid "NAME [SINK]"
msgstr "ИМЯ [АУДИОПРИЁМНИК]"
#: src/utils/pactl.c:2653
#: src/utils/pactl.c:2653 src/utils/pactl.c:2642
msgid "NAME|#N VOLUME [VOLUME ...]"
msgstr "ИМЯ|№ ГРОМКОСТЬ [ГРОМКОСТЬ ...]"
#: src/utils/pactl.c:2654
#: src/utils/pactl.c:2654 src/utils/pactl.c:2643
msgid "#N VOLUME [VOLUME ...]"
msgstr "№ ГРОМКОСТЬ [ГРОМКОСТЬ ...]"
#: src/utils/pactl.c:2655
#: src/utils/pactl.c:2655 src/utils/pactl.c:2644
msgid "NAME|#N 1|0|toggle"
msgstr "ИМЯ|№ 1|0|toggle"
#: src/utils/pactl.c:2656
#: src/utils/pactl.c:2656 src/utils/pactl.c:2645
msgid "#N 1|0|toggle"
msgstr "№ 1|0|toggle"
#: src/utils/pactl.c:2657
#: src/utils/pactl.c:2657 src/utils/pactl.c:2646
msgid "#N FORMATS"
msgstr "№ ФОРМАТЫ"
#: src/utils/pactl.c:2661
#: src/utils/pactl.c:2661 src/utils/pactl.c:2650
#, c-format
msgid ""
"\n"
@ -3080,7 +3090,7 @@ msgstr ""
"можно использовать для указания аудиоприёмника, источника и монитора, "
"используемых по умолчанию.\n"
#: src/utils/pactl.c:2664
#: src/utils/pactl.c:2664 src/utils/pactl.c:2653
#, c-format
msgid ""
"\n"
@ -3103,7 +3113,7 @@ msgstr ""
" -s, --server=СЕРВЕР Имя сервера для подключения\n"
" -n, --client-name=ИМЯ Имя этого клиента на сервере\n"
#: src/utils/pactl.c:2707
#: src/utils/pactl.c:2707 src/utils/pactl.c:2696
#, c-format
msgid ""
"pactl %s\n"
@ -3114,65 +3124,66 @@ msgstr ""
"Скомпилировано с libpulse %s\n"
"Скомпоновано с libpulse %s\n"
#: src/utils/pactl.c:2751
#: src/utils/pactl.c:2751 src/utils/pactl.c:2739
#, c-format
msgid "Invalid format value '%s'"
msgstr "Недопустимое значение формата «%s»"
#: src/utils/pactl.c:2778
#: src/utils/pactl.c:2778 src/utils/pactl.c:2766
#, c-format
msgid "Specify nothing, or one of: %s"
msgstr "Не указывайте ничего либо укажите одно из: %s"
#: src/utils/pactl.c:2788
#: src/utils/pactl.c:2788 src/utils/pactl.c:2776
msgid "Please specify a sample file to load"
msgstr "Необходимо указать файл, из которого будет загружен сэмпл"
#: src/utils/pactl.c:2801
#: src/utils/pactl.c:2801 src/utils/pactl.c:2789
msgid "Failed to open sound file."
msgstr "Не удалось открыть аудиофайл."
#: src/utils/pactl.c:2813
#: src/utils/pactl.c:2813 src/utils/pactl.c:2801
msgid "Warning: Failed to determine sample specification from file."
msgstr "Предупреждение: не удалось определить спецификацию отсчётов из файла."
#: src/utils/pactl.c:2823
#: src/utils/pactl.c:2823 src/utils/pactl.c:2811
msgid "You have to specify a sample name to play"
msgstr "Необходимо указать имя сэмпла для воспроизведения"
#: src/utils/pactl.c:2835
#: src/utils/pactl.c:2835 src/utils/pactl.c:2823
msgid "You have to specify a sample name to remove"
msgstr "Необходимо указать имя сэмпла для удаления"
#: src/utils/pactl.c:2844
#: src/utils/pactl.c:2844 src/utils/pactl.c:2832
msgid "You have to specify a sink input index and a sink"
msgstr "Необходимо указать номер входа аудиоприёмника и аудиоприёмник"
#: src/utils/pactl.c:2854
#: src/utils/pactl.c:2854 src/utils/pactl.c:2842
msgid "You have to specify a source output index and a source"
msgstr "Необходимо указать номер выхода источника и источник"
#: src/utils/pactl.c:2869
#: src/utils/pactl.c:2869 src/utils/pactl.c:2857
msgid "You have to specify a module name and arguments."
msgstr "Необходимо указать имя модуля и аргументы."
#: src/utils/pactl.c:2889
#: src/utils/pactl.c:2889 src/utils/pactl.c:2877
msgid "You have to specify a module index or name"
msgstr "Необходимо указать номер или имя модуля"
#: src/utils/pactl.c:2902
#: src/utils/pactl.c:2902 src/utils/pactl.c:2890
msgid ""
"You may not specify more than one sink. You have to specify a boolean value."
msgstr ""
"Нельзя указывать больше одного аудиоприёмника. Необходимо указать логическое "
"значение."
#: src/utils/pactl.c:2907 src/utils/pactl.c:2927
#: src/utils/pactl.c:2907 src/utils/pactl.c:2927 src/utils/pactl.c:2895
#: src/utils/pactl.c:2915
msgid "Invalid suspend specification."
msgstr ""
"Недопустимое значение операции приостановки, ожидалось логическое значение."
#: src/utils/pactl.c:2922
#: src/utils/pactl.c:2922 src/utils/pactl.c:2910
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value."
@ -3180,59 +3191,61 @@ msgstr ""
"Нельзя указывать больше одного источника. Необходимо указать логическое "
"значение."
#: src/utils/pactl.c:2939
#: src/utils/pactl.c:2939 src/utils/pactl.c:2927
msgid "You have to specify a card name/index and a profile name"
msgstr "Необходимо указать имя или номер звуковой платы и имя профиля"
#: src/utils/pactl.c:2950
#: src/utils/pactl.c:2950 src/utils/pactl.c:2938
msgid "You have to specify a sink name/index and a port name"
msgstr "Необходимо указать имя или номер аудиоприёмника и имя порта"
#: src/utils/pactl.c:2961
#: src/utils/pactl.c:2961 src/utils/pactl.c:2949
msgid "You have to specify a sink name"
msgstr "Необходимо указать имя аудиоприёмника"
#: src/utils/pactl.c:2974
#: src/utils/pactl.c:2974 src/utils/pactl.c:2962
msgid "You have to specify a source name/index and a port name"
msgstr "Необходимо указать имя или номер источника и имя порта"
#: src/utils/pactl.c:2985
#: src/utils/pactl.c:2985 src/utils/pactl.c:2973
msgid "You have to specify a source name"
msgstr "Необходимо указать имя источника"
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076
#: src/utils/pactl.c:2998 src/utils/pactl.c:3076 src/utils/pactl.c:2986
#: src/utils/pactl.c:3064
msgid "You have to specify a sink name/index"
msgstr "Необходимо указать имя или номер аудиоприёмника"
#: src/utils/pactl.c:3008
#: src/utils/pactl.c:3008 src/utils/pactl.c:2996
msgid "You have to specify a sink name/index and a volume"
msgstr "Необходимо указать имя или номер аудиоприёмника и громкость"
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101
#: src/utils/pactl.c:3021 src/utils/pactl.c:3101 src/utils/pactl.c:3009
#: src/utils/pactl.c:3089
msgid "You have to specify a source name/index"
msgstr "Необходимо указать имя или номер источника"
#: src/utils/pactl.c:3031
#: src/utils/pactl.c:3031 src/utils/pactl.c:3019
msgid "You have to specify a source name/index and a volume"
msgstr "Необходимо указать имя или номер источника и громкость"
#: src/utils/pactl.c:3044
#: src/utils/pactl.c:3044 src/utils/pactl.c:3032
msgid "You have to specify a sink input index and a volume"
msgstr "Необходимо указать номер входа аудиоприёмника и громкость"
#: src/utils/pactl.c:3049
#: src/utils/pactl.c:3049 src/utils/pactl.c:3037
msgid "Invalid sink input index"
msgstr "Недопустимый номер входа аудиоприёмника"
#: src/utils/pactl.c:3060
#: src/utils/pactl.c:3060 src/utils/pactl.c:3048
msgid "You have to specify a source output index and a volume"
msgstr "Необходимо указать номер выхода источника и громкость"
#: src/utils/pactl.c:3065
#: src/utils/pactl.c:3065 src/utils/pactl.c:3053
msgid "Invalid source output index"
msgstr "Недопустимый номер выхода источника"
#: src/utils/pactl.c:3086
#: src/utils/pactl.c:3086 src/utils/pactl.c:3074
msgid ""
"You have to specify a sink name/index and a mute action (0, 1, or 'toggle')"
msgstr ""
@ -3240,29 +3253,30 @@ msgstr ""
"выключения звука (0, 1 или «toggle»)"
#: src/utils/pactl.c:3091 src/utils/pactl.c:3116 src/utils/pactl.c:3136
#: src/utils/pactl.c:3154
#: src/utils/pactl.c:3154 src/utils/pactl.c:3079 src/utils/pactl.c:3104
#: src/utils/pactl.c:3124 src/utils/pactl.c:3142
msgid "Invalid mute specification"
msgstr "Недопустимое логическое значение выключения звука"
#: src/utils/pactl.c:3111
#: src/utils/pactl.c:3111 src/utils/pactl.c:3099
msgid ""
"You have to specify a source name/index and a mute action (0, 1, or 'toggle')"
msgstr ""
"Необходимо указать имя или номер источника и логическое значение выключения "
"звука (0, 1 или «toggle»)"
#: src/utils/pactl.c:3126
#: src/utils/pactl.c:3126 src/utils/pactl.c:3114
msgid ""
"You have to specify a sink input index and a mute action (0, 1, or 'toggle')"
msgstr ""
"Необходимо указать номер входа аудиоприёмника и логическое значение "
"выключения звука (0, 1 или «toggle»)"
#: src/utils/pactl.c:3131
#: src/utils/pactl.c:3131 src/utils/pactl.c:3119
msgid "Invalid sink input index specification"
msgstr "Недопустимая спецификация номера входа аудиоприёмника"
msgstr "Недопустимый номер входа аудиоприёмника"
#: src/utils/pactl.c:3144
#: src/utils/pactl.c:3144 src/utils/pactl.c:3132
msgid ""
"You have to specify a source output index and a mute action (0, 1, or "
"'toggle')"
@ -3270,15 +3284,15 @@ msgstr ""
"Необходимо указать номер выхода источника и логическое значение выключения "
"звука (0, 1 или «toggle»)"
#: src/utils/pactl.c:3149
#: src/utils/pactl.c:3149 src/utils/pactl.c:3137
msgid "Invalid source output index specification"
msgstr "Недопустимый номер выхода источника"
#: src/utils/pactl.c:3162
#: src/utils/pactl.c:3162 src/utils/pactl.c:3150
msgid "You have to specify at least an object path and a message name"
msgstr "Вы должны указать как минимум путь к объекту и имя сообщения"
#: src/utils/pactl.c:3172
#: src/utils/pactl.c:3160
msgid ""
"Excess arguments given, they will be ignored. Note that all message "
"parameters must be given as a single string."
@ -3286,7 +3300,7 @@ msgstr ""
"Даны лишние аргументы, они будут проигнорированы. Обратите внимание, что все "
"параметры сообщения должны быть предоставлены в виде одной строки."
#: src/utils/pactl.c:3182
#: src/utils/pactl.c:3182 src/utils/pactl.c:3170
msgid ""
"You have to specify a sink index and a semicolon-separated list of supported "
"formats"
@ -3294,15 +3308,15 @@ msgstr ""
"Необходимо указать номер аудиоприёмника и разделённый запятыми список "
"поддерживаемых форматов"
#: src/utils/pactl.c:3194
#: src/utils/pactl.c:3194 src/utils/pactl.c:3182
msgid "You have to specify a card name/index, a port name and a latency offset"
msgstr "Необходимо указать имя или номер звуковой платы, имя порта и задержку"
#: src/utils/pactl.c:3201
#: src/utils/pactl.c:3201 src/utils/pactl.c:3189
msgid "Could not parse latency offset"
msgstr "Недопустимое значение задержки"
#: src/utils/pactl.c:3213
#: src/utils/pactl.c:3213 src/utils/pactl.c:3201
msgid "No valid command specified."
msgstr "Имя команды не указано или не распознано."
@ -3466,134 +3480,134 @@ msgstr "Не удалось загрузить данные cookie.\n"
msgid "Not yet implemented.\n"
msgstr "Не реализовано.\n"
#~ msgid ""
#~ "%s [options]\n"
#~ "%s\n"
#~ "\n"
#~ " -h, --help Show this help\n"
#~ " --version Show version\n"
#~ "\n"
#~ " -r, --record Create a connection for "
#~ "recording\n"
#~ " -p, --playback Create a connection for playback\n"
#~ "\n"
#~ " -v, --verbose Enable verbose operations\n"
#~ "\n"
#~ " -s, --server=SERVER The name of the server to connect "
#~ "to\n"
#~ " -d, --device=DEVICE The name of the sink/source to "
#~ "connect to\n"
#~ " -n, --client-name=NAME How to call this client on the "
#~ "server\n"
#~ " --stream-name=NAME How to call this stream on the "
#~ "server\n"
#~ " --volume=VOLUME Specify the initial (linear) "
#~ "volume in range 0...65536\n"
#~ " --rate=SAMPLERATE The sample rate in Hz (defaults "
#~ "to 44100)\n"
#~ " --format=SAMPLEFORMAT The sample format, see\n"
#~ " https://www.freedesktop.org/wiki/"
#~ "Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
#~ " for possible values (defaults to "
#~ "s16ne)\n"
#~ " --channels=CHANNELS The number of channels, 1 for "
#~ "mono, 2 for stereo\n"
#~ " (defaults to 2)\n"
#~ " --channel-map=CHANNELMAP Channel map to use instead of the "
#~ "default\n"
#~ " --fix-format Take the sample format from the "
#~ "sink/source the stream is\n"
#~ " being connected to.\n"
#~ " --fix-rate Take the sampling rate from the "
#~ "sink/source the stream is\n"
#~ " being connected to.\n"
#~ " --fix-channels Take the number of channels and "
#~ "the channel map\n"
#~ " from the sink/source the stream "
#~ "is being connected to.\n"
#~ " --no-remix Don't upmix or downmix channels.\n"
#~ " --no-remap Map channels by index instead of "
#~ "name.\n"
#~ " --latency=BYTES Request the specified latency in "
#~ "bytes.\n"
#~ " --process-time=BYTES Request the specified process "
#~ "time per request in bytes.\n"
#~ " --latency-msec=MSEC Request the specified latency in "
#~ "msec.\n"
#~ " --process-time-msec=MSEC Request the specified process "
#~ "time per request in msec.\n"
#~ " --property=PROPERTY=VALUE Set the specified property to the "
#~ "specified value.\n"
#~ " --raw Record/play raw PCM data.\n"
#~ " --passthrough Passthrough data.\n"
#~ " --file-format[=FFORMAT] Record/play formatted PCM data.\n"
#~ " --list-file-formats List available file formats.\n"
#~ " --monitor-stream=INDEX Record from the sink input with "
#~ "index INDEX.\n"
#~ msgstr ""
#~ "%s [параметры]\n"
#~ "%s\n"
#~ "\n"
#~ " -h, --help Показать эту справку\n"
#~ " --version Показать сведения о версии\n"
#~ "\n"
#~ " -r, --record Создать соединение для записи\n"
#~ " -p, --playback Создать соединение для "
#~ "воспроизведения\n"
#~ "\n"
#~ " -v, --verbose Включить подробные операции\n"
#~ "\n"
#~ " -s, --server=СЕРВЕР Имя сервера для подключения\n"
#~ " -d, --device=УСТРОЙСТВО Имя приёмника/источника для "
#~ "подключения\n"
#~ " -n, --client-name=ИМЯ Имя этого клиента на сервере\n"
#~ " --stream-name=ИМЯ Имя этого потока на сервере\n"
#~ " --volume=VOLUME Указать начальную (линейную) "
#~ "громкость в диапазоне 0...65536\n"
#~ " --rate=SAMPLERATE Частота дискретизации в Гц (по "
#~ "умолчанию 44100)\n"
#~ " --format=SAMPLEFORMAT Формат выборки, смотрите\n"
#~ " https://www.freedesktop.org/wiki/"
#~ "Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
#~ " возможные значения (по умолчанию "
#~ "s16ne)\n"
#~ " --channels=КАНАЛЫ Количество каналов, 1 для моно, 2 "
#~ "для стерео\n"
#~ " (по умолчанию 2)\n"
#~ " --channel-map=CHANNELMAP Карта каналов для использования "
#~ "вместо установленной по умолчанию\n"
#~ " --fix-format Взять образец формата из "
#~ "приёмника/источника, к которому\n"
#~ " подключен поток.\n"
#~ " --fix-rate Взять частоту дискретизации из "
#~ "приёмника/источника, к которому\n"
#~ " подключен поток.\n"
#~ " --fix-channels Взять количество каналов и карту "
#~ "каналов\n"
#~ " из приёмника/источника, к "
#~ "которому подключен поток.\n"
#~ " --no-remix Не менять число каналов.\n"
#~ " --no-remap Сопоставлять каналы по индексу, а "
#~ "не по имени.\n"
#~ " --latency=BYTES Запросить указанную задержку в "
#~ "байтах.\n"
#~ " --process-time=BYTES Запросить указанное время "
#~ "процесса на запрос в байтах.\n"
#~ " --latency-msec=MSEC Запросить указанную задержку в "
#~ "мсек.\n"
#~ " --process-time-msec=MSEC Запросить указанное время "
#~ "процесса на запрос в мсек.\n"
#~ " --property=PROPERTY=VALUE Установить для указанного "
#~ "свойства указанное значение.\n"
#~ " --raw Запись/воспроизведение "
#~ "необработанных данных PCM.\n"
#~ " --passthrough Пропускать данные.\n"
#~ " --file-format[=FFORMAT] Запись/воспроизведение "
#~ "форматированных данных PCM.\n"
#~ " --list-file-formats Список доступных форматов "
#~ "файлов.\n"
#~ " --monitor-stream=INDEX Запись с входа приёмника с "
#~ "индексом INDEX.\n"
#: src/utils/pacat.c:676
#, c-format
msgid ""
"%s [options]\n"
"%s\n"
"\n"
" -h, --help Show this help\n"
" --version Show version\n"
"\n"
" -r, --record Create a connection for recording\n"
" -p, --playback Create a connection for playback\n"
"\n"
" -v, --verbose Enable verbose operations\n"
"\n"
" -s, --server=SERVER The name of the server to connect "
"to\n"
" -d, --device=DEVICE The name of the sink/source to "
"connect to\n"
" -n, --client-name=NAME How to call this client on the "
"server\n"
" --stream-name=NAME How to call this stream on the "
"server\n"
" --volume=VOLUME Specify the initial (linear) volume "
"in range 0...65536\n"
" --rate=SAMPLERATE The sample rate in Hz (defaults to "
"44100)\n"
" --format=SAMPLEFORMAT The sample format, see\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" for possible values (defaults to "
"s16ne)\n"
" --channels=CHANNELS The number of channels, 1 for mono, "
"2 for stereo\n"
" (defaults to 2)\n"
" --channel-map=CHANNELMAP Channel map to use instead of the "
"default\n"
" --fix-format Take the sample format from the sink/"
"source the stream is\n"
" being connected to.\n"
" --fix-rate Take the sampling rate from the sink/"
"source the stream is\n"
" being connected to.\n"
" --fix-channels Take the number of channels and the "
"channel map\n"
" from the sink/source the stream is "
"being connected to.\n"
" --no-remix Don't upmix or downmix channels.\n"
" --no-remap Map channels by index instead of "
"name.\n"
" --latency=BYTES Request the specified latency in "
"bytes.\n"
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
" --latency-msec=MSEC Request the specified latency in "
"msec.\n"
" --process-time-msec=MSEC Request the specified process time "
"per request in msec.\n"
" --property=PROPERTY=VALUE Set the specified property to the "
"specified value.\n"
" --raw Record/play raw PCM data.\n"
" --passthrough Passthrough data.\n"
" --file-format[=FFORMAT] Record/play formatted PCM data.\n"
" --list-file-formats List available file formats.\n"
" --monitor-stream=INDEX Record from the sink input with "
"index INDEX.\n"
msgstr ""
"%s [параметры]\n"
"%s\n"
"\n"
" -h, --help Показать эту справку\n"
" --version Показать сведения о версии\n"
"\n"
" -r, --record Создать соединение для записи\n"
" -p, --playback Создать соединение для "
"воспроизведения\n"
"\n"
" -v, --verbose Включить подробные операции\n"
"\n"
" -s, --server=СЕРВЕР Имя сервера для подключения\n"
" -d, --device=УСТРОЙСТВО Имя приёмника/источника для "
"подключения\n"
" -n, --client-name=ИМЯ Имя этого клиента на сервере\n"
" --stream-name=ИМЯ Имя этого потока на сервере\n"
" --volume=VOLUME Указать начальную (линейную) "
"громкость в диапазоне 0...65536\n"
" --rate=SAMPLERATE Частота дискретизации в Гц (по "
"умолчанию 44100)\n"
" --format=SAMPLEFORMAT Формат выборки, смотрите\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" возможные значения (по умолчанию "
"s16ne)\n"
" --channels=КАНАЛЫ Количество каналов, 1 для моно, 2 "
"для стерео\n"
" (по умолчанию 2)\n"
" --channel-map=CHANNELMAP Карта каналов для использования "
"вместо установленной по умолчанию\n"
" --fix-format Взять образец формата из приёмника/"
"источника, к которому\n"
" подключен поток.\n"
" --fix-rate Взять частоту дискретизации из "
"приёмника/источника, к которому\n"
" подключен поток.\n"
" --fix-channels Взять количество каналов и карту "
"каналов\n"
" из приёмника/источника, к которому "
"подключен поток.\n"
" --no-remix Не менять число каналов.\n"
" --no-remap Сопоставлять каналы по индексу, а не "
"по имени.\n"
" --latency=BYTES Запросить указанную задержку в "
"байтах.\n"
" --process-time=BYTES Запросить указанное время процесса "
"на запрос в байтах.\n"
" --latency-msec=MSEC Запросить указанную задержку в мсек."
"\n"
" --process-time-msec=MSEC Запросить указанное время процесса "
"на запрос в мсек.\n"
" --property=PROPERTY=VALUE Установить для указанного свойства "
"указанное значение.\n"
" --raw Запись/воспроизведение "
"необработанных данных PCM.\n"
" --passthrough Пропускать данные.\n"
" --file-format[=FFORMAT] Запись/воспроизведение "
"форматированных данных PCM.\n"
" --list-file-formats Список доступных форматов файлов.\n"
" --monitor-stream=INDEX Запись с входа приёмника с индексом "
"INDEX.\n"
#~ msgid "Failed to initialize daemon."
#~ msgstr "Не удалось инициализировать демон."

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-08-19 21:04+0000\n"
"Last-Translator: Hela Basa <r45xveza@pm.me>\n"
"Language-Team: Sinhala <https://translate.fedoraproject.org/projects/"
@ -980,8 +980,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1038,14 +1038,14 @@ msgstr ""
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1382,11 +1382,11 @@ msgstr ""
msgid "Invalid log target."
msgstr ""
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr ""
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr ""

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PulseAudio master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2020-11-25 08:35+0000\n"
"Last-Translator: Dusan Kazik <prescott66@gmail.com>\n"
"Language-Team: Slovak <https://translate.fedoraproject.org/projects/"
@ -1002,8 +1002,8 @@ msgid ""
"this module is being loaded automatically> use_volume_sharing=<yes or no> "
msgstr ""
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1060,14 +1060,14 @@ msgstr "Zvuk na @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunel pre %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunel do %s/%s"
@ -1405,11 +1405,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Neplatný cieľ záznamu."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Vstavaný zvuk"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

3376
po/sl.po

File diff suppressed because it is too large Load diff

View file

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:55+0000\n"
"Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr@redhat.com>\n"
@ -1181,8 +1181,8 @@ msgstr ""
"ladspa додатка> label=<ознака ladspa додатка> control=<списак улазних "
"контролних вредности раздвојених зарезом>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1245,14 +1245,14 @@ msgstr "Аудио на @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1603,11 +1603,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] Неисправан циљни дневник „%s“."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Унутрашњи звук"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Модем"

View file

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:55+0000\n"
"Last-Translator: Miloš Komarčević <kmilos@gmail.com>\n"
"Language-Team: Serbian (sr) <fedora-trans-sr@redhat.com>\n"
@ -1182,8 +1182,8 @@ msgstr ""
"ladspa dodatka> label=<oznaka ladspa dodatka> control=<spisak ulaznih "
"kontrolnih vrednosti razdvojenih zarezom>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1246,14 +1246,14 @@ msgstr "Audio na @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1604,11 +1604,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] Neispravan ciljni dnevnik „%s“."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Unutrašnji zvuk"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

View file

@ -19,7 +19,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-18 22:27+0000\n"
"Last-Translator: Anders Jonsson <anders.jonsson@norsjovallen.se>\n"
"Language-Team: Swedish <https://translate.fedoraproject.org/projects/"
@ -1140,8 +1140,8 @@ msgstr ""
"channel_map=<kanalmappning> autoloaded=<om denna modul läses in automatiskt> "
"use_volume_sharing=<ja eller nej> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT-baserad equalizer på %s"
@ -1208,14 +1208,14 @@ msgstr "Ljud på @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Tunnel för %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Tunnel till %s/%s"
@ -1563,11 +1563,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Ogiltigt mål för logg."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Inbyggt ljud"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.ta\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:56+0000\n"
"Last-Translator: I. Felix <ifelix@redhat.com>\n"
"Language-Team: Tamil <fedora-trans-ta@redhat.com>\n"
@ -1173,8 +1173,8 @@ msgstr ""
"plugin name> label=<ladspa plugin label> control=<comma separated list of "
"input control values>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1237,14 +1237,14 @@ msgstr "@HOSTNAME@இல் ஆடியோ"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1595,11 +1595,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] தவறான பதிவு இலக்கு '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "உட்புற ஆடியோ"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "மாதிரி"

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx.te\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2012-01-30 09:56+0000\n"
"Last-Translator: Krishna Babu K <kkrothap@redhat.com>\n"
"Language-Team: Telugu <en@li.org>\n"
@ -1143,8 +1143,8 @@ msgstr ""
"channel_map=<చానల్ మాప్> plugin=<ladspa ప్లగిన్ నామము> label=<ladspa ప్లగిన్ లేబుల్> "
"control=<ఇన్పుట్ నియంత్రణ విలువలయొక్క జాబితా>"
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr ""
@ -1206,14 +1206,14 @@ msgstr "@HOSTNAME@ పై ఆడియో"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr ""
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr ""
@ -1563,11 +1563,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "[%s:%u] చెల్లని లాగ్ లక్ష్యము '%s'."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "అంతర్గత ఆడియో"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "మోడెమ్"

View file

@ -10,8 +10,8 @@ msgstr ""
"Project-Id-Version: PulseAudio master\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2024-08-01 04:41+0000\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-18 22:27+0000\n"
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
"Language-Team: Turkish <https://translate.fedoraproject.org/projects/"
"pulseaudio/pulseaudio/tr/>\n"
@ -20,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.6.2\n"
"X-Generator: Weblate 4.12.2\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -105,17 +105,17 @@ msgstr ""
"yöntemlerini döker\n"
" --cleanup-shm Eski paylaşımlı bellek segmentlerini "
"temizler\n"
" --start Eğer çalışmıyorsa art alan hizmetini "
"başlatır\n"
" -k --kill Çalışan bir art alan hizmetini "
" --start Eğer çalışmıyorsa arka plan "
"programını başlatır\n"
" -k --kill Çalışan bir arka plan progamını "
"sonlandırır\n"
" --check Çalışan bir art alan hizmetini "
" --check Çalışan bir arka plan programını "
"denetler (sadece çıkış kodu döner)\n"
"\n"
"SEÇENEKLER:\n"
" --system[=BOOL] Sistem çapında örnek olarak "
"çalıştırır\n"
" -D, --daemonize[=BOOL] Başladıktan sonra art alan hizmeti "
" -D, --daemonize[=BOOL] Başladıktan sonra arka plan programı "
"olarak çalıştırır\n"
" --fail[=BOOL] Başlangıç başarısız olduğunda çıkar\n"
" --high-priority[=BOOL] Yüksek öncelik seviyesi ayarlamayı "
@ -136,7 +136,7 @@ msgstr ""
" --disallow-exit[=BOOL] Kullanıcının çıkış isteğine izin "
"vermez\n"
" --exit-idle-time=SANİYE Boştayken ve bu süre geçtiğinde\n"
" art alan hizmetini sonlandırır\n"
" arka plan programını sonlandırır\n"
" --scache-idle-time=SANİYE Boştayken ve bu süre geçtiğinde "
"otomatik\n"
" yüklenmiş örnekleri kaldırır\n"
@ -459,7 +459,7 @@ msgstr ""
#: src/daemon/main.c:788
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Art alan hizmeti durdurulamadı: %s"
msgstr "Arka plan programı durdurulamadı: %s"
#: src/daemon/main.c:817
msgid ""
@ -532,7 +532,7 @@ msgstr "read() başarısız oldu: %s"
#: src/daemon/main.c:954
msgid "Daemon startup failed."
msgstr "Art alan hizmetini başlatma başarısız oldu."
msgstr "Arka plan programını başlatma başarısız oldu."
#: src/daemon/main.c:987
#, c-format
@ -575,14 +575,12 @@ msgid ""
"Failed to initialize daemon due to errors while executing startup commands. "
"Source of commands: %s"
msgstr ""
"Başlatma komutlarını çalıştırırken oluşan hatalar nedeniyle art alan hizmeti "
"başlatılamadı. Komutların kaynağı: %s"
"Başlatma komutlarını çalıştırırken oluşan hatalar nedeniyle arka plan "
"programı başlatılamadı. Komutların kaynağı: %s"
#: src/daemon/main.c:1280
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"Hiç modül yüklenmeden çalışmaya başlamayan art alan hizmeti, çalışmayı "
"reddediyor."
msgstr "Hiç yüklü modül olmadan arka plan programının çalışması reddediliyor."
#: src/daemon/pulseaudio.desktop.in:4
msgid "PulseAudio Sound System"
@ -1133,8 +1131,8 @@ msgstr ""
"otomatikyüklenmiş=<set if this module is being loaded automatically> "
"ses_paylaşım_kullan=<yes or no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "%s üzerinde FFT tabanlı dengeleyici"
@ -1201,14 +1199,14 @@ msgstr "@HOSTNAME@ üzerindeki SES"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "%s@%s için tünel"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "%s/%s tünel"
@ -1558,11 +1556,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Geçersiz günlük hedefi."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Dahili Ses"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Modem"
@ -1706,7 +1704,7 @@ msgstr "Akış boşaltma başarısız oldu: %s"
#: src/utils/pacat.c:139
msgid "Playback stream drained."
msgstr "Oynatım akışı boşaltıldı."
msgstr "Playback akışı boşaltıldı."
#: src/utils/pacat.c:150
msgid "Draining connection to server."
@ -1969,8 +1967,8 @@ msgstr ""
" --format=ÖRNEKLEMEBİÇİMİ Örnekleme biçimi, olası değerler için\n"
" https://www.freedesktop.org/wiki/"
"Software/PulseAudio/Documentation/User/SupportedAudioFormats/\n"
" adresine bakın (öntanımlı değer: "
"s16ne)\n"
" adresine bakın (öntanımlı değer: s16ne)"
"\n"
" --channels=KANALLAR Kanal sayısı, mono için 1, stereo için "
"2\n"
" (öntanımlı değer: 2)\n"
@ -1983,8 +1981,8 @@ msgstr ""
" --fix-channels Kanal eşlemesini ve kanal sayısını "
"akışın bağlı olduğu\n"
" alıcı/kaynaktan alır.\n"
" --no-remix Kanalları indirgemez ya da "
"çoğaltamaz.\n"
" --no-remix Kanalları indirgemez ya da çoğaltamaz."
"\n"
" --no-remap Ad yerine dizin ile kanalları eşler.\n"
" --latency=BAYT Bayt cinsinden belirtilen gecikmeyi "
"ister.\n"
@ -2300,7 +2298,7 @@ msgstr ""
#: src/utils/pacmd.c:143
msgid "No PulseAudio daemon running, or not running as session daemon."
msgstr ""
"Çalışan PulseAudio art alan hizmeti yok veya bir oturum art alan hizmeti "
"Çalışan PulseAudio arka plan programı yok veya bir oturum arka plan progamı "
"olarak çalışmıyor."
#: src/utils/pacmd.c:148
@ -2315,11 +2313,11 @@ msgstr "connect(): %s"
#: src/utils/pacmd.c:173
msgid "Failed to kill PulseAudio daemon."
msgstr "PulseAudio art alan hizmeti durdurulamadı."
msgstr "PulseAudio arka plan programı durdurulamadı."
#: src/utils/pacmd.c:181
msgid "Daemon not responding."
msgstr "Art alan hizmeti yanıt vermiyor."
msgstr "Arka plan programı yanıt vermiyor."
#: src/utils/pacmd.c:213 src/utils/pacmd.c:322 src/utils/pacmd.c:340
#, c-format
@ -3332,11 +3330,12 @@ msgid ""
msgstr ""
"%s [-D ekran] [-S sunucu] [-O alıcı] [-I kaynak] [-c dosya] [-d|-e|-i|-r]\n"
"\n"
" -d X11 ekranına bağlı geçerli PulseAudio verilerini göster (öntanımlı)\n"
" -e X11 ekranına bağlı yerel PulseAudio verilerini dışa aktar\n"
" -d X11 ekranına bağlı geçerli PulseAudio verilerini gösterir "
"(öntanımlı)\n"
" -e X11 ekranına bağlı yerel PulseAudio verilerini dışa aktarır\n"
" -i X11 ekranından PulseAudio verilerini yerel çevresel değişkenlere ve "
"çerez dosyalarına aktar\n"
" -r X11 ekranından PulseAudio verilerini kaldır\n"
"çerez dosyalarına aktarır.\n"
" -r X11 ekranından PulseAudio verilerini kaldırır\n"
#: src/utils/pax11publish.c:91
#, c-format

View file

@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2022-05-18 22:27+0000\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <https://translate.fedoraproject.org/projects/"
@ -1174,8 +1174,8 @@ msgstr ""
"channel_map=<карта каналів> autoloaded=<визначити, чи слід завантажувати цей "
"модуль у автоматичному режимі> use_volume_sharing=<yes або no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "Еквалайзер на основі ШПФ на %s"
@ -1242,14 +1242,14 @@ msgstr "Звук на @НАЗВАВУЗЛА@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "Тунель для %s@%s"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "Тунель до %s/%s"
@ -1601,11 +1601,11 @@ msgstr ""
msgid "Invalid log target."
msgstr "Некоректна адреса файла журналу."
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "Вбудоване аудіо"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "Модем"

View file

@ -12,9 +12,9 @@ msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2023-12-22 16:37+0000\n"
"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2021-12-04 09:16+0000\n"
"Last-Translator: Lv Genggeng <lvgenggeng@uniontech.com>\n"
"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
"projects/pulseaudio/pulseaudio/zh_CN/>\n"
"Language: zh_CN\n"
@ -22,7 +22,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.3\n"
"X-Generator: Weblate 4.9.1\n"
"X-Launchpad-Export-Date: 2016-03-22 13:23+0000\n"
#: src/daemon/cmdline.c:113
@ -1083,8 +1083,8 @@ msgstr ""
"format=<采样格式> rate=<采样率> channels=<声道数> channel_map=<声道映射> "
"autoloaded=<若为自动加载则会设置> use_volume_sharing=<yes 或 no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "基于快速傅里叶变换的均衡器%s"
@ -1147,14 +1147,14 @@ msgstr "@HOSTNAME@ 中的音频"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "%s@%s 的通道"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "到远程信宿 %s/%s 的通道"
@ -1498,11 +1498,11 @@ msgstr "尝试打开目标文件 '%s''%s.1''%s.2'…'%s.%d',但均失败
msgid "Invalid log target."
msgstr "无效的日志目标。"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "内置音频"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "调制解调器"
@ -1816,7 +1816,7 @@ msgid "pa_stream_update_timing_info() failed: %s"
msgstr "pa_stream_update_timing_info() 失败:%s"
#: src/utils/pacat.c:676
#, c-format
#, fuzzy, c-format
msgid ""
"%s [options]\n"
"%s\n"
@ -1885,7 +1885,6 @@ msgid ""
msgstr ""
"%s [选项]\n"
"%s\n"
"\n"
" -h, --help 显示此帮助\n"
" --version 显示版本\n"
"\n"
@ -1898,21 +1897,21 @@ msgstr ""
" -d, --device=设备名 要连接的信宿/信源名称\n"
" -n, --client-name=名称 如何在服务器中调用此客户端\n"
" --stream-name=名称 如何在服务器中调用这个流\n"
" --volume=音量 指定初始线性音量取值在0..."
"65536之间\n"
" --volume=音量 指定初始线性音量取值在0...65536之"
"间\n"
" --rate=SAMPLERATE 采样频率(单位 Hz默认为44100\n"
" --format=SAMPLEFORMAT 采样类型s16le、s16be、u8、float32le "
"一\n"
" float32be、ulaw、alaw、s32le、s32be "
"中取(默认为 s16ne\n"
" --format=SAMPLEFORMAT 采样类型s16le、s16be、u8、float32le "
"一\n"
" float32be、ulaw、alaw、s32le、s32be 中取"
"(默认为 s16ne\n"
" --channels=CHANNELS 通道数1为单声道2为立体声默认为2\n"
" --channel-map=CHANNELMAP 取代默认值的通道映射表\n"
" --fix-format 从流连接的信宿中提取采样格式。\n"
" --fix-rate 从流连接的信宿中提取采样率。\n"
" --fix-channels 从流连接的信宿中提取通道数和通道映射表。"
"\n"
" --no-remix 不要对通道进行 upmix 或者 downmix 操作。"
"\n"
" --fix-channels 从流连接的信宿中提取通道数和通道映射"
"表。\n"
" --no-remix 不要对通道进行 upmix 或者 downmix 操"
"作。\n"
" --no-remap 根据下标而非名称来映射通道。\n"
" --latency=BYTES 请求指定字节数的延迟。\n"
" --process-time=BYTES 每次请求指定字节数的处理时间。\n"

View file

@ -9,17 +9,16 @@ msgstr ""
"Project-Id-Version: PulseAudio Volume Control\n"
"Report-Msgid-Bugs-To: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/"
"issues/new\n"
"POT-Creation-Date: 2022-06-18 09:49+0300\n"
"PO-Revision-Date: 2025-04-09 01:53+0000\n"
"Last-Translator: hsu zangmen <chzang55@gmail.com>\n"
"Language-Team: Chinese (Traditional) <https://translate.fedoraproject.org/"
"projects/pulseaudio/pulseaudio/zh_TW/>\n"
"POT-Creation-Date: 2022-05-16 23:56+0300\n"
"PO-Revision-Date: 2020-01-11 13:49+0800\n"
"Last-Translator: pan93412 <pan93412@gmail.com>\n"
"Language-Team: Chinese <zh-l10n@lists.linux.org.tw>\n"
"Language: zh_TW\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Lokalize 19.12.0\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.10.4\n"
#: src/daemon/cmdline.c:113
#, c-format
@ -1084,8 +1083,8 @@ msgstr ""
"sink> format=<取樣格式> rate=<取樣率> channels=<聲道數> channel_map=<聲道對應"
"表> autoloaded=<設定此模組是否正被自動載入> use_volume_sharing=<yes 或 no> "
#: src/modules/module-equalizer-sink.c:1097
#: src/modules/module-equalizer-sink.c:1220
#: src/modules/module-equalizer-sink.c:1094
#: src/modules/module-equalizer-sink.c:1217
#, c-format
msgid "FFT based equalizer on %s"
msgstr "FFT 基礎等化器於 %s"
@ -1149,14 +1148,14 @@ msgstr "音效位於 @HOSTNAME@"
#. TODO: old tunnel put here the remote sink_name into stream name e.g. 'Null Output for lynxis@lazus'
#. TODO: old tunnel put here the remote source_name into stream name e.g. 'Null Output for lynxis@lazus'
#: src/modules/module-tunnel-sink-new.c:370
#: src/modules/module-tunnel-source-new.c:354
#: src/modules/module-tunnel-sink-new.c:356
#: src/modules/module-tunnel-source-new.c:342
#, c-format
msgid "Tunnel for %s@%s"
msgstr "%s@%s 的穿隧道"
#: src/modules/module-tunnel-sink-new.c:715
#: src/modules/module-tunnel-source-new.c:684
#: src/modules/module-tunnel-sink-new.c:697
#: src/modules/module-tunnel-source-new.c:668
#, c-format
msgid "Tunnel to %s/%s"
msgstr "前往 %s/%s 的穿隧道"
@ -1502,11 +1501,11 @@ msgstr "試圖開啟目標檔「%s」、「%s.1」、「%s.2」...「%s.%d」
msgid "Invalid log target."
msgstr "無效的紀錄目標。"
#: src/pulsecore/sink.c:3609
#: src/pulsecore/sink.c:3600
msgid "Built-in Audio"
msgstr "內部音效"
#: src/pulsecore/sink.c:3614
#: src/pulsecore/sink.c:3605
msgid "Modem"
msgstr "數據機"
@ -2752,11 +2751,11 @@ msgstr ""
#: src/utils/pactl.c:1711 src/utils/pactl.c:1760
msgid "list-handlers message response could not be parsed correctly"
msgstr "無法正確解析 list-handlers 訊息回應"
msgstr ""
#: src/utils/pactl.c:1718
msgid "list-handlers message response is not a JSON array"
msgstr "list-handlers 訊息回應內容不是 JSON 陣列"
msgstr ""
#: src/utils/pactl.c:1729
#, c-format

View file

@ -17,14 +17,7 @@ print_map_file() {
echo "};"
}
print_def_file() {
echo "EXPORTS"
ctags -I ${CTAGS_IDENTIFIER_LIST} -f - --c-kinds=p "$@" | awk '/^pa_/ && !/(^pa_glib_|^pa_simple_)/ { print $1 }' | sort
}
TARGET_FILE=$1
shift
MAP_FILE=$1
DEF_FILE=$2
shift 2
cd "${MESON_SOURCE_ROOT}/${MESON_SUBDIR}" && print_map_file "$@" > ${MAP_FILE}
cd "${MESON_SOURCE_ROOT}/${MESON_SUBDIR}" && print_def_file "$@" > ${DEF_FILE}
cd "${MESON_SOURCE_ROOT}/${MESON_SUBDIR}" && print_map_file "$@" > ${TARGET_FILE}

View file

@ -116,13 +116,12 @@ _pactl() {
modules samples clients message-handlers'
local commands=(stat info list exit upload-sample play-sample remove-sample
load-module unload-module move-sink-input move-source-output
suspend-sink suspend-source set-card-profile get-default-sink
set-default-sink set-sink-port get-default-source set-default-source
set-source-port get-sink-volume set-sink-volume get-source-volume
suspend-sink suspend-source set-card-profile set-default-sink
set-sink-port set-default-source set-source-port set-sink-volume
set-source-volume set-sink-input-volume set-source-output-volume
get-sink-mute set-sink-mute get-source-mute set-source-mute
set-sink-input-mute set-source-output-mute set-sink-formats
set-port-latency-offset subscribe send-message help)
set-sink-mute set-source-mute set-sink-input-mute
set-source-output-mute set-sink-formats set-port-latency-offset
subscribe send-message help)
_init_completion -n = || return
preprev=${words[$cword-2]}
@ -187,8 +186,6 @@ _pactl() {
remove-sample) ;; # TODO
get-default*) ;;
load-module)
comps=$(__all_modules)
COMPREPLY=($(compgen -W '${comps[*]}' -- "$cur"))

View file

@ -18,12 +18,10 @@ _devices() {
if [[ $service == pactl || $service == pacmd ]]; then
case $words[$((CURRENT - 1))] in
set-sink-input-*) cmd=('sink-inputs');;
get-sink-*) cmd=('sinks');;
set-sink-*) cmd=('sinks');;
set-default-sink) cmd=('sinks');;
set-default-source) cmd=('sources');;
set-source-output-*) cmd=('source-outputs');;
get-source-*) cmd=('sources');;
set-source-*) cmd=('sources');;
suspend-sink) cmd=('sinks');;
suspend-source) cmd=('sources');;
@ -259,22 +257,16 @@ _pactl_completion() {
'suspend-sink: suspend or resume a sink'
'suspend-source: suspend or resume a source'
'set-card-profile: set a card profile'
'get-default-sink: get the default sink'
'set-default-sink: set the default sink'
'get-default-source: get the default source'
'set-default-source: set the default source'
'set-sink-port: set the sink port of a sink'
'set-source-port: set the source port of a source'
'set-port-latency-offset: set a latency offset on a port'
'get-sink-volume: get the volume of a sink'
'set-sink-volume: set the volume of a sink'
'get-source-volume: get the volume of a source'
'set-source-volume: set the volume of a source'
'set-sink-input-volume: set the volume of a stream'
'set-source-output-volume: set the volume of a recording stream'
'get-sink-mute: get the mute status of a sink'
'set-sink-mute: mute a sink'
'get-source-mute: get the mute status of a source'
'set-source-mute: mute a source'
'set-sink-input-mute: mute a stream'
'set-source-output-mute: mute a recording stream'
@ -500,15 +492,11 @@ _pactl_completion() {
set-default-source) if ((CURRENT == 2)); then _devices; fi;;
set-sink-port) _set_sink_port_parameter;;
set-source-port) _set_source_port_parameter;;
get-sink-volume) if ((CURRENT == 2)); then _devices; fi;;
set-sink-volume) if ((CURRENT == 2)); then _devices; fi;;
get-source-volume) if ((CURRENT == 2)); then _devices; fi;;
set-source-volume) if ((CURRENT == 2)); then _devices; fi;;
set-sink-input-volume) if ((CURRENT == 2)); then _devices; fi;;
set-source-output-volume) if ((CURRENT == 2)); then _devices; fi;;
get-sink-mute) if ((CURRENT == 2)); then _devices; fi;;
set-sink-mute) _set_sink_mute_parameter;;
get-source-mute) if ((CURRENT == 2)); then _devices; fi;;
set-source-mute) _set_source_mute_parameter;;
set-sink-input-mute) _set_sink_input_mute_parameter;;
set-source-output-mute) _set_source_output_mute_parameter;;

View file

@ -141,7 +141,7 @@ custom_target('system.pa',
if dbus_dep.found()
install_data('pulseaudio-system.conf',
install_dir : join_paths(datadir, 'dbus-1', 'system.d')
install_dir : join_paths(sysconfdir, 'dbus-1', 'system.d')
)
endif

View file

@ -182,14 +182,9 @@ if host_machine.system() == 'windows'
else
libpulsecommon_sources += [
'pulsecore/mutex-posix.c',
'pulsecore/poll-posix.c',
'pulsecore/thread-posix.c',
'pulsecore/semaphore-posix.c',
'pulsecore/thread-posix.c'
]
if host_machine.system() == 'darwin'
libpulsecommon_sources += ['pulsecore/semaphore-osx.c']
else
libpulsecommon_sources += ['pulsecore/semaphore-posix.c']
endif
endif
# FIXME: Do SIMD things
@ -210,7 +205,7 @@ else
libm_dep, thread_dep, dl_dep, shm_dep, iconv_dep, sndfile_dep, dbus_dep,
x11_dep, libsystemd_dep, glib_dep.partial_dependency(compile_args: true),
gtk_dep.partial_dependency(compile_args: true), asyncns_dep, libintl_dep,
platform_dep, platform_socket_dep, execinfo_dep, libatomic_ops_dep,
platform_dep, platform_socket_dep, execinfo_dep,
],
implicit_include_directories : false)

View file

@ -175,9 +175,6 @@ ATTRS{idVendor}=="1395", ATTRS{idProduct}=="0300", ENV{PULSE_PROFILE_SET}="usb-g
# Sennheiser GSP 670 USB headset
ATTRS{idVendor}=="1395", ATTRS{idProduct}=="008a", ENV{PULSE_PROFILE_SET}="usb-gaming-headset.conf"
# Asus Xonar SE
ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="189d", ENV{PULSE_PROFILE_SET}="asus-xonar-se.conf"
GOTO="pulseaudio_end"
LABEL="pulseaudio_check_pci"

View file

@ -2838,7 +2838,7 @@ static int path_verify(pa_alsa_path *p) {
if (p->device_port_type == PA_DEVICE_PORT_TYPE_UNKNOWN)
p->device_port_type = map->type;
if (!p->description)
p->description = pa_xstrdup(_(map->description));
p->description = pa_xstrdup(map->description);
}
if (!p->description) {
@ -2851,44 +2851,41 @@ static int path_verify(pa_alsa_path *p) {
return 0;
}
static char *get_data_path(const char *data_dir, const char *data_type, const char *fname) {
char *result;
static char *get_path_config_path(const char *paths_dir, const char *fname) {
char *path_config_path;
char *dir;
char *data_home;
pa_dynarray *data_dirs;
if (data_dir) {
result = pa_maybe_prefix_path(fname, data_dir);
if (access(result, R_OK) == 0)
return result;
if (paths_dir) {
path_config_path = pa_maybe_prefix_path(fname, paths_dir);
if (access(path_config_path, R_OK) == 0)
return path_config_path;
else
pa_xfree(result);
pa_xfree(path_config_path);
}
#ifdef HAVE_RUNNING_FROM_BUILD_TREE
if (pa_run_from_build_tree()) {
dir = pa_sprintf_malloc(PA_SRCDIR "/modules/alsa/mixer/%s/", data_type);
result = pa_maybe_prefix_path(fname, dir);
pa_xfree(dir);
if (access(result, R_OK) == 0)
return result;
path_config_path = pa_maybe_prefix_path(fname, PA_SRCDIR "/modules/alsa/mixer/paths/");
if (access(path_config_path, R_OK) == 0)
return path_config_path;
else
pa_xfree(result);
pa_xfree(path_config_path);
}
#endif
if (pa_get_data_home_dir(&data_home) == 0) {
dir = pa_sprintf_malloc("%s" PA_PATH_SEP "alsa-mixer" PA_PATH_SEP "%s", data_home, data_type);
dir = pa_sprintf_malloc("%s" PA_PATH_SEP "alsa-mixer" PA_PATH_SEP "paths", data_home);
pa_xfree(data_home);
result = pa_maybe_prefix_path(fname, dir);
path_config_path = pa_maybe_prefix_path(fname, dir);
pa_xfree(dir);
if (access(result, R_OK) == 0)
return result;
if (access(path_config_path, R_OK) == 0)
return path_config_path;
else
pa_xfree(result);
pa_xfree(path_config_path);
}
if (pa_get_data_dirs(&data_dirs) == 0) {
@ -2896,27 +2893,24 @@ static char *get_data_path(const char *data_dir, const char *data_type, const ch
const char *n;
PA_DYNARRAY_FOREACH(n, data_dirs, idx) {
dir = pa_sprintf_malloc("%s" PA_PATH_SEP "alsa-mixer" PA_PATH_SEP "%s", n, data_type);
result = pa_maybe_prefix_path(fname, dir);
dir = pa_sprintf_malloc("%s" PA_PATH_SEP "alsa-mixer" PA_PATH_SEP "paths", n);
path_config_path = pa_maybe_prefix_path(fname, dir);
pa_xfree(dir);
if (access(result, R_OK) == 0) {
if (access(path_config_path, R_OK) == 0) {
pa_dynarray_free(data_dirs);
return result;
return path_config_path;
}
else {
pa_xfree(result);
pa_xfree(path_config_path);
}
}
pa_dynarray_free(data_dirs);
}
dir = pa_sprintf_malloc(PA_ALSA_DATA_DIR PA_PATH_SEP "%s", data_type);
result = pa_maybe_prefix_path(fname, dir);
pa_xfree(dir);
return result;
path_config_path = pa_maybe_prefix_path(fname, PA_ALSA_PATHS_DIR);
return path_config_path;
}
pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa_direction_t direction) {
@ -2983,7 +2977,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa
items[2].data = &p->description;
items[3].data = &mute_during_activation;
fn = get_data_path(paths_dir, "paths", fname);
fn = get_path_config_path(paths_dir, fname);
pa_log_info("Loading path config: %s", fn);
@ -4977,9 +4971,11 @@ pa_alsa_profile_set* pa_alsa_profile_set_new(const char *fname, const pa_channel
if (!fname)
fname = "default.conf";
fn = get_data_path(NULL, "profile-sets", fname);
pa_log_info("Loading profile set: %s", fn);
fn = pa_maybe_prefix_path(fname,
#ifdef HAVE_RUNNING_FROM_BUILD_TREE
pa_run_from_build_tree() ? PA_SRCDIR "/modules/alsa/mixer/profile-sets/" :
#endif
PA_ALSA_PROFILE_SETS_DIR);
r = pa_config_parse(fn, NULL, items, NULL, false, ps);
pa_xfree(fn);
@ -5078,7 +5074,7 @@ static snd_pcm_t* mapping_open_pcm(pa_alsa_mapping *m,
handle = pa_alsa_open_by_template(
m->device_strings, dev_id, NULL, &try_ss,
&try_map, mode, &try_period_size,
&try_buffer_size, 0, NULL, NULL, NULL, NULL, exact_channels);
&try_buffer_size, 0, NULL, NULL, exact_channels);
if (handle && !exact_channels && m->channel_map.channels != try_map.channels) {
char buf[PA_CHANNEL_MAP_SNPRINT_MAX];
pa_log_debug("Channel map for mapping '%s' permanently changed to '%s'", m->name,

View file

@ -318,7 +318,7 @@ struct pa_alsa_mapping {
pa_sink *sink;
pa_source *source;
/* ucm device context */
/* ucm device context*/
pa_alsa_ucm_mapping_context ucm_context;
};
@ -342,9 +342,6 @@ struct pa_alsa_profile {
pa_idxset *input_mappings;
pa_idxset *output_mappings;
/* ucm device context */
pa_alsa_ucm_profile_context ucm_context;
};
struct pa_alsa_decibel_fix {

View file

@ -1721,7 +1721,7 @@ static int sink_set_port_ucm_cb(pa_sink *s, pa_device_port *p) {
else
sync_mixer(u, p);
return pa_alsa_ucm_set_port(u->ucm_context, p);
return pa_alsa_ucm_set_port(u->ucm_context, p, true);
}
static int sink_set_port_cb(pa_sink *s, pa_device_port *p) {
@ -2239,7 +2239,7 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
* will be NULL, but the UCM device enable sequence will still need to be
* executed. */
if (u->sink->active_port && u->ucm_context) {
if (pa_alsa_ucm_set_port(u->ucm_context, u->sink->active_port) < 0)
if (pa_alsa_ucm_set_port(u->ucm_context, u->sink->active_port, true) < 0)
return -1;
}
@ -2527,9 +2527,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
&b, &d,
&u->supported_formats, &u->supported_rates,
mapping)))
&b, &d, mapping)))
goto fail;
} else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) {
@ -2543,9 +2541,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
&b, &d,
&u->supported_formats, &u->supported_rates,
profile_set, &mapping)))
&b, &d, profile_set, &mapping)))
goto fail;
} else {
@ -2556,9 +2552,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
&b, &d,
&u->supported_formats, &u->supported_rates,
false)))
&b, &d, false)))
goto fail;
}
@ -2604,11 +2598,13 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
u->verified_sample_spec = ss;
u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format);
if (!u->supported_formats) {
pa_log_error("Failed to find any supported sample formats.");
goto fail;
}
u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate);
if (!u->supported_rates) {
pa_log_error("Failed to find any supported sample rates.");
goto fail;

View file

@ -1595,7 +1595,7 @@ static int source_set_port_ucm_cb(pa_source *s, pa_device_port *p) {
else
sync_mixer(u, p);
return pa_alsa_ucm_set_port(u->ucm_context, p);
return pa_alsa_ucm_set_port(u->ucm_context, p, false);
}
static int source_set_port_cb(pa_source *s, pa_device_port *p) {
@ -1943,7 +1943,7 @@ static int setup_mixer(struct userdata *u, bool ignore_dB) {
* will be NULL, but the UCM device enable sequence will still need to be
* executed. */
if (u->source->active_port && u->ucm_context) {
if (pa_alsa_ucm_set_port(u->ucm_context, u->source->active_port) < 0)
if (pa_alsa_ucm_set_port(u->ucm_context, u->source->active_port, false) < 0)
return -1;
}
@ -2218,7 +2218,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
&b, &d, &u->supported_formats, &u->supported_rates, mapping)))
&b, &d, mapping)))
goto fail;
} else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) {
@ -2232,7 +2232,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
&b, &d, &u->supported_formats, &u->supported_rates, profile_set, &mapping)))
&b, &d, profile_set, &mapping)))
goto fail;
} else {
@ -2243,7 +2243,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
&b, &d, &u->supported_formats, &u->supported_rates, false)))
&b, &d, false)))
goto fail;
}
@ -2279,11 +2279,13 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
u->verified_sample_spec = ss;
u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format);
if (!u->supported_formats) {
pa_log_error("Failed to find any supported sample formats.");
goto fail;
}
u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate);
if (!u->supported_rates) {
pa_log_error("Failed to find any supported sample rates.");
goto fail;

File diff suppressed because it is too large Load diff

View file

@ -140,13 +140,12 @@ typedef struct pa_alsa_ucm_modifier pa_alsa_ucm_modifier;
typedef struct pa_alsa_ucm_device pa_alsa_ucm_device;
typedef struct pa_alsa_ucm_config pa_alsa_ucm_config;
typedef struct pa_alsa_ucm_mapping_context pa_alsa_ucm_mapping_context;
typedef struct pa_alsa_ucm_profile_context pa_alsa_ucm_profile_context;
typedef struct pa_alsa_ucm_port_data pa_alsa_ucm_port_data;
typedef struct pa_alsa_ucm_volume pa_alsa_ucm_volume;
int pa_alsa_ucm_query_profiles(pa_alsa_ucm_config *ucm, int card_index);
pa_alsa_profile_set* pa_alsa_ucm_add_profile_set(pa_alsa_ucm_config *ucm, pa_channel_map *default_channel_map);
int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, pa_alsa_profile *new_profile, pa_alsa_profile *old_profile);
int pa_alsa_ucm_set_profile(pa_alsa_ucm_config *ucm, pa_card *card, const char *new_profile, const char *old_profile);
int pa_alsa_ucm_get_verb(snd_use_case_mgr_t *uc_mgr, const char *verb_name, const char *verb_desc, pa_alsa_ucm_verb **p_verb);
@ -158,14 +157,14 @@ void pa_alsa_ucm_add_ports(
pa_card *card,
snd_pcm_t *pcm_handle,
bool ignore_dB);
void pa_alsa_ucm_add_port(
void pa_alsa_ucm_add_ports_combination(
pa_hashmap *hash,
pa_alsa_ucm_mapping_context *context,
bool is_sink,
pa_hashmap *ports,
pa_card_profile *cp,
pa_core *core);
int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *port);
int pa_alsa_ucm_set_port(pa_alsa_ucm_mapping_context *context, pa_device_port *port, bool is_sink);
void pa_alsa_ucm_free(pa_alsa_ucm_config *ucm);
void pa_alsa_ucm_mapping_context_free(pa_alsa_ucm_mapping_context *context);
@ -222,8 +221,11 @@ struct pa_alsa_ucm_modifier {
pa_proplist *proplist;
pa_idxset *conflicting_devices;
pa_idxset *supported_devices;
int n_confdev;
int n_suppdev;
const char **conflicting_devices;
const char **supported_devices;
pa_direction_t action_direction;
@ -262,23 +264,21 @@ struct pa_alsa_ucm_mapping_context {
pa_alsa_ucm_config *ucm;
pa_direction_t direction;
pa_alsa_ucm_device *ucm_device;
pa_alsa_ucm_modifier *ucm_modifier;
};
struct pa_alsa_ucm_profile_context {
pa_alsa_ucm_verb *verb;
pa_idxset *ucm_devices;
pa_idxset *ucm_modifiers;
};
struct pa_alsa_ucm_port_data {
pa_alsa_ucm_config *ucm;
pa_device_port *core_port;
pa_alsa_ucm_device *device;
/* A single port will be associated with multiple devices if it represents
* a combination of devices. */
pa_dynarray *devices; /* pa_alsa_ucm_device */
/* verb name -> pa_alsa_path for volume control */
/* profile name -> pa_alsa_path for volume control */
pa_hashmap *paths;
/* Current path, set when activating verb */
/* Current path, set when activating profile */
pa_alsa_path *path;
/* ELD info */

View file

@ -40,7 +40,6 @@
#include <pulsecore/thread.h>
#include <pulsecore/conf-parser.h>
#include <pulsecore/core-rtclock.h>
#include <pulsecore/strbuf.h>
#include "alsa-util.h"
#include "alsa-mixer.h"
@ -523,8 +522,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
pa_sample_format_t **query_supported_formats,
unsigned int **query_supported_rates,
pa_alsa_profile_set *ps,
pa_alsa_mapping **mapping) {
@ -563,8 +560,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
query_supported_formats,
query_supported_rates,
m);
if (pcm_handle) {
@ -592,8 +587,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
query_supported_formats,
query_supported_rates,
m);
if (pcm_handle) {
@ -618,8 +611,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
query_supported_formats,
query_supported_rates,
false);
pa_xfree(d);
@ -640,8 +631,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
pa_sample_format_t **query_supported_formats,
unsigned int **query_supported_rates,
pa_alsa_mapping *m) {
snd_pcm_t *pcm_handle;
@ -671,8 +660,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
tsched_size,
use_mmap,
use_tsched,
query_supported_formats,
query_supported_rates,
pa_channel_map_valid(&m->channel_map) /* Query the channel count if we don't know what we want */);
if (!pcm_handle)
@ -696,8 +683,6 @@ snd_pcm_t *pa_alsa_open_by_device_string(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
pa_sample_format_t **query_supported_formats,
unsigned int **query_supported_rates,
bool require_exact_channel_number) {
int err;
@ -725,12 +710,6 @@ snd_pcm_t *pa_alsa_open_by_device_string(
pa_log_debug("Managed to open %s", d);
if (query_supported_formats)
*query_supported_formats = pa_alsa_get_supported_formats(pcm_handle, ss->format);
if (query_supported_rates)
*query_supported_rates = pa_alsa_get_supported_rates(pcm_handle, ss->rate);
if ((err = pa_alsa_set_hw_params(
pcm_handle,
ss,
@ -804,8 +783,6 @@ snd_pcm_t *pa_alsa_open_by_template(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
pa_sample_format_t **query_supported_formats,
unsigned int **query_supported_rates,
bool require_exact_channel_number) {
snd_pcm_t *pcm_handle;
@ -827,8 +804,6 @@ snd_pcm_t *pa_alsa_open_by_template(
tsched_size,
use_mmap,
use_tsched,
query_supported_formats,
query_supported_rates,
require_exact_channel_number);
pa_xfree(d);
@ -1431,31 +1406,13 @@ char *pa_alsa_get_reserve_name(const char *device) {
return pa_sprintf_malloc("Audio%i", i);
}
static void dump_supported_rates(unsigned int* values)
{
pa_strbuf *buf;
char *str;
int i;
buf = pa_strbuf_new();
for (i = 0; values[i]; i++) {
pa_strbuf_printf(buf, " %u", values[i]);
}
str = pa_strbuf_to_string_free(buf);
pa_log_debug("Supported rates:%s", str);
pa_xfree(str);
}
unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_rate) {
static unsigned int all_rates[] = { 8000, 11025, 12000,
16000, 22050, 24000,
32000, 44100, 48000,
64000, 88200, 96000,
128000, 176400, 192000,
352800, 384000,
705600, 768000 };
384000 };
bool supported[PA_ELEMENTSOF(all_rates)] = { false, };
snd_pcm_hw_params_t *hwparams;
unsigned int i, j, n, *rates = NULL;
@ -1497,40 +1454,39 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_
rates[1] = 0;
}
dump_supported_rates(rates);
return rates;
}
pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_format_t fallback_format) {
static const snd_pcm_format_t format_trans_to_pcm[] = {
[PA_SAMPLE_U8] = SND_PCM_FORMAT_U8,
[PA_SAMPLE_ALAW] = SND_PCM_FORMAT_A_LAW,
[PA_SAMPLE_ULAW] = SND_PCM_FORMAT_MU_LAW,
[PA_SAMPLE_S16LE] = SND_PCM_FORMAT_S16_LE,
[PA_SAMPLE_S16BE] = SND_PCM_FORMAT_S16_BE,
[PA_SAMPLE_FLOAT32LE] = SND_PCM_FORMAT_FLOAT_LE,
[PA_SAMPLE_FLOAT32BE] = SND_PCM_FORMAT_FLOAT_BE,
[PA_SAMPLE_S32LE] = SND_PCM_FORMAT_S32_LE,
[PA_SAMPLE_S32BE] = SND_PCM_FORMAT_S32_BE,
[PA_SAMPLE_S24LE] = SND_PCM_FORMAT_S24_3LE,
[PA_SAMPLE_S24BE] = SND_PCM_FORMAT_S24_3BE,
[PA_SAMPLE_S24_32LE] = SND_PCM_FORMAT_S24_LE,
[PA_SAMPLE_S24_32BE] = SND_PCM_FORMAT_S24_BE,
static const snd_pcm_format_t format_trans_to_pa[] = {
[SND_PCM_FORMAT_U8] = PA_SAMPLE_U8,
[SND_PCM_FORMAT_A_LAW] = PA_SAMPLE_ALAW,
[SND_PCM_FORMAT_MU_LAW] = PA_SAMPLE_ULAW,
[SND_PCM_FORMAT_S16_LE] = PA_SAMPLE_S16LE,
[SND_PCM_FORMAT_S16_BE] = PA_SAMPLE_S16BE,
[SND_PCM_FORMAT_FLOAT_LE] = PA_SAMPLE_FLOAT32LE,
[SND_PCM_FORMAT_FLOAT_BE] = PA_SAMPLE_FLOAT32BE,
[SND_PCM_FORMAT_S32_LE] = PA_SAMPLE_S32LE,
[SND_PCM_FORMAT_S32_BE] = PA_SAMPLE_S32BE,
[SND_PCM_FORMAT_S24_3LE] = PA_SAMPLE_S24LE,
[SND_PCM_FORMAT_S24_3BE] = PA_SAMPLE_S24BE,
[SND_PCM_FORMAT_S24_LE] = PA_SAMPLE_S24_32LE,
[SND_PCM_FORMAT_S24_BE] = PA_SAMPLE_S24_32BE,
};
static const pa_sample_format_t all_formats[] = {
PA_SAMPLE_U8,
PA_SAMPLE_ALAW,
PA_SAMPLE_ULAW,
PA_SAMPLE_S16LE,
PA_SAMPLE_S16BE,
PA_SAMPLE_FLOAT32LE,
PA_SAMPLE_FLOAT32BE,
PA_SAMPLE_S32LE,
PA_SAMPLE_S32BE,
PA_SAMPLE_S24LE,
PA_SAMPLE_S24BE,
PA_SAMPLE_S24_32LE,
PA_SAMPLE_S24_32BE,
static const snd_pcm_format_t all_formats[] = {
SND_PCM_FORMAT_U8,
SND_PCM_FORMAT_A_LAW,
SND_PCM_FORMAT_MU_LAW,
SND_PCM_FORMAT_S16_LE,
SND_PCM_FORMAT_S16_BE,
SND_PCM_FORMAT_FLOAT_LE,
SND_PCM_FORMAT_FLOAT_BE,
SND_PCM_FORMAT_S32_LE,
SND_PCM_FORMAT_S32_BE,
SND_PCM_FORMAT_S24_3LE,
SND_PCM_FORMAT_S24_3BE,
SND_PCM_FORMAT_S24_LE,
SND_PCM_FORMAT_S24_BE,
};
bool supported[PA_ELEMENTSOF(all_formats)] = {
false,
@ -1548,7 +1504,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
}
for (i = 0, n = 0; i < PA_ELEMENTSOF(all_formats); i++) {
if (snd_pcm_hw_params_test_format(pcm, hwparams, format_trans_to_pcm[all_formats[i]]) == 0) {
if (snd_pcm_hw_params_test_format(pcm, hwparams, all_formats[i]) == 0) {
supported[i] = true;
n++;
}
@ -1559,7 +1515,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
for (i = 0, j = 0; i < PA_ELEMENTSOF(all_formats); i++) {
if (supported[i])
formats[j++] = all_formats[i];
formats[j++] = format_trans_to_pa[all_formats[i]];
}
formats[j] = PA_SAMPLE_MAX;
@ -1567,7 +1523,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
formats = pa_xnew(pa_sample_format_t, 2);
formats[0] = fallback_format;
if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pcm[formats[0]])) < 0) {
if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pa[formats[0]])) < 0) {
pa_log_debug("snd_pcm_hw_params_set_format() failed: %s", pa_alsa_strerror(ret));
pa_xfree(formats);
return NULL;
@ -1658,16 +1614,14 @@ static snd_mixer_elem_t *pa_alsa_mixer_find(snd_mixer_t *mixer,
snd_ctl_elem_iface_t iface,
const char *name,
unsigned int index,
unsigned int device,
unsigned int subdevice) {
unsigned int device) {
snd_mixer_elem_t *elem;
for (elem = snd_mixer_first_elem(mixer); elem; elem = snd_mixer_elem_next(elem)) {
snd_hctl_elem_t **_helem, *helem;
snd_hctl_elem_t *helem;
if (snd_mixer_elem_get_type(elem) != SND_MIXER_ELEM_PULSEAUDIO)
continue;
_helem = snd_mixer_elem_get_private(elem);
helem = *_helem;
helem = snd_mixer_elem_get_private(elem);
if (snd_hctl_elem_get_interface(helem) != iface)
continue;
if (!pa_streq(snd_hctl_elem_get_name(helem), name))
@ -1676,19 +1630,17 @@ static snd_mixer_elem_t *pa_alsa_mixer_find(snd_mixer_t *mixer,
continue;
if (snd_hctl_elem_get_device(helem) != device)
continue;
if (snd_hctl_elem_get_subdevice(helem) != subdevice)
continue;
return elem;
}
return NULL;
}
snd_mixer_elem_t *pa_alsa_mixer_find_card(snd_mixer_t *mixer, struct pa_alsa_mixer_id *alsa_id, unsigned int device) {
return pa_alsa_mixer_find(mixer, SND_CTL_ELEM_IFACE_CARD, alsa_id->name, alsa_id->index, device, 0);
return pa_alsa_mixer_find(mixer, SND_CTL_ELEM_IFACE_CARD, alsa_id->name, alsa_id->index, device);
}
snd_mixer_elem_t *pa_alsa_mixer_find_pcm(snd_mixer_t *mixer, const char *name, unsigned int device) {
return pa_alsa_mixer_find(mixer, SND_CTL_ELEM_IFACE_PCM, name, 0, device, 0);
return pa_alsa_mixer_find(mixer, SND_CTL_ELEM_IFACE_PCM, name, 0, device);
}
static int mixer_class_compare(const snd_mixer_elem_t *c1, const snd_mixer_elem_t *c2)
@ -1697,79 +1649,31 @@ static int mixer_class_compare(const snd_mixer_elem_t *c1, const snd_mixer_elem_
return c1 == c2 ? 0 : (c1 > c2 ? 1 : -1);
}
static void mixer_melem_free(snd_mixer_elem_t *elem)
{
snd_hctl_elem_t **_helem;
_helem = snd_mixer_elem_get_private(elem);
pa_xfree(_helem);
}
static int mixer_class_event(snd_mixer_class_t *class, unsigned int mask,
snd_hctl_elem_t *helem, snd_mixer_elem_t *melem)
{
int err;
const char *name = snd_hctl_elem_get_name(helem);
snd_hctl_elem_t **_helem;
/* NOTE: The remove event is defined as '~0U`. */
if (mask == SND_CTL_EVENT_MASK_REMOVE) {
/* NOTE: Unless we remove the pointer to melem from the linked-list at
* private_data of helem, an assertion will be hit in alsa-lib since
* the list is not empty. */
_helem = snd_mixer_elem_get_private(melem);
*_helem = NULL;
snd_mixer_elem_detach(melem, helem);
} else if (mask & SND_CTL_EVENT_MASK_ADD) {
if (mask & SND_CTL_EVENT_MASK_ADD) {
snd_ctl_elem_iface_t iface = snd_hctl_elem_get_interface(helem);
if (iface == SND_CTL_ELEM_IFACE_CARD || iface == SND_CTL_ELEM_IFACE_PCM) {
snd_mixer_t *mixer = snd_mixer_class_get_mixer(class);
snd_ctl_elem_iface_t iface = snd_hctl_elem_get_interface(helem);
const char *name = snd_hctl_elem_get_name(helem);
const int index = snd_hctl_elem_get_index(helem);
const int device = snd_hctl_elem_get_device(helem);
const int subdevice = snd_hctl_elem_get_subdevice(helem);
snd_mixer_elem_t *new_melem;
bool found = true;
new_melem = pa_alsa_mixer_find(mixer, iface, name, index, device, subdevice);
if (!new_melem) {
_helem = pa_xmalloc(sizeof(snd_hctl_elem_t *));
*_helem = helem;
/* Put the hctl pointer as our private data - it will be useful for callbacks */
if ((err = snd_mixer_elem_new(&new_melem, SND_MIXER_ELEM_PULSEAUDIO, 0, _helem, mixer_melem_free)) < 0) {
pa_log_warn("snd_mixer_elem_new failed: %s", pa_alsa_strerror(err));
return 0;
}
found = false;
} else {
_helem = snd_mixer_elem_get_private(new_melem);
if (_helem) {
char *s1, *s2;
snd_ctl_elem_id_t *id1, *id2;
snd_ctl_elem_id_alloca(&id1);
snd_ctl_elem_id_alloca(&id2);
snd_hctl_elem_get_id(helem, id1);
snd_hctl_elem_get_id(*_helem, id2);
s1 = snd_ctl_ascii_elem_id_get(id1);
s2 = snd_ctl_ascii_elem_id_get(id2);
pa_log_warn("mixer_class_event - duplicate mixer controls: %s | %s", s1, s2);
free(s2);
free(s1);
return 0;
}
*_helem = helem;
/* Put the hctl pointer as our private data - it will be useful for callbacks */
if ((err = snd_mixer_elem_new(&new_melem, SND_MIXER_ELEM_PULSEAUDIO, 0, helem, NULL)) < 0) {
pa_log_warn("snd_mixer_elem_new failed: %s", pa_alsa_strerror(err));
return 0;
}
if ((err = snd_mixer_elem_attach(new_melem, helem)) < 0) {
pa_log_warn("snd_mixer_elem_attach failed: %s", pa_alsa_strerror(err));
snd_mixer_elem_free(melem);
snd_mixer_elem_free(melem);
return 0;
}
if (!found) {
if ((err = snd_mixer_elem_add(new_melem, class)) < 0) {
pa_log_warn("snd_mixer_elem_add failed: %s", pa_alsa_strerror(err));
return 0;
}
if ((err = snd_mixer_elem_add(new_melem, class)) < 0) {
pa_log_warn("snd_mixer_elem_add failed: %s", pa_alsa_strerror(err));
return 0;
}
}
}

View file

@ -67,8 +67,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
pa_sample_format_t **query_supported_formats, /* modified at return */
unsigned int **query_supported_rates, /* modified at return */
pa_alsa_profile_set *ps,
pa_alsa_mapping **mapping); /* modified at return */
@ -84,8 +82,6 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
pa_sample_format_t **query_supported_formats, /* modified at return */
unsigned int **query_supported_rates, /* modified at return */
pa_alsa_mapping *mapping);
/* Opens the explicit ALSA device */
@ -100,8 +96,6 @@ snd_pcm_t *pa_alsa_open_by_device_string(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
pa_sample_format_t **query_supported_formats, /* modified at return */
unsigned int **query_supported_rates, /* modified at return */
bool require_exact_channel_number);
/* Opens the explicit ALSA device with a fallback list */
@ -117,8 +111,6 @@ snd_pcm_t *pa_alsa_open_by_template(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
pa_sample_format_t **query_supported_formats, /* modified at return */
unsigned int **query_supported_rates, /* modified at return */
bool require_exact_channel_number);
void pa_alsa_dump(pa_log_level_t level, snd_pcm_t *pcm);

View file

@ -1,91 +0,0 @@
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#
# PulseAudio 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 Lesser General Public License
# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
; ASUS Xonar SE card.
; This card has two devices for each rear and front panel jacks.
;
; See default.conf for an explanation on the directives used here.
[General]
auto-profiles = yes
[Mapping analog-stereo-headset]
device-strings = hw:%f,1
channel-map = left,right
paths-output = analog-output analog-output-headphones
paths-input = analog-input-mic analog-input-headphone-mic analog-input-headset-mic
priority = 15
[Mapping analog-stereo]
device-strings = hw:%f,0
channel-map = left,right
paths-output = analog-output analog-output-speaker
paths-input = analog-input analog-input-mic analog-input-linein
priority = 14
[Mapping analog-surround-21]
device-strings = surround21:%f
channel-map = front-left,front-right,lfe
paths-output = analog-output-speaker
priority = 13
direction = output
[Mapping analog-surround-40]
device-strings = surround40:%f
channel-map = front-left,front-right,rear-left,rear-right
paths-output = analog-output-speaker
priority = 12
direction = output
[Mapping analog-surround-41]
device-strings = surround41:%f
channel-map = front-left,front-right,rear-left,rear-right,lfe
paths-output = analog-output-speaker
priority = 13
direction = output
[Mapping analog-surround-50]
device-strings = surround50:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center
paths-output = analog-output-speaker
priority = 12
direction = output
[Mapping analog-surround-51]
device-strings = surround51:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
paths-output = analog-output-speaker
priority = 13
direction = output
[Mapping iec958-stereo]
device-strings = iec958:%f
channel-map = left,right
paths-output = iec958-stereo-output
priority = 5
[Mapping iec958-ac3-surround-40]
device-strings = a52:%f
channel-map = front-left,front-right,rear-left,rear-right
paths-output = iec958-stereo-output
priority = 2
direction = output
[Mapping iec958-ac3-surround-51]
device-strings = a52:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
paths-output = iec958-stereo-output
priority = 3
direction = output

View file

@ -162,7 +162,7 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
PA_IDXSET_FOREACH(m, ap->output_mappings, idx) {
if (u->use_ucm)
pa_alsa_ucm_add_port(NULL, &m->ucm_context, true, ports, cp, u->core);
pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, true, ports, cp, u->core);
else
pa_alsa_path_set_add_ports(m->output_path_set, cp, ports, NULL, u->core);
if (m->channel_map.channels > cp->max_sink_channels)
@ -175,7 +175,7 @@ static void add_profiles(struct userdata *u, pa_hashmap *h, pa_hashmap *ports) {
PA_IDXSET_FOREACH(m, ap->input_mappings, idx) {
if (u->use_ucm)
pa_alsa_ucm_add_port(NULL, &m->ucm_context, false, ports, cp, u->core);
pa_alsa_ucm_add_ports_combination(NULL, &m->ucm_context, false, ports, cp, u->core);
else
pa_alsa_path_set_add_ports(m->input_path_set, cp, ports, NULL, u->core);
if (m->channel_map.channels > cp->max_source_channels)
@ -249,7 +249,8 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
/* if UCM is available for this card then update the verb */
if (u->use_ucm) {
if (pa_alsa_ucm_set_profile(&u->ucm, c, nd->profile, od->profile) < 0) {
if (pa_alsa_ucm_set_profile(&u->ucm, c, nd->profile ? nd->profile->name : NULL,
od->profile ? od->profile->name : NULL) < 0) {
ret = -1;
goto finish;
}
@ -301,7 +302,7 @@ static void init_profile(struct userdata *u) {
if (d->profile && u->use_ucm) {
/* Set initial verb */
if (pa_alsa_ucm_set_profile(ucm, u->card, d->profile, NULL) < 0) {
if (pa_alsa_ucm_set_profile(ucm, u->card, d->profile->name, NULL) < 0) {
pa_log("Failed to set ucm profile %s", d->profile->name);
return;
}
@ -370,7 +371,7 @@ struct temp_port_avail {
static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) {
struct userdata *u = snd_mixer_elem_get_callback_private(melem);
snd_hctl_elem_t **_elem = snd_mixer_elem_get_private(melem), *elem;
snd_hctl_elem_t *elem = snd_mixer_elem_get_private(melem);
snd_ctl_elem_value_t *elem_value;
bool plugged_in;
void *state;
@ -380,8 +381,6 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) {
pa_available_t active_available = PA_AVAILABLE_UNKNOWN;
pa_assert(u);
pa_assert(_elem);
elem = *_elem;
/* Changing the jack state may cause a port change, and a port change will
* make the sink or source change the mixer settings. If there are multiple
@ -564,18 +563,13 @@ static pa_device_port* find_port_with_eld_device(struct userdata *u, int device)
static int hdmi_eld_changed(snd_mixer_elem_t *melem, unsigned int mask) {
struct userdata *u = snd_mixer_elem_get_callback_private(melem);
snd_hctl_elem_t **_elem = snd_mixer_elem_get_private(melem), *elem;
int device;
snd_hctl_elem_t *elem = snd_mixer_elem_get_private(melem);
int device = snd_hctl_elem_get_device(elem);
const char *old_monitor_name;
pa_device_port *p;
pa_hdmi_eld eld;
bool changed = false;
pa_assert(u);
pa_assert(_elem);
elem = *_elem;
device = snd_hctl_elem_get_device(elem);
if (mask == SND_CTL_EVENT_MASK_REMOVE)
return 0;

View file

@ -42,6 +42,9 @@ typedef struct pa_a2dp_endpoint_conf {
/* A2DP codec id */
pa_a2dp_codec_id id;
/* True if codec is bi-directional and supports backchannel */
bool support_backchannel;
/* Returns true if the codec can be supported on the system */
bool (*can_be_supported)(bool for_encoding);

View file

@ -556,6 +556,7 @@ static size_t decode_buffer_hd(void *codec_info, const uint8_t *input_buffer, si
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_aptx = {
.id = { A2DP_CODEC_VENDOR, APTX_VENDOR_ID, APTX_CODEC_ID },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities,
.choose_remote_endpoint = choose_remote_endpoint,
@ -579,6 +580,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_aptx = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_aptx_hd = {
.id = { A2DP_CODEC_VENDOR, APTX_HD_VENDOR_ID, APTX_HD_CODEC_ID },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities_hd,
.choose_remote_endpoint = choose_remote_endpoint_hd,

View file

@ -433,6 +433,7 @@ static size_t encode_buffer(void *codec_info, uint32_t timestamp, const uint8_t
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_hq = {
.id = { A2DP_CODEC_VENDOR, LDAC_VENDOR_ID, LDAC_CODEC_ID },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities,
.choose_remote_endpoint = choose_remote_endpoint,
@ -455,6 +456,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_hq = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_sq = {
.id = { A2DP_CODEC_VENDOR, LDAC_VENDOR_ID, LDAC_CODEC_ID },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities,
.choose_remote_endpoint = choose_remote_endpoint,
@ -477,6 +479,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_sq = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_mq = {
.id = { A2DP_CODEC_VENDOR, LDAC_VENDOR_ID, LDAC_CODEC_ID },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities,
.choose_remote_endpoint = choose_remote_endpoint,

View file

@ -39,8 +39,6 @@
#define SBC_BITPOOL_DEC_STEP 5
#define SBC_BITPOOL_INC_STEP 1
#define SBC_SYNCWORD 0x9C
struct sbc_info {
sbc_t sbc; /* Codec data */
size_t codesize, frame_length; /* SBC Codesize, frame_length. We simply cache those values here */
@ -56,12 +54,6 @@ struct sbc_info {
uint8_t nr_blocks;
uint8_t nr_subbands;
bool boost_source_volume;
/* Size of SBC frame fragment left over from previous decoding iteration */
size_t frame_fragment_size;
/* Maximum SBC frame size is 512 bytes when SBC compression ratio > 1 */
uint8_t frame_fragment[512];
};
static bool can_be_supported(bool for_encoding) {
@ -116,24 +108,6 @@ static bool can_accept_capabilities_xq(const uint8_t *capabilities_buffer, uint8
return true;
}
static bool can_accept_capabilities_faststream(const uint8_t *capabilities_buffer, uint8_t capabilities_size, bool for_encoding) {
const a2dp_faststream_t *capabilities = (const a2dp_faststream_t *) capabilities_buffer;
if (capabilities_size != sizeof(*capabilities))
return false;
if (!(capabilities->direction & (FASTSTREAM_DIRECTION_SINK | FASTSTREAM_DIRECTION_SOURCE)))
return false;
if (!(capabilities->sink_frequency & (FASTSTREAM_SINK_SAMPLING_FREQ_44100 | FASTSTREAM_SINK_SAMPLING_FREQ_48000)))
return false;
if (!(capabilities->source_frequency & FASTSTREAM_SOURCE_SAMPLING_FREQ_16000))
return false;
return true;
}
static const char *choose_remote_endpoint(const pa_hashmap *capabilities_hashmap, const pa_sample_spec *default_sample_spec, bool for_encoding) {
const pa_a2dp_codec_capabilities *a2dp_capabilities;
const char *key;
@ -162,23 +136,6 @@ static const char *choose_remote_endpoint_xq(const pa_hashmap *capabilities_hash
return NULL;
}
static const char *choose_remote_endpoint_faststream(const pa_hashmap *capabilities_hashmap, const pa_sample_spec *default_sample_spec, bool for_encoding) {
const pa_a2dp_codec_capabilities *a2dp_capabilities;
const char *key;
void *state;
/* There is no preference, just choose random valid entry */
PA_HASHMAP_FOREACH_KV(key, a2dp_capabilities, capabilities_hashmap, state) {
pa_log_debug("choose_remote_endpoint_faststream checking peer endpoint '%s'", key);
if (can_accept_capabilities_faststream(a2dp_capabilities->buffer, a2dp_capabilities->size, for_encoding))
return key;
}
pa_log_debug("choose_remote_endpoint_faststream matched no peer endpoint");
return NULL;
}
static uint8_t fill_capabilities(uint8_t capabilities_buffer[MAX_A2DP_CAPS_SIZE]) {
a2dp_sbc_t *capabilities = (a2dp_sbc_t *) capabilities_buffer;
@ -369,46 +326,6 @@ static uint8_t fill_capabilities_xq(uint8_t capabilities_buffer[MAX_A2DP_CAPS_SI
return sizeof(*capabilities);
}
static uint8_t fill_capabilities_faststream(uint8_t capabilities_buffer[MAX_A2DP_CAPS_SIZE]) {
a2dp_faststream_t *capabilities = (a2dp_faststream_t *) capabilities_buffer;
pa_zero(*capabilities);
capabilities->info = A2DP_SET_VENDOR_ID_CODEC_ID(FASTSTREAM_VENDOR_ID, FASTSTREAM_CODEC_ID);
capabilities->direction = FASTSTREAM_DIRECTION_SINK | FASTSTREAM_DIRECTION_SOURCE;
capabilities->sink_frequency = FASTSTREAM_SINK_SAMPLING_FREQ_44100 | FASTSTREAM_SINK_SAMPLING_FREQ_48000;
capabilities->source_frequency = FASTSTREAM_SOURCE_SAMPLING_FREQ_16000;
return sizeof(*capabilities);
}
static bool is_configuration_valid_faststream(const uint8_t *config_buffer, uint8_t config_size) {
const a2dp_faststream_t *config = (const a2dp_faststream_t *) config_buffer;
if (config_size != sizeof(*config)) {
pa_log_error("Invalid size of config buffer");
return false;
}
if (!(config->direction & (FASTSTREAM_DIRECTION_SINK | FASTSTREAM_DIRECTION_SOURCE))) {
pa_log_error("Invalid FastStream direction in configuration");
return false;
}
if (config->sink_frequency != FASTSTREAM_SINK_SAMPLING_FREQ_44100 && config->sink_frequency != FASTSTREAM_SINK_SAMPLING_FREQ_48000) {
pa_log_error("Invalid FastStream sink sampling frequency in configuration");
return false;
}
if (config->source_frequency != FASTSTREAM_SOURCE_SAMPLING_FREQ_16000) {
pa_log_error("Invalid FastStream source sampling frequency in configuration");
return false;
}
return true;
}
static bool is_configuration_valid(const uint8_t *config_buffer, uint8_t config_size) {
const a2dp_sbc_t *config = (const a2dp_sbc_t *) config_buffer;
@ -610,85 +527,6 @@ static uint8_t fill_preferred_configuration(const pa_sample_spec *default_sample
return sizeof(*config);
}
static uint8_t fill_preferred_configuration_faststream(const pa_sample_spec *default_sample_spec, const uint8_t *capabilities_buffer, uint8_t capabilities_size, uint8_t config_buffer[MAX_A2DP_CAPS_SIZE]) {
a2dp_faststream_t *config = (a2dp_faststream_t *) config_buffer;
const a2dp_faststream_t *capabilities = (const a2dp_faststream_t *) capabilities_buffer;
int i;
static const struct {
uint32_t rate;
uint8_t cap;
} sink_freq_table[] = {
{ 44100U, FASTSTREAM_SINK_SAMPLING_FREQ_44100 },
{ 48000U, FASTSTREAM_SINK_SAMPLING_FREQ_48000 }
};
static const struct {
uint32_t rate;
uint8_t cap;
} source_freq_table[] = {
{ 16000U, FASTSTREAM_SOURCE_SAMPLING_FREQ_16000 }
};
if (capabilities_size != sizeof(*capabilities)) {
pa_log_error("Invalid size of FastStream capabilities buffer");
return 0;
}
pa_zero(*config);
/* Find the lowest freq that is at least as high as the requested sampling rate */
for (i = 0; (unsigned) i < PA_ELEMENTSOF(sink_freq_table); i++)
if (sink_freq_table[i].rate >= default_sample_spec->rate && (capabilities->sink_frequency & sink_freq_table[i].cap)) {
config->sink_frequency = sink_freq_table[i].cap;
break;
}
/* Match with endpoint capabilities */
if ((unsigned) i == PA_ELEMENTSOF(sink_freq_table)) {
for (--i; i >= 0; i--) {
if (capabilities->sink_frequency & sink_freq_table[i].cap) {
config->sink_frequency = sink_freq_table[i].cap;
break;
}
}
if (i < 0) {
pa_log_error("Not suitable FastStream sink sample rate");
return 0;
}
}
pa_assert((unsigned) i < PA_ELEMENTSOF(sink_freq_table));
/* Only single frequency (for now?) */
config->source_frequency = FASTSTREAM_SOURCE_SAMPLING_FREQ_16000;
i = 0;
/* Match with endpoint capabilities */
if ((unsigned) i == PA_ELEMENTSOF(source_freq_table)) {
for (--i; i >= 0; i--) {
if (capabilities->source_frequency & source_freq_table[i].cap) {
config->source_frequency = source_freq_table[i].cap;
break;
}
}
if (i < 0) {
pa_log_error("Not suitable FastStream source sample rate");
return 0;
}
}
pa_assert((unsigned) i < PA_ELEMENTSOF(source_freq_table));
config->direction = FASTSTREAM_DIRECTION_SINK | FASTSTREAM_DIRECTION_SOURCE;
config->info = A2DP_SET_VENDOR_ID_CODEC_ID(FASTSTREAM_VENDOR_ID, FASTSTREAM_CODEC_ID);
return sizeof(*config);
}
static uint8_t fill_preferred_configuration_xq(const pa_sample_spec *default_sample_spec, const uint8_t *capabilities_buffer, uint8_t capabilities_size, uint8_t config_buffer[MAX_A2DP_CAPS_SIZE], uint32_t bitrate_cap) {
a2dp_sbc_t *config = (a2dp_sbc_t *) config_buffer;
const a2dp_sbc_t *capabilities = (const a2dp_sbc_t *) capabilities_buffer;
@ -846,79 +684,6 @@ static void *init(bool for_encoding, bool for_backchannel, const uint8_t *config
return sbc_info;
}
static void *init_faststream(bool for_encoding, bool for_backchannel, const uint8_t *config_buffer, uint8_t config_size, pa_sample_spec *sample_spec, pa_core *core) {
struct sbc_info *sbc_info;
const a2dp_faststream_t *config = (const a2dp_faststream_t *) config_buffer;
int ret;
pa_assert(config_size == sizeof(*config));
sbc_info = pa_xnew0(struct sbc_info, 1);
ret = sbc_init(&sbc_info->sbc, 0);
if (ret != 0) {
pa_xfree(sbc_info);
pa_log_error("SBC initialization failed: %d", ret);
return NULL;
}
sample_spec->format = PA_SAMPLE_S16LE;
if (for_encoding != for_backchannel) {
switch (config->sink_frequency) {
case FASTSTREAM_SINK_SAMPLING_FREQ_44100:
sbc_info->frequency = SBC_FREQ_44100;
sample_spec->rate = 44100U;
break;
case FASTSTREAM_SINK_SAMPLING_FREQ_48000:
sbc_info->frequency = SBC_FREQ_48000;
sample_spec->rate = 48000U;
break;
default:
pa_assert_not_reached();
}
sample_spec->channels = 2;
sbc_info->mode = SBC_MODE_JOINT_STEREO;
sbc_info->initial_bitpool = sbc_info->min_bitpool = sbc_info->max_bitpool = 29;
} else {
switch (config->source_frequency) {
case FASTSTREAM_SOURCE_SAMPLING_FREQ_16000:
sbc_info->frequency = SBC_FREQ_16000;
sample_spec->rate = 16000U;
break;
default:
pa_assert_not_reached();
}
sample_spec->channels = 2;
sbc_info->mode = SBC_MODE_MONO;
sbc_info->initial_bitpool = sbc_info->min_bitpool = sbc_info->max_bitpool = 32;
}
sbc_info->allocation = SBC_AM_LOUDNESS;
sbc_info->subbands = SBC_SB_8;
sbc_info->nr_subbands = 8;
sbc_info->blocks = SBC_BLK_16;
sbc_info->nr_blocks = 16;
set_params(sbc_info);
if (sbc_info->frame_length & 1)
++sbc_info->frame_length;
pa_log_info("FastStream %s SBC parameters: allocation=%s, subbands=%u, blocks=%u, mode=%s bitpool=%u codesize=%u frame_length=%u",
for_encoding ? "encoder" : "decoder",
sbc_info->sbc.allocation ? "SNR" : "Loudness", sbc_info->sbc.subbands ? 8 : 4,
(sbc_info->sbc.blocks+1)*4, sbc_info->sbc.mode == SBC_MODE_MONO ? "Mono" :
sbc_info->sbc.mode == SBC_MODE_DUAL_CHANNEL ? "DualChannel" :
sbc_info->sbc.mode == SBC_MODE_STEREO ? "Stereo" : "JointStereo",
sbc_info->sbc.bitpool, (unsigned)sbc_info->codesize, (unsigned)sbc_info->frame_length);
return sbc_info;
}
static void deinit(void *codec_info) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
@ -944,12 +709,6 @@ static int reset(void *codec_info) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
int ret;
/* forget about source volume boost */
sbc_info->boost_source_volume = false;
/* forget last saved frame fragment */
sbc_info->frame_fragment_size = 0;
ret = sbc_reinit(&sbc_info->sbc, 0);
if (ret != 0) {
pa_log_error("SBC reinitialization failed: %d", ret);
@ -963,25 +722,6 @@ static int reset(void *codec_info) {
return 0;
}
static int reset_faststream(void *codec_info) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
int ret;
ret = sbc_reinit(&sbc_info->sbc, 0);
if (ret != 0) {
pa_log_error("SBC reinitialization failed: %d", ret);
return -1;
}
/* sbc_reinit() sets also default parameters, so reset them back */
set_params(sbc_info);
if (sbc_info->frame_length & 1)
++sbc_info->frame_length;
sbc_info->seq_num = 0;
return 0;
}
static size_t get_block_size(void *codec_info, size_t link_mtu) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
size_t rtp_size = sizeof(struct rtp_header) + sizeof(struct rtp_payload);
@ -1002,28 +742,6 @@ static size_t get_block_size(void *codec_info, size_t link_mtu) {
return frame_count * sbc_info->codesize;
}
static size_t get_write_block_size_faststream(void *codec_info, size_t link_mtu) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
size_t frame_count = link_mtu / sbc_info->frame_length;
/* 3 frames seem to work best, with minimal glitches */
if (frame_count > 3)
frame_count = 3;
return frame_count * sbc_info->codesize;
}
static size_t get_read_block_size_faststream(void *codec_info, size_t link_mtu) {
/* With SBC bitpool >= 29 and any combination of blocks, subbands
* and channels maximum compression ratio 4:1 is achieved with
* blocks=16, subbands=8, channels=2, bitpool=29
*
* Though smaller bitpools can yield higher compression ratio, faststream is
* assumed to have fixed bitpool so maximum output size is link_mtu * 4.
*/
return link_mtu * 4;
}
static size_t get_encoded_block_size(void *codec_info, size_t input_size) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
size_t rtp_size = sizeof(struct rtp_header) + sizeof(struct rtp_payload);
@ -1034,15 +752,6 @@ static size_t get_encoded_block_size(void *codec_info, size_t input_size) {
return (input_size / sbc_info->codesize) * sbc_info->frame_length + rtp_size;
}
static size_t get_encoded_block_size_faststream(void *codec_info, size_t input_size) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
/* input size should be aligned to codec input block size */
pa_assert_fp(input_size % sbc_info->codesize == 0);
return (input_size / sbc_info->codesize) * sbc_info->frame_length;
}
static size_t reduce_encoder_bitrate(void *codec_info, size_t write_link_mtu) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
uint8_t bitpool;
@ -1151,72 +860,6 @@ static size_t encode_buffer(void *codec_info, uint32_t timestamp, const uint8_t
return d - output_buffer;
}
static size_t encode_buffer_faststream(void *codec_info, uint32_t timestamp, const uint8_t *input_buffer, size_t input_size, uint8_t *output_buffer, size_t output_size, size_t *processed) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
uint8_t *d;
const uint8_t *p;
size_t to_write, to_encode;
uint8_t frame_count;
frame_count = 0;
p = input_buffer;
to_encode = input_size;
d = output_buffer;
to_write = output_size;
/* frame_count is only 4 bit number */
while (PA_LIKELY(to_encode > 0 && to_write > 0)) {
ssize_t written;
ssize_t encoded;
encoded = sbc_encode(&sbc_info->sbc,
p, to_encode,
d, to_write,
&written);
if (PA_UNLIKELY(encoded <= 0)) {
pa_log_error("SBC encoding error (%li)", (long) encoded);
break;
}
if (PA_UNLIKELY(written < 0)) {
pa_log_error("SBC encoding error (%li)", (long) written);
break;
}
while (written < sbc_info->frame_length && written < to_write)
d[written++] = 0;
pa_assert_fp((size_t) encoded <= to_encode);
pa_assert_fp((size_t) encoded == sbc_info->codesize);
pa_assert_fp((size_t) written <= to_write);
pa_assert_fp((size_t) written == sbc_info->frame_length);
p += encoded;
to_encode -= encoded;
d += written;
to_write -= written;
frame_count++;
}
PA_ONCE_BEGIN {
pa_log_debug("Using SBC codec implementation: %s", pa_strnull(sbc_get_implementation_info(&sbc_info->sbc)));
} PA_ONCE_END;
if (PA_UNLIKELY(frame_count == 0)) {
*processed = 0;
return 0;
}
*processed = p - input_buffer;
return d - output_buffer;
}
static size_t decode_buffer(void *codec_info, const uint8_t *input_buffer, size_t input_size, uint8_t *output_buffer, size_t output_size, size_t *processed) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
@ -1281,146 +924,9 @@ static size_t decode_buffer(void *codec_info, const uint8_t *input_buffer, size_
return d - output_buffer;
}
static size_t decode_buffer_faststream(void *codec_info, const uint8_t *input_buffer, size_t input_size, uint8_t *output_buffer, size_t output_size, size_t *processed) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
const uint8_t *p;
uint8_t *d;
size_t to_write, to_decode;
pa_sample_spec decoded_sample_spec = {
.format = PA_SAMPLE_S16LE,
.channels = 2,
.rate = 16000U
};
uint8_t decode_buffer[4096];
uint8_t frame_buffer[4096];
to_decode = input_size;
/* append input buffer to fragment left from previous decode call */
if (sbc_info->frame_fragment_size) {
if (sbc_info->frame_fragment_size + to_decode > sizeof(frame_buffer)) {
pa_log_debug("FastStream SBC input (saved + incoming) size %lu larger than buffer size %lu, input truncated to fit",
sbc_info->frame_fragment_size + to_decode, sizeof(frame_buffer));
to_decode = sizeof(frame_buffer) - sbc_info->frame_fragment_size;
}
memcpy(frame_buffer, sbc_info->frame_fragment, sbc_info->frame_fragment_size);
memcpy(frame_buffer + sbc_info->frame_fragment_size, input_buffer, to_decode);
to_decode += sbc_info->frame_fragment_size;
p = frame_buffer;
/* clear saved fragment */
sbc_info->frame_fragment_size = 0;
} else
p = input_buffer;
d = output_buffer;
to_write = output_size;
while (PA_LIKELY(to_decode > 0 && to_write > 0)) {
size_t written = 0;
ssize_t decoded;
/* skip to SBC sync word before attempting decode */
if (*p != SBC_SYNCWORD) {
++p;
--to_decode;
continue;
}
if (to_decode < sbc_info->frame_length) {
pa_log_debug("FastStream SBC input %lu is too short (expected frame length %lu)", to_decode, sbc_info->frame_length);
break;
}
decoded = sbc_decode(&sbc_info->sbc,
p, to_decode,
decode_buffer, sizeof(decode_buffer),
&written);
if (PA_UNLIKELY(decoded <= 0)) {
/* sbc_decode returns -1 if input too short,
* break from loop to save this frame fragment for next decode iteration */
if (decoded == -1) {
pa_log_debug("FastStream SBC decoding error (%li) input %lu is too short", (long) decoded, to_decode);
break;
}
/* otherwise failed to decode frame, skip to next SBC sync word */
pa_log_error("FastStream SBC decoding error (%li)", (long) decoded);
decoded = 1;
} else {
/* Reset codesize and frame_length to values found by decoder */
sbc_info->codesize = sbc_get_codesize(&sbc_info->sbc);
sbc_info->frame_length = sbc_get_frame_length(&sbc_info->sbc);
if (sbc_info->mode != sbc_info->sbc.mode)
sbc_info->mode = sbc_info->sbc.mode;
if (sbc_info->frequency != sbc_info->sbc.frequency) {
/* some devices unexpectedly return SBC frequency different from 16000
* remember this, and keep incoming sample rate at 16000 */
pa_log_debug("FastStream decoder detected SBC frequency %u, expected %u", sbc_info->sbc.frequency, sbc_info->frequency);
sbc_info->frequency = sbc_info->sbc.frequency;
/* volume is too low for known devices with unexpected source SBC frequency */
pa_log_debug("FastStream decoder requesting 20dB boost for source volume");
sbc_info->boost_source_volume = true;
}
if (sbc_info->sbc.mode == SBC_MODE_MONO) {
const void *interleave_buf[2] = {decode_buffer, decode_buffer};
/* mono->stereo conversion needs to fit into remaining output space */
written = PA_MIN(to_write / 2, written);
pa_interleave(interleave_buf, 2, d, pa_sample_size(&decoded_sample_spec), written / pa_sample_size(&decoded_sample_spec));
written *= 2;
} else
memcpy(d, decode_buffer, written);
}
pa_assert_fp((size_t) decoded <= to_decode);
pa_assert_fp((size_t) written <= to_write);
p += decoded;
to_decode -= decoded;
d += written;
to_write -= written;
}
if (to_decode) {
if (to_decode > sizeof(sbc_info->frame_fragment)) {
pa_log_debug("FastStream remaining SBC fragment size %lu larger than buffer size %lu, remainder truncated to fit",
to_decode, sizeof(sbc_info->frame_fragment));
p += to_decode - sizeof(sbc_info->frame_fragment);
to_decode = sizeof(sbc_info->frame_fragment);
}
pa_log_debug("FastStream saving SBC fragment size %lu for next decoding iteration", to_decode);
memcpy(sbc_info->frame_fragment, p, to_decode);
sbc_info->frame_fragment_size = to_decode;
}
*processed = input_size;
return d - output_buffer;
}
/* Boost sink backchannel mic volume by 20dB as it appears too quiet */
double get_source_output_volume_factor_dB_faststream(void *codec_info) {
struct sbc_info *sbc_info = (struct sbc_info *) codec_info;
if (sbc_info->boost_source_volume)
return 20.;
return 1.0;
}
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc = {
.id = { A2DP_CODEC_SBC, 0, 0 },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities,
.choose_remote_endpoint = choose_remote_endpoint,
@ -1458,6 +964,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_453 = {
.id = { A2DP_CODEC_SBC, 0, 0 },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities_xq,
.choose_remote_endpoint = choose_remote_endpoint_xq,
@ -1482,6 +989,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_453 = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_512 = {
.id = { A2DP_CODEC_SBC, 0, 0 },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities_xq,
.choose_remote_endpoint = choose_remote_endpoint_xq,
@ -1506,6 +1014,7 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_512 = {
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_552 = {
.id = { A2DP_CODEC_SBC, 0, 0 },
.support_backchannel = false,
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities_xq,
.choose_remote_endpoint = choose_remote_endpoint_xq,
@ -1527,49 +1036,3 @@ const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_sbc_xq_552 = {
.decode_buffer = decode_buffer,
},
};
/* FastStream codec is just SBC codec with fixed parameters.
*
* Sink stream parameters:
* 48.0kHz or 44.1kHz,
* Blocks 16,
* Sub-bands 8,
* Joint Stereo,
* Allocation method Loudness,
* Bitpool = 29
* (data rate = 212kbps, packet size = (71+1)3 <= DM5 = 220, with 3 SBC frames).
* SBC frame size is 71 bytes, but FastStream is zero-padded to the even size (72).
*
* Source stream parameters:
* 16kHz,
* Mono,
* Blocks 16,
* Sub-bands 8,
* Allocation method Loudness,
* Bitpool = 32
* (data rate = 72kbps, packet size = 723 <= DM5 = 220, with 3 SBC frames).
*/
const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_faststream = {
.id = { A2DP_CODEC_VENDOR, FASTSTREAM_VENDOR_ID, FASTSTREAM_CODEC_ID },
.can_be_supported = can_be_supported,
.can_accept_capabilities = can_accept_capabilities_faststream,
.choose_remote_endpoint = choose_remote_endpoint_faststream,
.fill_capabilities = fill_capabilities_faststream,
.is_configuration_valid = is_configuration_valid_faststream,
.fill_preferred_configuration = fill_preferred_configuration_faststream,
.bt_codec = {
.name = "faststream",
.description = "FastStream",
.support_backchannel = true,
.init = init_faststream,
.deinit = deinit,
.reset = reset_faststream,
.get_read_block_size = get_read_block_size_faststream,
.get_write_block_size = get_write_block_size_faststream,
.get_encoded_block_size = get_encoded_block_size_faststream,
.encode_buffer = encode_buffer_faststream,
.decode_buffer = decode_buffer_faststream,
.get_source_output_volume_factor_dB = get_source_output_volume_factor_dB_faststream,
},
};

View file

@ -52,7 +52,6 @@ extern const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_hq;
extern const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_sq;
extern const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_ldac_eqmid_mq;
#endif
extern const pa_a2dp_endpoint_conf pa_a2dp_endpoint_conf_faststream;
/* This is list of supported codecs. Their order is important.
* Codec with lower index has higher priority. */
@ -70,7 +69,6 @@ static const pa_a2dp_endpoint_conf *pa_a2dp_endpoint_configurations[] = {
&pa_a2dp_endpoint_conf_sbc_xq_453,
&pa_a2dp_endpoint_conf_sbc_xq_512,
&pa_a2dp_endpoint_conf_sbc_xq_552,
&pa_a2dp_endpoint_conf_faststream,
};
unsigned int pa_bluetooth_a2dp_endpoint_conf_count(void) {

View file

@ -38,25 +38,15 @@
#include "bluez5-util.h"
#include "bt-codec-msbc.h"
#include "upower.h"
#define MANDATORY_CALL_INDICATORS \
"(\"call\",(0-1))," \
"(\"callsetup\",(0-3))," \
"(\"callheld\",(0-2))" \
struct pa_bluetooth_backend {
pa_core *core;
pa_dbus_connection *connection;
pa_bluetooth_discovery *discovery;
pa_hook_slot *adapter_uuids_changed_slot;
pa_hook_slot *host_battery_level_changed_slot;
pa_upower_backend *upower;
bool enable_shared_profiles;
bool enable_hsp_hs;
bool enable_hfp_hf;
bool cmer_indicator_reporting_enabled;
uint32_t cind_enabled_indicators;
PA_LLIST_HEAD(pa_dbus_pending, pending);
};
@ -67,7 +57,6 @@ struct transport_data {
int sco_fd;
pa_io_event *sco_io;
pa_mainloop_api *mainloop;
pa_bluetooth_backend *backend;
};
struct hfp_config {
@ -108,20 +97,6 @@ enum hfp_ag_features {
HFP_AG_INDICATORS = 10,
};
/*
* Always keep this struct in sync with indicator discovery of AT+CIND=?
* These indicators are used in bitflags and intentionally start at 1
* since AT+CIND indicators start at index 1.
*/
typedef enum pa_bluetooth_ag_to_hf_indicators {
CIND_CALL_INDICATOR = 1,
CIND_CALL_SETUP_INDICATOR = 2,
CIND_CALL_HELD_INDICATOR = 3,
CIND_SERVICE_INDICATOR = 4,
CIND_BATT_CHG_INDICATOR = 5,
CIND_INDICATOR_MAX = 6
} pa_bluetooth_ag_to_hf_indicators_t;
/* gateway features we support, which is as little as we can get away with */
static uint32_t hfp_features =
/* HFP 1.6 requires this */
@ -614,13 +589,11 @@ static pa_volume_t set_source_volume(pa_bluetooth_transport *t, pa_volume_t volu
static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf)
{
struct hfp_config *c = t->config;
struct transport_data *trd = t->userdata;
pa_bluetooth_backend *b = trd->backend;
int indicator, mode, val;
char *str;
int indicator, val;
char str[5];
const char *r;
size_t len;
const char *state = NULL;
const char *state;
/* first-time initialize selected codec to CVSD */
if (c->selected_codec == 0)
@ -635,47 +608,18 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
c->state = 1;
return true;
} else if (pa_startswith(buf, "AT+BIA=")) {
/* Indicators start with index 1 and follow the order of the AT+CIND=? response */
str = pa_xstrdup(buf + 7);
for (indicator = 1; (r = pa_split_in_place(str, ",\r\n", &len, &state)); indicator++) {
/* Ignore updates to mandatory indicators which are always ON */
if (indicator == CIND_CALL_INDICATOR
|| indicator == CIND_CALL_SETUP_INDICATOR
|| indicator == CIND_CALL_HELD_INDICATOR)
continue;
/* Indicators may have no value and should be skipped */
if (len == 0)
continue;
if (len == 1 && r[0] == '1')
b->cind_enabled_indicators |= (1 << indicator);
else if (len == 1 && r[0] == '0')
b->cind_enabled_indicators &= ~(1 << indicator);
else {
pa_log_error("Unable to parse indicator of AT+BIA command: %s", buf);
rfcomm_write_response(fd, "ERROR");
pa_xfree(str);
return false;
}
}
pa_xfree(str);
return true;
} else if (pa_startswith(buf, "AT+BAC=")) {
} else if (sscanf(buf, "AT+BAC=%3s", str) == 1) {
c->support_msbc = false;
state = NULL;
/* check if codec id 2 (mSBC) is in the list of supported codecs */
str = pa_xstrdup(buf + 7);
while ((r = pa_split_in_place(str, ",\r\n", &len, &state))) {
while ((r = pa_split_in_place(str, ",", &len, &state))) {
if (len == 1 && r[0] == '2') {
c->support_msbc = true;
break;
}
}
pa_xfree(str);
c->support_codec_negotiation = true;
@ -689,48 +633,24 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
return true;
} else if (c->state == 1 && pa_startswith(buf, "AT+CIND=?")) {
/* UPower backend available, declare support for more indicators */
if (b->upower) {
rfcomm_write_response(fd, "+CIND: "
MANDATORY_CALL_INDICATORS ","
"(\"service\",(0-1)),"
"(\"battchg\",(0-5))");
/* Minimal indicators supported without any additional backend */
} else {
rfcomm_write_response(fd, "+CIND: "
MANDATORY_CALL_INDICATORS ","
"(\"service\",(0-1))");
}
/* we declare minimal no indicators */
rfcomm_write_response(fd, "+CIND: "
/* many indicators can be supported, only call and
* callheld are mandatory, so that's all we reply */
"(\"service\",(0-1)),"
"(\"call\",(0-1)),"
"(\"callsetup\",(0-3)),"
"(\"callheld\",(0-2))");
c->state = 2;
return true;
} else if (c->state == 2 && pa_startswith(buf, "AT+CIND?")) {
if (b->upower)
rfcomm_write_response(fd, "+CIND: 0,0,0,0,%u", pa_upower_get_battery_level(b->upower));
else
rfcomm_write_response(fd, "+CIND: 0,0,0,0");
rfcomm_write_response(fd, "+CIND: 0,0,0,0");
c->state = 3;
return true;
} else if ((c->state == 2 || c->state == 3) && pa_startswith(buf, "AT+CMER=")) {
if (sscanf(buf, "AT+CMER=%d,%*d,%*d,%d", &mode, &val) == 2) {
/* Bluetooth HFP spec only defines mode == 3 */
if (mode != 3)
pa_log_warn("Unexpected mode for AT+CMER: %d", mode);
/* Configure CMER event reporting */
b->cmer_indicator_reporting_enabled = !!val;
pa_log_debug("Event indications enabled? %s", pa_yes_no(val));
rfcomm_write_response(fd, "OK");
}
else {
pa_log_error("Unable to parse AT+CMER command: %s", buf);
rfcomm_write_response(fd, "ERROR");
return false;
}
rfcomm_write_response(fd, "OK");
if (c->support_codec_negotiation) {
if (c->support_msbc && pa_bluetooth_discovery_get_enable_msbc(t->device->discovery)) {
@ -818,62 +738,8 @@ static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf
return true;
}
static int get_rfcomm_fd(pa_bluetooth_discovery *discovery) {
struct pa_bluetooth_transport *t;
struct transport_data *trd = NULL;
void *state = NULL;
/* Find RFCOMM transport by checking if a HSP or HFP profile transport is available */
while ((t = pa_hashmap_iterate(pa_bluetooth_discovery_get_transports(discovery), &state, NULL))) {
/* Skip non-connected transports */
if (!t || t->state == PA_BLUETOOTH_TRANSPORT_STATE_DISCONNECTED) {
continue;
}
/* Break when an RFCOMM capable transport profile is available */
if (t->profile == PA_BLUETOOTH_PROFILE_HFP_HF) {
trd = t->userdata;
break;
}
}
/* Skip if RFCOMM channel is not available yet */
if (!trd) {
pa_log_info("RFCOMM not available yet, skipping notification");
return -1;
}
return trd->rfcomm_fd;
}
static pa_hook_result_t host_battery_level_changed_cb(pa_bluetooth_discovery *y, const pa_upower_backend *u, pa_bluetooth_backend *b) {
int rfcomm_fd;
pa_assert(y);
pa_assert(u);
pa_assert(b);
/* Get RFCOMM channel if available */
rfcomm_fd = get_rfcomm_fd(y);
if (rfcomm_fd < 0)
return PA_HOOK_OK;
/* Notify HF about AG battery level change over RFCOMM */
if (b->cmer_indicator_reporting_enabled && (b->cind_enabled_indicators & (1 << CIND_BATT_CHG_INDICATOR))) {
rfcomm_write_response(rfcomm_fd, "+CIEV: %d,%d", CIND_BATT_CHG_INDICATOR, u->battery_level);
pa_log_debug("HG notified of AG's battery level change");
/* Skip notification if indicator is disabled or event reporting is completely disabled */
} else
pa_log_debug("Battery level change indicator disabled, skipping notification");
return PA_HOOK_OK;
}
static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) {
pa_bluetooth_transport *t = userdata;
struct transport_data *trd = t->userdata;
pa_bluetooth_backend *b = trd->backend;
int i;
pa_assert(io);
pa_assert(t);
@ -889,130 +755,111 @@ static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_i
}
if (events & PA_IO_EVENT_INPUT) {
char rbuf[512];
char buf[512];
ssize_t len;
int gain, dummy;
bool do_reply = false;
int vendor, product, version, features;
char *buf = rbuf;
int num;
len = pa_read(fd, rbuf, 511, NULL);
len = pa_read(fd, buf, 511, NULL);
if (len < 0) {
pa_log_error("RFCOMM read error: %s", pa_cstrerror(errno));
goto fail;
}
rbuf[len] = 0;
pa_log_debug("RFCOMM << %s", rbuf);
buf[len] = 0;
pa_log_debug("RFCOMM << %s", buf);
while (buf[0]) {
/* There are only four HSP AT commands:
* AT+VGS=value: value between 0 and 15, sent by the HS to AG to set the speaker gain.
* +VGS=value is sent by AG to HS as a response to an AT+VGS command or when the gain
* is changed on the AG side.
* AT+VGM=value: value between 0 and 15, sent by the HS to AG to set the microphone gain.
* +VGM=value is sent by AG to HS as a response to an AT+VGM command or when the gain
* is changed on the AG side.
* AT+CKPD=200: Sent by HS when headset button is pressed.
* RING: Sent by AG to HS to notify of an incoming call. It can safely be ignored because
* it does not expect a reply. */
if (sscanf(buf, "AT+VGS=%d", &gain) == 1 || sscanf(buf, "\r\n+VGM%*[=:]%d\r\n", &gain) == 1) {
if (!t->set_sink_volume) {
pa_log_debug("HS/HF peer supports speaker gain control");
t->set_sink_volume = set_sink_volume;
}
t->sink_volume = hsp_gain_to_volume(gain);
pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SINK_VOLUME_CHANGED), t);
do_reply = true;
} else if (sscanf(buf, "AT+VGM=%d", &gain) == 1 || sscanf(buf, "\r\n+VGS%*[=:]%d\r\n", &gain) == 1) {
if (!t->set_source_volume) {
pa_log_debug("HS/HF peer supports microphone gain control");
t->set_source_volume = set_source_volume;
}
t->source_volume = hsp_gain_to_volume(gain);
pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SOURCE_VOLUME_CHANGED), t);
do_reply = true;
} else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) {
do_reply = true;
} else if (sscanf(buf, "AT+XAPL=%04x-%04x-%04x,%d", &vendor, &product, &version, &features) == 4) {
if (features & 0x2)
/* claim, that we support battery status reports */
rfcomm_write_response(fd, "+XAPL=iPhone,6");
do_reply = true;
} else if (sscanf(buf, "AT+IPHONEACCEV=%d", &num) == 1) {
char *substr = buf, *keystr;
int key, val, i;
do_reply = true;
for (i = 0; i < num; ++i) {
keystr = strchr(substr, ',');
if (!keystr) {
pa_log_warn("%s misses key for argument #%d", buf, i);
do_reply = false;
break;
}
keystr++;
substr = strchr(keystr, ',');
if (!substr) {
pa_log_warn("%s misses value for argument #%d", buf, i);
do_reply = false;
break;
}
substr++;
key = atoi(keystr);
val = atoi(substr);
switch (key) {
case 1:
pa_log_debug("Battery Level: %d0%%", val + 1);
pa_bluetooth_device_report_battery_level(t->device, (val + 1) * 10, "Apple accessory indication");
break;
case 2:
pa_log_debug("Dock Status: %s", val ? "docked" : "undocked");
break;
default:
pa_log_debug("Unexpected IPHONEACCEV key %#x", key);
break;
}
}
if (!do_reply)
rfcomm_write_response(fd, "ERROR");
} else if (t->config) { /* t->config is only non-null for hfp profile */
do_reply = hfp_rfcomm_handle(fd, t, buf);
} else {
rfcomm_write_response(fd, "ERROR");
do_reply = false;
/* There are only four HSP AT commands:
* AT+VGS=value: value between 0 and 15, sent by the HS to AG to set the speaker gain.
* +VGS=value is sent by AG to HS as a response to an AT+VGS command or when the gain
* is changed on the AG side.
* AT+VGM=value: value between 0 and 15, sent by the HS to AG to set the microphone gain.
* +VGM=value is sent by AG to HS as a response to an AT+VGM command or when the gain
* is changed on the AG side.
* AT+CKPD=200: Sent by HS when headset button is pressed.
* RING: Sent by AG to HS to notify of an incoming call. It can safely be ignored because
* it does not expect a reply. */
if (sscanf(buf, "AT+VGS=%d", &gain) == 1 || sscanf(buf, "\r\n+VGM%*[=:]%d\r\n", &gain) == 1) {
if (!t->set_sink_volume) {
pa_log_debug("HS/HF peer supports speaker gain control");
t->set_sink_volume = set_sink_volume;
}
if (do_reply)
rfcomm_write_response(fd, "OK");
t->sink_volume = hsp_gain_to_volume(gain);
pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SINK_VOLUME_CHANGED), t);
do_reply = true;
if (buf[0] == '\r') /* in case it is the command with format \r\nCOMMAND\r\n, skip the starting \r */
buf = buf + 1;
} else if (sscanf(buf, "AT+VGM=%d", &gain) == 1 || sscanf(buf, "\r\n+VGS%*[=:]%d\r\n", &gain) == 1) {
if (!t->set_source_volume) {
pa_log_debug("HS/HF peer supports microphone gain control");
t->set_source_volume = set_source_volume;
}
buf = strstr(buf, "\r"); /* try to find the next AT command in the buf */
if (!buf)
break;
else if (buf[1] == '\n')
buf = buf + 2; /* skip \r\n */
else
buf = buf + 1; /* skip \r */
t->source_volume = hsp_gain_to_volume(gain);
pa_hook_fire(pa_bluetooth_discovery_hook(t->device->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SOURCE_VOLUME_CHANGED), t);
do_reply = true;
} else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) {
do_reply = true;
} else if (sscanf(buf, "AT+XAPL=%04x-%04x-%04x,%d", &vendor, &product, &version, &features) == 4) {
if (features & 0x2)
/* claim, that we support battery status reports */
rfcomm_write_response(fd, "+XAPL=iPhone,6");
do_reply = true;
} else if (sscanf(buf, "AT+IPHONEACCEV=%d", &num) == 1) {
char *substr = buf, *keystr;
int key, val, i;
do_reply = true;
for (i = 0; i < num; ++i) {
keystr = strchr(substr, ',');
if (!keystr) {
pa_log_warn("%s misses key for argument #%d", buf, i);
do_reply = false;
break;
}
keystr++;
substr = strchr(keystr, ',');
if (!substr) {
pa_log_warn("%s misses value for argument #%d", buf, i);
do_reply = false;
break;
}
substr++;
key = atoi(keystr);
val = atoi(substr);
switch (key) {
case 1:
pa_log_notice("Battery Level: %d0%%", val + 1);
pa_bluetooth_device_report_battery_level(t->device, (val + 1) * 10, "Apple accessory indication");
break;
case 2:
pa_log_notice("Dock Status: %s", val ? "docked" : "undocked");
break;
default:
pa_log_debug("Unexpected IPHONEACCEV key %#x", key);
break;
}
}
if (!do_reply)
rfcomm_write_response(fd, "ERROR");
} else if (t->config) { /* t->config is only non-null for hfp profile */
do_reply = hfp_rfcomm_handle(fd, t, buf);
} else {
rfcomm_write_response(fd, "ERROR");
do_reply = false;
}
if (do_reply)
rfcomm_write_response(fd, "OK");
}
return;
fail:
/* Service Connection lost, reset indicators and event reporting to default values */
b->cmer_indicator_reporting_enabled = false;
for (i = 1; i < CIND_INDICATOR_MAX; i++)
b->cind_enabled_indicators |= (1 << i);
pa_bluetooth_transport_unlink(t);
pa_bluetooth_transport_free(t);
}
@ -1175,7 +1022,6 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m,
trd = pa_xnew0(struct transport_data, 1);
trd->rfcomm_fd = fd;
trd->mainloop = b->core->mainloop;
trd->backend = b;
trd->rfcomm_io = trd->mainloop->io_new(b->core->mainloop, fd, PA_IO_EVENT_INPUT,
rfcomm_io_callback, t);
t->userdata = trd;
@ -1342,7 +1188,6 @@ void pa_bluetooth_native_backend_enable_shared_profiles(pa_bluetooth_backend *na
pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_discovery *y, bool enable_shared_profiles) {
pa_bluetooth_backend *backend;
DBusError err;
int i;
pa_log_debug("Bluetooth Headset Backend API support using the native backend");
@ -1366,10 +1211,6 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
pa_hook_connect(pa_bluetooth_discovery_hook(y, PA_BLUETOOTH_HOOK_ADAPTER_UUIDS_CHANGED), PA_HOOK_NORMAL,
(pa_hook_cb_t) adapter_uuids_changed_cb, backend);
backend->host_battery_level_changed_slot =
pa_hook_connect(pa_bluetooth_discovery_hook(y, PA_BLUETOOTH_HOOK_HOST_BATTERY_LEVEL_CHANGED), PA_HOOK_NORMAL,
(pa_hook_cb_t) host_battery_level_changed_cb, backend);
if (!backend->enable_hsp_hs && !backend->enable_hfp_hf)
pa_log_warn("Both HSP HS and HFP HF bluetooth profiles disabled in native backend. Native backend will not register for headset connections.");
@ -1379,16 +1220,6 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d
if (backend->enable_shared_profiles)
native_backend_apply_profile_registration_change(backend, true);
backend->upower = pa_upower_backend_new(c, y);
/* All CIND indicators are enabled by default until overriden by AT+BIA */
for (i = 1; i < CIND_INDICATOR_MAX; i++)
backend->cind_enabled_indicators |= (1 << i);
/* While all CIND indicators are enabled, event reporting is not enabled by default */
backend->cmer_indicator_reporting_enabled = false;
return backend;
}
@ -1400,18 +1231,12 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) {
if (backend->adapter_uuids_changed_slot)
pa_hook_slot_free(backend->adapter_uuids_changed_slot);
if (backend->host_battery_level_changed_slot)
pa_hook_slot_free(backend->host_battery_level_changed_slot);
if (backend->enable_shared_profiles)
native_backend_apply_profile_registration_change(backend, false);
if (backend->enable_hsp_hs)
profile_done(backend, PA_BLUETOOTH_PROFILE_HSP_HS);
if (backend->upower)
pa_upower_backend_free(backend->upower);
pa_dbus_connection_unref(backend->connection);
pa_xfree(backend);

View file

@ -1202,13 +1202,6 @@ bool pa_bluetooth_discovery_get_enable_msbc(pa_bluetooth_discovery *y)
return y->enable_msbc;
}
pa_hashmap* pa_bluetooth_discovery_get_transports(pa_bluetooth_discovery *y) {
pa_assert(y);
pa_assert(PA_REFCNT_VALUE(y) > 0);
return y->transports;
}
pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_address(pa_bluetooth_discovery *y, const char *remote, const char *local) {
pa_bluetooth_device *d;
void *state = NULL;

View file

@ -62,14 +62,12 @@ typedef struct pa_bluetooth_device pa_bluetooth_device;
typedef struct pa_bluetooth_adapter pa_bluetooth_adapter;
typedef struct pa_bluetooth_discovery pa_bluetooth_discovery;
typedef struct pa_bluetooth_backend pa_bluetooth_backend;
typedef struct pa_upower_backend pa_upower_backend;
typedef enum pa_bluetooth_hook {
PA_BLUETOOTH_HOOK_ADAPTER_UUIDS_CHANGED, /* Call data: pa_bluetooth_adapter */
PA_BLUETOOTH_HOOK_DEVICE_CONNECTION_CHANGED, /* Call data: pa_bluetooth_device */
PA_BLUETOOTH_HOOK_DEVICE_UNLINK, /* Call data: pa_bluetooth_device */
PA_BLUETOOTH_HOOK_DEVICE_BATTERY_LEVEL_CHANGED, /* Call data: pa_bluetooth_device */
PA_BLUETOOTH_HOOK_HOST_BATTERY_LEVEL_CHANGED, /* Call data: pa_upower_backend */
PA_BLUETOOTH_HOOK_TRANSPORT_STATE_CHANGED, /* Call data: pa_bluetooth_transport */
PA_BLUETOOTH_HOOK_TRANSPORT_SOURCE_VOLUME_CHANGED, /* Call data: pa_bluetooth_transport */
PA_BLUETOOTH_HOOK_TRANSPORT_SINK_VOLUME_CHANGED, /* Call data: pa_bluetooth_transport */
@ -247,5 +245,4 @@ void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is
bool pa_bluetooth_discovery_get_enable_native_hsp_hs(pa_bluetooth_discovery *y);
bool pa_bluetooth_discovery_get_enable_native_hfp_hf(pa_bluetooth_discovery *y);
bool pa_bluetooth_discovery_get_enable_msbc(pa_bluetooth_discovery *y);
pa_hashmap* pa_bluetooth_discovery_get_transports(pa_bluetooth_discovery *y);
#endif

View file

@ -26,9 +26,6 @@ typedef struct pa_bt_codec {
/* Human readable codec description */
const char *description;
/* True if codec is bi-directional and supports backchannel */
bool support_backchannel;
/* Initialize codec, returns codec info data and set sample_spec,
* for_encoding is true when codec_info is used for encoding,
* for_backchannel is true when codec_info is used for backchannel */
@ -67,7 +64,4 @@ typedef struct pa_bt_codec {
* returns size of filled ouput_buffer and set processed to size of
* processed input_buffer */
size_t (*decode_buffer)(void *codec_info, const uint8_t *input_buffer, size_t input_size, uint8_t *output_buffer, size_t output_size, size_t *processed);
/* Get volume factor which needs to be applied to output samples */
double (*get_source_output_volume_factor_dB)(void *codec_info);
} pa_bt_codec;

View file

@ -16,8 +16,6 @@ libbluez5_util_headers = [
if get_option('bluez5-native-headset')
libbluez5_util_sources += [ 'backend-native.c' ]
libbluez5_util_sources += [ 'upower.c' ]
libbluez5_util_headers += [ 'upower.h' ]
endif
if get_option('bluez5-ofono-headset')
@ -37,7 +35,7 @@ libbluez5_util = shared_library('bluez5-util',
c_args : [pa_c_args, server_c_args],
link_args : [nodelete_link_args],
include_directories : [configinc, topinc],
dependencies : [libpulse_dep, libpulsecommon_dep, libpulsecore_dep, bluez_dep, dbus_dep, sbc_dep, libintl_dep, bluez5_gst_dep, bluez5_gstapp_dep, libm_dep],
dependencies : [libpulse_dep, libpulsecommon_dep, libpulsecore_dep, bluez_dep, dbus_dep, sbc_dep, libintl_dep, bluez5_gst_dep, bluez5_gstapp_dep],
install : true,
install_rpath : privlibdir,
install_dir : modlibexecdir,

View file

@ -116,8 +116,6 @@ struct userdata {
pa_hook_slot *sink_volume_changed_slot;
pa_hook_slot *source_volume_changed_slot;
pa_hook_slot *source_output_new_hook_slot;
pa_bluetooth_discovery *discovery;
pa_bluetooth_device *device;
pa_bluetooth_transport *transport;
@ -394,8 +392,6 @@ static int bt_process_render(struct userdata *u) {
if (processed != u->write_memchunk.length) {
pa_log_error("Encoding error");
pa_memblock_unref(u->write_memchunk.memblock);
pa_memchunk_reset(&u->write_memchunk);
return -1;
}
@ -539,7 +535,6 @@ static int bt_process_push(struct userdata *u) {
if (processed != (size_t) received) {
pa_log_error("Decoding error");
pa_memblock_unref(memchunk.memblock);
return -1;
}
@ -966,12 +961,6 @@ static void source_setup_volume_callback(pa_source *s) {
if (pa_bluetooth_profile_is_a2dp(u->profile) && !u->transport->device->avrcp_absolute_volume)
return;
/* Do not use hardware volume controls for backchannel of A2DP sink */
if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SINK) {
pa_assert_fp(u->transport->bt_codec && u->transport->bt_codec->support_backchannel);
return;
}
/* Remote volume control has to be supported for the callback to make sense,
* otherwise this source should continue performing attenuation in software
* without HW_VOLUME_CTL.
@ -1040,12 +1029,6 @@ static int add_source(struct userdata *u) {
if (!u->transport_acquired)
switch (u->profile) {
case PA_BLUETOOTH_PROFILE_A2DP_SINK:
if (u->bt_codec && u->bt_codec->support_backchannel)
data.suspend_cause = PA_SUSPEND_USER;
else
pa_assert_not_reached();
break;
case PA_BLUETOOTH_PROFILE_A2DP_SOURCE:
case PA_BLUETOOTH_PROFILE_HFP_AG:
case PA_BLUETOOTH_PROFILE_HSP_AG:
@ -1060,6 +1043,7 @@ static int add_source(struct userdata *u) {
else
pa_assert_not_reached();
break;
case PA_BLUETOOTH_PROFILE_A2DP_SINK:
case PA_BLUETOOTH_PROFILE_OFF:
pa_assert_not_reached();
break;
@ -1214,12 +1198,6 @@ static void sink_setup_volume_callback(pa_sink *s) {
if (pa_bluetooth_profile_is_a2dp(u->profile) && !u->transport->device->avrcp_absolute_volume)
return;
/* Do not use hardware volume controls for backchannel of A2DP source */
if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE) {
pa_assert_fp(u->transport->bt_codec && u->transport->bt_codec->support_backchannel);
return;
}
/* Remote volume control has to be supported for the callback to make sense,
* otherwise this sink should continue performing attenuation in software
* without HW_VOLUME_CTL.
@ -1344,7 +1322,6 @@ static pa_direction_t get_profile_direction(pa_bluetooth_profile_t p) {
/* Run from main thread */
static int transport_config(struct userdata *u) {
bool reverse_backchannel;
pa_assert(u);
pa_assert(u->transport);
pa_assert(!u->bt_codec);
@ -1357,18 +1334,15 @@ static int transport_config(struct userdata *u) {
/* reset encoder buffer contents */
u->encoder_buffer_used = 0;
/* forward encoding direction */
reverse_backchannel = u->bt_codec->support_backchannel && !(get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT);
if ((get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT) || u->bt_codec->support_backchannel) {
u->encoder_info = u->bt_codec->init(true, reverse_backchannel, u->transport->config, u->transport->config_size, &u->encoder_sample_spec, u->core);
if (get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT) {
u->encoder_info = u->bt_codec->init(true, false, u->transport->config, u->transport->config_size, &u->encoder_sample_spec, u->core);
if (!u->encoder_info)
return -1;
}
if ((get_profile_direction(u->profile) & PA_DIRECTION_INPUT) || u->bt_codec->support_backchannel) {
u->decoder_info = u->bt_codec->init(false, reverse_backchannel, u->transport->config, u->transport->config_size, &u->decoder_sample_spec, u->core);
if (get_profile_direction(u->profile) & PA_DIRECTION_INPUT) {
u->decoder_info = u->bt_codec->init(false, false, u->transport->config, u->transport->config_size, &u->decoder_sample_spec, u->core);
if (!u->decoder_info) {
if (u->encoder_info) {
@ -1426,11 +1400,11 @@ static int init_profile(struct userdata *u) {
pa_assert(u->transport);
if ((get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT) || u->bt_codec->support_backchannel)
if (get_profile_direction (u->profile) & PA_DIRECTION_OUTPUT)
if (add_sink(u) < 0)
r = -1;
if ((get_profile_direction(u->profile) & PA_DIRECTION_INPUT) || u->bt_codec->support_backchannel)
if (get_profile_direction (u->profile) & PA_DIRECTION_INPUT)
if (add_source(u) < 0)
r = -1;
@ -1549,8 +1523,8 @@ static void thread_func(void *userdata) {
writable = true;
/* If we have a source, we let the source determine the timing
* for the sink unless peer has not sent any data yet */
if (have_source && u->read_index > 0) {
* for the sink */
if (have_source) {
/* If the stream is writable, send some data if necessary */
if (writable) {
@ -1631,15 +1605,13 @@ static void thread_func(void *userdata) {
skip_bytes -= bytes_to_render;
}
if (u->write_index > 0 && (get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT || u->bt_codec->support_backchannel)) {
if (u->bt_codec->reduce_encoder_bitrate) {
size_t new_write_block_size = u->bt_codec->reduce_encoder_bitrate(u->encoder_info, u->write_link_mtu);
if (new_write_block_size) {
u->write_block_size = new_write_block_size;
handle_sink_block_size_change(u);
}
pa_gettimeofday(&tv_last_output_rate_change);
if (u->write_index > 0 && (get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT)) {
size_t new_write_block_size = u->bt_codec->reduce_encoder_bitrate(u->encoder_info, u->write_link_mtu);
if (new_write_block_size) {
u->write_block_size = new_write_block_size;
handle_sink_block_size_change(u);
}
pa_gettimeofday(&tv_last_output_rate_change);
}
}
@ -1663,12 +1635,6 @@ static void thread_func(void *userdata) {
goto fail;
if (result) {
if (have_source && u->read_index <= 0) {
/* We have a source but peer has not sent any data yet, log this */
if (pa_log_ratelimit(PA_LOG_DEBUG))
pa_log_debug("Still no data received from source, sent one more block to sink");
}
writable = false;
have_written = true;
}
@ -1688,7 +1654,7 @@ static void thread_func(void *userdata) {
sleep_for = time_passed < next_write_at ? next_write_at - time_passed : 0;
/* pa_log("Sleeping for %lu; time passed %lu, next write at %lu", (unsigned long) sleep_for, (unsigned long) time_passed, (unsigned long)next_write_at); */
if ((get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT || u->bt_codec->support_backchannel) && u->write_memchunk.memblock == NULL) {
if ((get_profile_direction(u->profile) & PA_DIRECTION_OUTPUT) && u->write_memchunk.memblock == NULL) {
/* bt_write_buffer() is keeping up with input, try increasing bitrate */
if (u->bt_codec->increase_encoder_bitrate
&& pa_timeval_age(&tv_last_output_rate_change) >= u->device->output_rate_refresh_interval_ms * PA_USEC_PER_MSEC) {
@ -1920,10 +1886,10 @@ static pa_available_t get_port_availability(struct userdata *u, pa_direction_t d
for (i = 0; i < PA_BLUETOOTH_PROFILE_COUNT; i++) {
pa_bluetooth_transport *transport;
if (!(transport = u->device->transports[i]))
if (!(get_profile_direction(i) & direction))
continue;
if (!(get_profile_direction(i) & direction || (transport->bt_codec && transport->bt_codec->support_backchannel)))
if (!(transport = u->device->transports[i]))
continue;
switch(transport->state) {
@ -2763,30 +2729,6 @@ static int device_process_msg(pa_msgobject *obj, int code, void *data, int64_t o
return 0;
}
/* Run from main thread */
static pa_hook_result_t a2dp_source_output_fixate_hook_callback(pa_core *c, pa_source_output_new_data *new_data, struct userdata *u) {
double volume_factor_dB;
pa_cvolume cv;
pa_assert(c);
pa_assert(new_data);
pa_assert(u);
/* When transport is released, there is no decoder and no codec */
if (!u->bt_codec || !u->decoder_info)
return PA_HOOK_OK;
if (!u->bt_codec->get_source_output_volume_factor_dB)
return PA_HOOK_OK;
volume_factor_dB = u->bt_codec->get_source_output_volume_factor_dB(u->decoder_info);
pa_cvolume_set(&cv, u->decoder_sample_spec.channels, pa_sw_volume_from_dB(volume_factor_dB));
pa_source_output_new_data_apply_volume_factor_source(new_data, &cv);
return PA_HOOK_OK;
}
int pa__init(pa_module* m) {
struct userdata *u;
const char *path;
@ -2868,8 +2810,6 @@ int pa__init(pa_module* m) {
u->transport_source_volume_changed_slot =
pa_hook_connect(pa_bluetooth_discovery_hook(u->discovery, PA_BLUETOOTH_HOOK_TRANSPORT_SOURCE_VOLUME_CHANGED), PA_HOOK_NORMAL, (pa_hook_cb_t) transport_source_volume_changed_cb, u);
u->source_output_new_hook_slot = pa_hook_connect(&m->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_NEW], PA_HOOK_EARLY, (pa_hook_cb_t) a2dp_source_output_fixate_hook_callback, u);
if (add_card(u) < 0)
goto fail;
@ -2933,9 +2873,6 @@ void pa__done(pa_module *m) {
stop_thread(u);
if (u->source_output_new_hook_slot)
pa_hook_slot_free(u->source_output_new_hook_slot);
if (u->device_connection_changed_slot)
pa_hook_slot_free(u->device_connection_changed_slot);

View file

@ -1,300 +0,0 @@
/***
This file is part of PulseAudio.
Copyright 2022 Dylan Van Assche <me@dylanvanassche.be>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
PulseAudio 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 Lesser General Public
License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <math.h>
#include <pulsecore/core-error.h>
#include <pulsecore/core-util.h>
#include <pulsecore/dbus-shared.h>
#include <pulsecore/log.h>
#include <pulse/timeval.h>
#include <pulse/rtclock.h>
#include "upower.h"
static pa_dbus_pending* send_and_add_to_pending(pa_upower_backend *backend, DBusMessage *m,
DBusPendingCallNotifyFunction func, void *call_data) {
pa_dbus_pending *p;
DBusPendingCall *call;
pa_assert(backend);
pa_assert(m);
pa_assert_se(dbus_connection_send_with_reply(pa_dbus_connection_get(backend->connection), m, &call, -1));
p = pa_dbus_pending_new(pa_dbus_connection_get(backend->connection), m, call, backend, call_data);
PA_LLIST_PREPEND(pa_dbus_pending, backend->pending, p);
dbus_pending_call_set_notify(call, func, p, NULL);
return p;
}
static void parse_percentage(pa_upower_backend *b, DBusMessageIter *i) {
double percentage;
unsigned int battery_level;
pa_assert(i);
pa_assert(dbus_message_iter_get_arg_type(i) == DBUS_TYPE_DOUBLE);
dbus_message_iter_get_basic(i, &percentage);
battery_level = (unsigned int) round(percentage / 20.0);
if (battery_level != b->battery_level) {
b->battery_level = battery_level;
pa_log_debug("AG battery level updated (%d/5)", b->battery_level);
pa_hook_fire(pa_bluetooth_discovery_hook(b->discovery, PA_BLUETOOTH_HOOK_HOST_BATTERY_LEVEL_CHANGED), b);
}
}
static void get_percentage_reply(DBusPendingCall *pending, void *userdata) {
pa_dbus_pending *p;
pa_upower_backend *b;
DBusMessage *r;
DBusMessageIter arg_i, variant_i;
pa_assert(pending);
pa_assert_se(p = userdata);
pa_assert_se(b = p->context_data);
pa_assert_se(r = dbus_pending_call_steal_reply(pending));
if (dbus_message_is_error(r, DBUS_ERROR_UNKNOWN_METHOD)) {
pa_log_warn("UPower D-Bus Display Device not available");
goto finish;
}
if (dbus_message_get_type(r) == DBUS_MESSAGE_TYPE_ERROR) {
pa_log_error("Get() failed: %s: %s", dbus_message_get_error_name(r), pa_dbus_get_error_message(r));
goto finish;
}
if (!dbus_message_iter_init(r, &arg_i) || !pa_streq(dbus_message_get_signature(r), "v")) {
pa_log_error("Invalid reply signature for Get()");
goto finish;
}
dbus_message_iter_recurse(&arg_i, &variant_i);
parse_percentage(b, &variant_i);
finish:
dbus_message_unref(r);
PA_LLIST_REMOVE(pa_dbus_pending, b->pending, p);
pa_dbus_pending_free(p);
}
static const char *check_variant_property(DBusMessageIter *i) {
const char *key;
pa_assert(i);
if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_STRING) {
pa_log_error("Property name not a string.");
return NULL;
}
dbus_message_iter_get_basic(i, &key);
if (!dbus_message_iter_next(i)) {
pa_log_error("Property value missing");
return NULL;
}
if (dbus_message_iter_get_arg_type(i) != DBUS_TYPE_VARIANT) {
pa_log_error("Property value not a variant.");
return NULL;
}
return key;
}
static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *data) {
DBusError err;
DBusMessage *m2;
static const char* upower_device_interface = UPOWER_SERVICE UPOWER_DEVICE_INTERFACE;
static const char* percentage_property = "Percentage";
pa_upower_backend *b = data;
const char *path, *interface, *member;
pa_assert(bus);
pa_assert(m);
pa_assert(b);
dbus_error_init(&err);
path = dbus_message_get_path(m);
interface = dbus_message_get_interface(m);
member = dbus_message_get_member(m);
pa_log_debug("dbus: path=%s, interface=%s, member=%s", path, interface, member);
/* UPower D-Bus status change */
if (dbus_message_is_signal(m, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
const char *name, *old_owner, *new_owner;
if (!dbus_message_get_args(m, &err,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &old_owner,
DBUS_TYPE_STRING, &new_owner,
DBUS_TYPE_INVALID)) {
pa_log_error("Failed to parse " DBUS_INTERFACE_DBUS ".NameOwnerChanged: %s", err.message);
goto fail;
}
if (pa_streq(name, UPOWER_SERVICE)) {
/* UPower disappeared from D-Bus */
if (old_owner && *old_owner) {
pa_log_debug("UPower disappeared from D-Bus");
b->battery_level = 0;
pa_hook_fire(pa_bluetooth_discovery_hook(b->discovery, PA_BLUETOOTH_HOOK_HOST_BATTERY_LEVEL_CHANGED), b);
}
/* UPower appeared on D-Bus */
if (new_owner && *new_owner) {
pa_log_debug("UPower appeared on D-Bus");
/* Update battery level */
pa_assert_se(m2 = dbus_message_new_method_call(UPOWER_SERVICE, UPOWER_DISPLAY_DEVICE_OBJECT, DBUS_INTERFACE_PROPERTIES, "Get"));
pa_assert_se(dbus_message_append_args(m2,
DBUS_TYPE_STRING, &upower_device_interface,
DBUS_TYPE_STRING, &percentage_property,
DBUS_TYPE_INVALID));
send_and_add_to_pending(b, m2, get_percentage_reply, NULL);
}
}
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
/* UPower battery level property updates */
} else if (dbus_message_is_signal(m, DBUS_INTERFACE_PROPERTIES, "PropertiesChanged")) {
DBusMessageIter arg_i, element_i;
if (!dbus_message_iter_init(m, &arg_i) || !pa_streq(dbus_message_get_signature(m), "sa{sv}as")) {
pa_log_error("Invalid signature found in PropertiesChanged");
goto fail;
}
/* Skip interface name */
pa_assert_se(dbus_message_iter_next(&arg_i));
pa_assert(dbus_message_iter_get_arg_type(&arg_i) == DBUS_TYPE_ARRAY);
dbus_message_iter_recurse(&arg_i, &element_i);
/* Parse UPower property updates */
while (dbus_message_iter_get_arg_type(&element_i) == DBUS_TYPE_DICT_ENTRY) {
DBusMessageIter dict_i, variant_i;
const char *key;
dbus_message_iter_recurse(&element_i, &dict_i);
/* Retrieve property name */
key = check_variant_property(&dict_i);
if (key == NULL) {
pa_log_error("Received invalid property!");
break;
}
dbus_message_iter_recurse(&dict_i, &variant_i);
if(pa_streq(path, UPOWER_DISPLAY_DEVICE_OBJECT)) {
pa_log_debug("UPower Device property updated: %s", key);
if(pa_streq(key, "Percentage"))
parse_percentage(b, &variant_i);
}
dbus_message_iter_next(&element_i);
}
}
fail:
dbus_error_free(&err);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
unsigned int pa_upower_get_battery_level(pa_upower_backend *backend) {
return backend->battery_level;
}
pa_upower_backend *pa_upower_backend_new(pa_core *c, pa_bluetooth_discovery *d) {
pa_upower_backend *backend;
DBusError err;
DBusMessage *m;
static const char* upower_device_interface = UPOWER_SERVICE UPOWER_DEVICE_INTERFACE;
static const char* percentage_property = "Percentage";
pa_log_debug("Native backend enabled UPower battery status reporting");
backend = pa_xnew0(pa_upower_backend, 1);
backend->core = c;
backend->discovery = d;
/* Get DBus connection */
dbus_error_init(&err);
if (!(backend->connection = pa_dbus_bus_get(c, DBUS_BUS_SYSTEM, &err))) {
pa_log("Failed to get D-Bus connection: %s", err.message);
dbus_error_free(&err);
pa_xfree(backend);
return NULL;
}
/* Add filter callback for DBus connection */
if (!dbus_connection_add_filter(pa_dbus_connection_get(backend->connection), filter_cb, backend, NULL)) {
pa_log_error("Failed to add filter function");
pa_dbus_connection_unref(backend->connection);
pa_xfree(backend);
return NULL;
}
/* Register for battery level changes from UPower */
if (pa_dbus_add_matches(pa_dbus_connection_get(backend->connection), &err,
"type='signal',sender='" DBUS_SERVICE_DBUS "',interface='" DBUS_INTERFACE_DBUS "',member='NameOwnerChanged',"
"arg0='" UPOWER_SERVICE "'",
"type='signal',sender='" UPOWER_SERVICE "',interface='" DBUS_INTERFACE_PROPERTIES "',member='PropertiesChanged'",
NULL) < 0) {
pa_log("Failed to add UPower D-Bus matches: %s", err.message);
dbus_connection_remove_filter(pa_dbus_connection_get(backend->connection), filter_cb, backend);
pa_dbus_connection_unref(backend->connection);
pa_xfree(backend);
return NULL;
}
/* Initialize battery level by requesting it from UPower */
pa_assert_se(m = dbus_message_new_method_call(UPOWER_SERVICE, UPOWER_DISPLAY_DEVICE_OBJECT, DBUS_INTERFACE_PROPERTIES, "Get"));
pa_assert_se(dbus_message_append_args(m,
DBUS_TYPE_STRING, &upower_device_interface,
DBUS_TYPE_STRING, &percentage_property,
DBUS_TYPE_INVALID));
send_and_add_to_pending(backend, m, get_percentage_reply, NULL);
return backend;
}
void pa_upower_backend_free(pa_upower_backend *backend) {
pa_assert(backend);
pa_dbus_free_pending_list(&backend->pending);
pa_dbus_connection_unref(backend->connection);
pa_xfree(backend);
}

View file

@ -1,39 +0,0 @@
#pragma once
/***
This file is part of PulseAudio.
Copyright 2022 Dylan Van Assche <me@dylanvanassche.be>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
PulseAudio 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 Lesser General Public
License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
***/
#include "bluez5-util.h"
#define UPOWER_SERVICE "org.freedesktop.UPower"
#define UPOWER_DEVICE_INTERFACE ".Device"
#define UPOWER_DISPLAY_DEVICE_OBJECT "/org/freedesktop/UPower/devices/DisplayDevice"
struct pa_upower_backend {
pa_core *core;
pa_dbus_connection *connection;
pa_bluetooth_discovery *discovery;
unsigned int battery_level;
PA_LLIST_HEAD(pa_dbus_pending, pending);
};
pa_upower_backend *pa_upower_backend_new(pa_core *c, pa_bluetooth_discovery *d);
void pa_upower_backend_free(pa_upower_backend *backend);
unsigned int pa_upower_get_battery_level(pa_upower_backend *backend);

View file

@ -3,28 +3,19 @@
# even conditional ones).
# This library requires a symbol from module-echo-cancel, hence we need
# '-Wl,--unresolved-symbols=ignore-in-object-files', or
# '-Wl,-undefined,dynamic_lookup' on macOS, otherwise it fails
# '-Wl,--unresolved-symbols=ignore-in-object-files' otherwise it fails
# at link time.
add_languages('cpp')
libwebrtc_util_sources = [
'webrtc.cc'
]
if host_machine.system() == 'darwin'
ignore_unresolved_symbols_link_args = ['-Wl,-undefined,dynamic_lookup']
else
ignore_unresolved_symbols_link_args = ['-Wl,--unresolved-symbols=ignore-in-object-files']
endif
libwebrtc_util = shared_library('webrtc-util',
libwebrtc_util_sources,
cpp_args : [pa_c_args, server_c_args],
include_directories : [configinc, topinc],
dependencies : [libpulse_dep, libpulsecommon_dep, libpulsecore_dep, libatomic_ops_dep, webrtc_dep, libintl_dep],
link_args : [nodelete_link_args, ignore_unresolved_symbols_link_args],
link_args : [nodelete_link_args, '-Wl,--unresolved-symbols=ignore-in-object-files'],
install : true,
install_rpath : privlibdir,
install_dir : modlibexecdir,

View file

@ -2370,6 +2370,8 @@ int main(int argc, char* argv[]) {
}
u.ec->done(u.ec);
u.ec->msg->dead = true;
pa_echo_canceller_msg_unref(u.ec->msg);
out:
if (u.captured_file)

View file

@ -3,8 +3,8 @@
Copyright 2011 Collabora Ltd.
2015 Aldebaran SoftBank Group
2020 Arun Raghavan <arun@asymptotic.io>
2020 Eero Nurkkala <eero.nurkkala@offcode.fi>
Contributor: Arun Raghavan <mail@arunraghavan.net>
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
@ -34,47 +34,80 @@ PA_C_DECL_BEGIN
#include "echo-cancel.h"
PA_C_DECL_END
#define WEBRTC_APM_DEBUG_DUMP 0
#include <modules/audio_processing/include/audio_processing.h>
#include <webrtc/modules/audio_processing/include/audio_processing.h>
#include <webrtc/modules/interface/module_common_types.h>
#include <webrtc/system_wrappers/include/trace.h>
#define BLOCK_SIZE_US 10000
#define DEFAULT_HIGH_PASS_FILTER true
#define DEFAULT_NOISE_SUPPRESSION true
#define DEFAULT_TRANSIENT_NOISE_SUPPRESSION true
#define DEFAULT_ANALOG_GAIN_CONTROL true
#define DEFAULT_DIGITAL_GAIN_CONTROL false
#define DEFAULT_MOBILE false
#define DEFAULT_ROUTING_MODE "speakerphone"
#define DEFAULT_COMFORT_NOISE true
#define DEFAULT_DRIFT_COMPENSATION false
#define DEFAULT_VAD false
#define DEFAULT_VAD true
#define DEFAULT_EXTENDED_FILTER false
#define DEFAULT_INTELLIGIBILITY_ENHANCER false
#define DEFAULT_EXPERIMENTAL_AGC false
#define DEFAULT_AGC_START_VOLUME 85
#define DEFAULT_POSTAMP_ENABLE false
#define DEFAULT_POSTAMP_GAIN_DB 0
#define DEFAULT_PREAMP_ENABLE false
#define DEFAULT_PREAMP_GAIN_DB 0
#define DEFAULT_BEAMFORMING false
#define DEFAULT_TRACE false
#define WEBRTC_AGC_MAX_VOLUME 255
#define WEBRTC_POSTAMP_GAIN_MAX_DB 90
#define WEBRTC_PREAMP_GAIN_MAX_DB 90
static const char* const valid_modargs[] = {
"agc_start_volume",
"high_pass_filter",
"noise_suppression",
"analog_gain_control",
"digital_gain_control",
"high_pass_filter",
"mobile",
"noise_suppression",
"post_amplifier",
"post_amplifier_gain",
"pre_amplifier",
"pre_amplifier_gain",
"transient_noise_suppression",
"routing_mode",
"comfort_noise",
"drift_compensation",
"voice_detection",
"extended_filter",
"intelligibility_enhancer",
"experimental_agc",
"agc_start_volume",
"beamforming",
"mic_geometry", /* documented in parse_mic_geometry() */
"target_direction", /* documented in parse_mic_geometry() */
"trace",
NULL
};
static int routing_mode_from_string(const char *rmode) {
if (pa_streq(rmode, "quiet-earpiece-or-headset"))
return webrtc::EchoControlMobile::kQuietEarpieceOrHeadset;
else if (pa_streq(rmode, "earpiece"))
return webrtc::EchoControlMobile::kEarpiece;
else if (pa_streq(rmode, "loud-earpiece"))
return webrtc::EchoControlMobile::kLoudEarpiece;
else if (pa_streq(rmode, "speakerphone"))
return webrtc::EchoControlMobile::kSpeakerphone;
else if (pa_streq(rmode, "loud-speakerphone"))
return webrtc::EchoControlMobile::kLoudSpeakerphone;
else
return -1;
}
class PaWebrtcTraceCallback : public webrtc::TraceCallback {
void Print(webrtc::TraceLevel level, const char *message, int length)
{
if (level & webrtc::kTraceError || level & webrtc::kTraceCritical)
pa_log("%s", message);
else if (level & webrtc::kTraceWarning)
pa_log_warn("%s", message);
else if (level & webrtc::kTraceInfo)
pa_log_info("%s", message);
else
pa_log_debug("%s", message);
}
};
static int webrtc_volume_from_pa(pa_volume_t v)
{
return (v * WEBRTC_AGC_MAX_VOLUME) / PA_VOLUME_NORM;
@ -87,7 +120,8 @@ static pa_volume_t webrtc_volume_to_pa(int v)
static void webrtc_ec_fixate_spec(pa_sample_spec *rec_ss, pa_channel_map *rec_map,
pa_sample_spec *play_ss, pa_channel_map *play_map,
pa_sample_spec *out_ss, pa_channel_map *out_map)
pa_sample_spec *out_ss, pa_channel_map *out_map,
bool beamforming)
{
rec_ss->format = PA_SAMPLE_FLOAT32NE;
play_ss->format = PA_SAMPLE_FLOAT32NE;
@ -105,22 +139,110 @@ static void webrtc_ec_fixate_spec(pa_sample_spec *rec_ss, pa_channel_map *rec_ma
*out_ss = *rec_ss;
*out_map = *rec_map;
if (beamforming) {
/* The beamformer gives us a single channel */
out_ss->channels = 1;
pa_channel_map_init_mono(out_map);
}
/* Playback stream rate needs to be the same as capture */
play_ss->rate = rec_ss->rate;
}
static bool parse_point(const char **point, float (&f)[3]) {
int ret, length;
ret = sscanf(*point, "%g,%g,%g%n", &f[0], &f[1], &f[2], &length);
if (ret != 3)
return false;
/* Consume the bytes we've read so far */
*point += length;
return true;
}
static bool parse_mic_geometry(const char **mic_geometry, std::vector<webrtc::Point>& geometry) {
/* The microphone geometry is expressed as cartesian point form:
* x1,y1,z1,x2,y2,z2,...
*
* Where x1,y1,z1 is the position of the first microphone with regards to
* the array's "center", x2,y2,z2 the position of the second, and so on.
*
* 'x' is the horizontal coordinate, with positive values being to the
* right from the mic array's perspective.
*
* 'y' is the depth coordinate, with positive values being in front of the
* array.
*
* 'z' is the vertical coordinate, with positive values being above the
* array.
*
* All distances are in meters.
*/
/* The target direction is expected to be in spherical point form:
* a,e,r
*
* Where 'a' is the azimuth of the target point relative to the center of
* the array, 'e' its elevation, and 'r' the radius.
*
* 0 radians azimuth is to the right of the array, and positive angles
* move in a counter-clockwise direction.
*
* 0 radians elevation is horizontal w.r.t. the array, and positive
* angles go upwards.
*
* radius is distance from the array center in meters.
*/
long unsigned int i;
float f[3];
for (i = 0; i < geometry.size(); i++) {
if (!parse_point(mic_geometry, f)) {
pa_log("Failed to parse channel %lu in mic_geometry", i);
return false;
}
/* Except for the last point, we should have a trailing comma */
if (i != geometry.size() - 1) {
if (**mic_geometry != ',') {
pa_log("Failed to parse channel %lu in mic_geometry", i);
return false;
}
(*mic_geometry)++;
}
pa_log_debug("Got mic #%lu position: (%g, %g, %g)", i, f[0], f[1], f[2]);
geometry[i].c[0] = f[0];
geometry[i].c[1] = f[1];
geometry[i].c[2] = f[2];
}
if (**mic_geometry != '\0') {
pa_log("Failed to parse mic_geometry value: more parameters than expected");
return false;
}
return true;
}
bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
pa_sample_spec *rec_ss, pa_channel_map *rec_map,
pa_sample_spec *play_ss, pa_channel_map *play_map,
pa_sample_spec *out_ss, pa_channel_map *out_map,
uint32_t *nframes, const char *args) {
webrtc::AudioProcessing *apm = webrtc::AudioProcessingBuilder().Create();
webrtc::AudioProcessing *apm = NULL;
webrtc::ProcessingConfig pconfig;
webrtc::AudioProcessing::Config config;
bool hpf, ns, tns, agc, dgc, mobile, pre_amp, vad, post_amp;
int i;
uint32_t agc_start_volume, pre_amp_gain, post_amp_gain;
webrtc::Config config;
bool hpf, ns, agc, dgc, mobile, cn, vad, ext_filter, intelligibility, experimental_agc, beamforming;
int rm = -1, i;
uint32_t agc_start_volume;
pa_modargs *ma;
bool trace = false;
if (!(ma = pa_modargs_new(args, valid_modargs))) {
pa_log("Failed to parse submodule arguments.");
@ -139,12 +261,6 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
goto fail;
}
tns = DEFAULT_TRANSIENT_NOISE_SUPPRESSION;
if (pa_modargs_get_value_boolean(ma, "transient_noise_suppression", &tns) < 0) {
pa_log("Failed to parse transient_noise_suppression value");
goto fail;
}
agc = DEFAULT_ANALOG_GAIN_CONTROL;
if (pa_modargs_get_value_boolean(ma, "analog_gain_control", &agc) < 0) {
pa_log("Failed to parse analog_gain_control value");
@ -162,36 +278,6 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
goto fail;
}
pre_amp = DEFAULT_PREAMP_ENABLE;
if (pa_modargs_get_value_boolean(ma, "pre_amplifier", &pre_amp) < 0) {
pa_log("Failed to parse pre_amplifier value");
goto fail;
}
pre_amp_gain = DEFAULT_PREAMP_GAIN_DB;
if (pa_modargs_get_value_u32(ma, "pre_amplifier_gain", &pre_amp_gain) < 0) {
pa_log("Failed to parse pre_amplifier_gain value");
goto fail;
}
if (pre_amp_gain > WEBRTC_PREAMP_GAIN_MAX_DB) {
pa_log("Preamp gain must not exceed %u", WEBRTC_PREAMP_GAIN_MAX_DB);
goto fail;
}
post_amp = DEFAULT_POSTAMP_ENABLE;
if (pa_modargs_get_value_boolean(ma, "post_amplifier", &post_amp) < 0) {
pa_log("Failed to parse post_amplifier value");
goto fail;
}
post_amp_gain = DEFAULT_POSTAMP_GAIN_DB;
if (pa_modargs_get_value_u32(ma, "post_amplifier_gain", &post_amp_gain) < 0) {
pa_log("Failed to parse post_amplifier_gain value");
goto fail;
}
if (post_amp_gain > WEBRTC_POSTAMP_GAIN_MAX_DB) {
pa_log("Postamp gain must not exceed %u", WEBRTC_POSTAMP_GAIN_MAX_DB);
goto fail;
}
mobile = DEFAULT_MOBILE;
if (pa_modargs_get_value_boolean(ma, "mobile", &mobile) < 0) {
pa_log("Failed to parse mobile value");
@ -199,6 +285,33 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
}
ec->params.drift_compensation = DEFAULT_DRIFT_COMPENSATION;
if (pa_modargs_get_value_boolean(ma, "drift_compensation", &ec->params.drift_compensation) < 0) {
pa_log("Failed to parse drift_compensation value");
goto fail;
}
if (mobile) {
if (ec->params.drift_compensation) {
pa_log("Can't use drift_compensation in mobile mode");
goto fail;
}
if ((rm = routing_mode_from_string(pa_modargs_get_value(ma, "routing_mode", DEFAULT_ROUTING_MODE))) < 0) {
pa_log("Failed to parse routing_mode value");
goto fail;
}
cn = DEFAULT_COMFORT_NOISE;
if (pa_modargs_get_value_boolean(ma, "comfort_noise", &cn) < 0) {
pa_log("Failed to parse cn value");
goto fail;
}
} else {
if (pa_modargs_get_value(ma, "comfort_noise", NULL) || pa_modargs_get_value(ma, "routing_mode", NULL)) {
pa_log("The routing_mode and comfort_noise options are only valid with mobile=true");
goto fail;
}
}
vad = DEFAULT_VAD;
if (pa_modargs_get_value_boolean(ma, "voice_detection", &vad) < 0) {
@ -206,6 +319,24 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
goto fail;
}
ext_filter = DEFAULT_EXTENDED_FILTER;
if (pa_modargs_get_value_boolean(ma, "extended_filter", &ext_filter) < 0) {
pa_log("Failed to parse extended_filter value");
goto fail;
}
intelligibility = DEFAULT_INTELLIGIBILITY_ENHANCER;
if (pa_modargs_get_value_boolean(ma, "intelligibility_enhancer", &intelligibility) < 0) {
pa_log("Failed to parse intelligibility_enhancer value");
goto fail;
}
experimental_agc = DEFAULT_EXPERIMENTAL_AGC;
if (pa_modargs_get_value_boolean(ma, "experimental_agc", &experimental_agc) < 0) {
pa_log("Failed to parse experimental_agc value");
goto fail;
}
agc_start_volume = DEFAULT_AGC_START_VOLUME;
if (pa_modargs_get_value_u32(ma, "agc_start_volume", &agc_start_volume) < 0) {
pa_log("Failed to parse agc_start_volume value");
@ -217,7 +348,82 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
}
ec->params.webrtc.agc_start_volume = agc_start_volume;
webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map);
beamforming = DEFAULT_BEAMFORMING;
if (pa_modargs_get_value_boolean(ma, "beamforming", &beamforming) < 0) {
pa_log("Failed to parse beamforming value");
goto fail;
}
if (ext_filter)
config.Set<webrtc::ExtendedFilter>(new webrtc::ExtendedFilter(true));
if (intelligibility)
pa_log_warn("The intelligibility enhancer is not currently supported");
if (experimental_agc)
config.Set<webrtc::ExperimentalAgc>(new webrtc::ExperimentalAgc(true, ec->params.webrtc.agc_start_volume));
trace = DEFAULT_TRACE;
if (pa_modargs_get_value_boolean(ma, "trace", &trace) < 0) {
pa_log("Failed to parse trace value");
goto fail;
}
if (trace) {
webrtc::Trace::CreateTrace();
webrtc::Trace::set_level_filter(webrtc::kTraceAll);
ec->params.webrtc.trace_callback = new PaWebrtcTraceCallback();
webrtc::Trace::SetTraceCallback((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
}
webrtc_ec_fixate_spec(rec_ss, rec_map, play_ss, play_map, out_ss, out_map, beamforming);
/* We do this after fixate because we need the capture channel count */
if (beamforming) {
std::vector<webrtc::Point> geometry(rec_ss->channels);
webrtc::SphericalPointf direction(0.0f, 0.0f, 0.0f);
const char *mic_geometry, *target_direction;
if (!(mic_geometry = pa_modargs_get_value(ma, "mic_geometry", NULL))) {
pa_log("mic_geometry must be set if beamforming is enabled");
goto fail;
}
if (!parse_mic_geometry(&mic_geometry, geometry)) {
pa_log("Failed to parse mic_geometry value");
goto fail;
}
if ((target_direction = pa_modargs_get_value(ma, "target_direction", NULL))) {
float f[3];
if (!parse_point(&target_direction, f)) {
pa_log("Failed to parse target_direction value");
goto fail;
}
if (*target_direction != '\0') {
pa_log("Failed to parse target_direction value: more parameters than expected");
goto fail;
}
#define IS_ZERO(f) ((f) < 0.000001 && (f) > -0.000001)
if (!IS_ZERO(f[1]) || !IS_ZERO(f[2])) {
pa_log("The beamformer currently only supports targeting along the azimuth");
goto fail;
}
direction.s[0] = f[0];
direction.s[1] = f[1];
direction.s[2] = f[2];
}
if (!target_direction)
config.Set<webrtc::Beamforming>(new webrtc::Beamforming(true, geometry));
else
config.Set<webrtc::Beamforming>(new webrtc::Beamforming(true, geometry, direction));
}
apm = webrtc::AudioProcessing::Create(config);
pconfig = {
webrtc::StreamConfig(rec_ss->rate, rec_ss->channels, false), /* input stream */
@ -230,62 +436,46 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
goto fail;
}
if (pre_amp) {
config.pre_amplifier.enabled = true;
config.pre_amplifier.fixed_gain_factor = (float)pre_amp_gain;
} else
config.pre_amplifier.enabled = false;
if (hpf)
config.high_pass_filter.enabled = true;
else
config.high_pass_filter.enabled = false;
apm->high_pass_filter()->Enable(true);
config.echo_canceller.enabled = true;
config.pipeline.multi_channel_capture = rec_ss->channels > 1;
config.pipeline.multi_channel_render = play_ss->channels > 1;
if (!mobile) {
apm->echo_cancellation()->enable_drift_compensation(ec->params.drift_compensation);
apm->echo_cancellation()->Enable(true);
} else {
apm->echo_control_mobile()->set_routing_mode(static_cast<webrtc::EchoControlMobile::RoutingMode>(rm));
apm->echo_control_mobile()->enable_comfort_noise(cn);
apm->echo_control_mobile()->Enable(true);
}
if (!mobile)
config.echo_canceller.mobile_mode = false;
else
config.echo_canceller.mobile_mode = true;
if (ns) {
apm->noise_suppression()->set_level(webrtc::NoiseSuppression::kHigh);
apm->noise_suppression()->Enable(true);
}
if (ns)
config.noise_suppression.enabled = true;
else
config.noise_suppression.enabled = false;
if (agc || dgc) {
if (mobile && rm <= webrtc::EchoControlMobile::kEarpiece) {
/* Maybe this should be a knob, but we've got a lot of knobs already */
apm->gain_control()->set_mode(webrtc::GainControl::kFixedDigital);
ec->params.webrtc.agc = false;
} else if (dgc) {
apm->gain_control()->set_mode(webrtc::GainControl::kAdaptiveDigital);
ec->params.webrtc.agc = false;
} else {
apm->gain_control()->set_mode(webrtc::GainControl::kAdaptiveAnalog);
if (apm->gain_control()->set_analog_level_limits(0, WEBRTC_AGC_MAX_VOLUME) !=
webrtc::AudioProcessing::kNoError) {
pa_log("Failed to initialise AGC");
goto fail;
}
ec->params.webrtc.agc = true;
}
if (tns)
config.transient_suppression.enabled = true;
else
config.transient_suppression.enabled = false;
if (dgc) {
ec->params.webrtc.agc = false;
config.gain_controller1.enabled = true;
if (mobile)
config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kFixedDigital;
else
config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveDigital;
} else if (agc) {
ec->params.webrtc.agc = true;
config.gain_controller1.enabled = true;
config.gain_controller1.mode = webrtc::AudioProcessing::Config::GainController1::kAdaptiveAnalog;
config.gain_controller1.analog_level_minimum = 0;
config.gain_controller1.analog_level_maximum = WEBRTC_AGC_MAX_VOLUME;
apm->gain_control()->Enable(true);
}
if (vad)
config.voice_detection.enabled = true;
else
config.voice_detection.enabled = false;
if (post_amp) {
config.gain_controller2.enabled = true;
config.gain_controller2.fixed_digital.gain_db = (float)post_amp_gain;
config.gain_controller2.adaptive_digital.enabled = false;
} else
config.gain_controller2.enabled = false;
apm->voice_detection()->Enable(true);
ec->params.webrtc.apm = apm;
ec->params.webrtc.rec_ss = *rec_ss;
@ -295,8 +485,6 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
*nframes = ec->params.webrtc.blocksize;
ec->params.webrtc.first = true;
apm->ApplyConfig(config);
for (i = 0; i < rec_ss->channels; i++)
ec->params.webrtc.rec_buffer[i] = pa_xnew(float, *nframes);
for (i = 0; i < play_ss->channels; i++)
@ -308,7 +496,10 @@ bool pa_webrtc_ec_init(pa_core *c, pa_echo_canceller *ec,
fail:
if (ma)
pa_modargs_free(ma);
if (apm)
if (ec->params.webrtc.trace_callback) {
webrtc::Trace::ReturnTrace();
delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
} if (apm)
delete apm;
return false;
@ -324,6 +515,12 @@ void pa_webrtc_ec_play(pa_echo_canceller *ec, const uint8_t *play) {
pa_deinterleave(play, (void **) buf, ss->channels, pa_sample_size(ss), n);
pa_assert_se(apm->ProcessReverseStream(buf, config, config, buf) == webrtc::AudioProcessing::kNoError);
/* FIXME: If ProcessReverseStream() makes any changes to the audio, such as
* applying intelligibility enhancement, those changes don't have any
* effect. This function is called at the source side, but the processing
* would have to be done in the sink to be able to feed the processed audio
* to speakers. */
}
void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out) {
@ -341,7 +538,7 @@ void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out
if (ec->params.webrtc.agc) {
pa_volume_t v = pa_echo_canceller_get_capture_volume(ec);
old_volume = webrtc_volume_from_pa(v);
apm->set_stream_analog_level(old_volume);
apm->gain_control()->set_stream_analog_level(old_volume);
}
apm->set_stream_delay_ms(0);
@ -356,7 +553,7 @@ void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out
ec->params.webrtc.first = false;
new_volume = ec->params.webrtc.agc_start_volume;
} else {
new_volume = apm->recommended_stream_analog_level();
new_volume = apm->gain_control()->stream_analog_level();
}
if (old_volume != new_volume)
@ -367,6 +564,9 @@ void pa_webrtc_ec_record(pa_echo_canceller *ec, const uint8_t *rec, uint8_t *out
}
void pa_webrtc_ec_set_drift(pa_echo_canceller *ec, float drift) {
webrtc::AudioProcessing *apm = (webrtc::AudioProcessing*)ec->params.webrtc.apm;
apm->echo_cancellation()->set_stream_drift_samples(drift * ec->params.webrtc.blocksize);
}
void pa_webrtc_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *play, uint8_t *out) {
@ -377,6 +577,11 @@ void pa_webrtc_ec_run(pa_echo_canceller *ec, const uint8_t *rec, const uint8_t *
void pa_webrtc_ec_done(pa_echo_canceller *ec) {
int i;
if (ec->params.webrtc.trace_callback) {
webrtc::Trace::ReturnTrace();
delete ((PaWebrtcTraceCallback *) ec->params.webrtc.trace_callback);
}
if (ec->params.webrtc.apm) {
delete (webrtc::AudioProcessing*)ec->params.webrtc.apm;
ec->params.webrtc.apm = NULL;

View file

@ -8,12 +8,15 @@ all_modules = [
[ 'module-always-sink', 'module-always-sink.c' ],
[ 'module-always-source', 'module-always-source.c' ],
[ 'module-augment-properties', 'module-augment-properties.c' ],
# [ 'module-bonjour-publish', 'macosx/module-bonjour-publish.c' ],
[ 'module-card-restore', 'module-card-restore.c' ],
[ 'module-cli', 'module-cli.c', [], [], [], libcli ],
[ 'module-cli-protocol-tcp', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_CLI', '-DUSE_TCP_SOCKETS'], [], libprotocol_cli ],
[ 'module-cli-protocol-unix', 'module-protocol-stub.c', [], ['-DUSE_PROTOCOL_CLI', '-DUSE_UNIX_SOCKETS'], [], libprotocol_cli ],
[ 'module-combine', 'module-combine.c' ],
[ 'module-combine-sink', 'module-combine-sink.c', [], [], [libatomic_ops_dep] ],
[ 'module-combine-sink', 'module-combine-sink.c' ],
# [ 'module-coreaudio-detect', 'macosx/module-coreaudio-detect.c' ],
# [ 'module-coreaudio-device', 'macosx/module-coreaudio-device.c' ],
[ 'module-default-device-restore', 'module-default-device-restore.c', [], [], [], libprotocol_native ],
[ 'module-detect', 'module-detect.c' ],
[ 'module-device-manager', 'module-device-manager.c', [], [], [], libprotocol_native ],
@ -70,21 +73,11 @@ endif
if host_machine.system() != 'windows'
all_modules += [
[ 'module-rtp-recv', 'rtp/module-rtp-recv.c', [], [], [libatomic_ops_dep], librtp ],
[ 'module-rtp-recv', 'rtp/module-rtp-recv.c', [], [], [], librtp ],
[ 'module-rtp-send', 'rtp/module-rtp-send.c' , [], [], [], librtp ],
]
endif
if host_machine.system() == 'darwin'
bonjour_dep = dependency('appleframeworks', modules : ['CoreFoundation'])
coreaudio_dep = dependency('appleframeworks', modules : ['CoreAudio'])
all_modules += [
[ 'module-bonjour-publish', 'macosx/module-bonjour-publish.c', [], [], [bonjour_dep] ],
[ 'module-coreaudio-detect', 'macosx/module-coreaudio-detect.c', [], [], [coreaudio_dep] ],
[ 'module-coreaudio-device', 'macosx/module-coreaudio-device.c', [], [], [coreaudio_dep] ],
]
endif
# Modules enabled by headers
if cc.has_header('linux/input.h')
@ -137,6 +130,7 @@ endif
if dbus_dep.found()
all_modules += [
[ 'module-console-kit', 'module-console-kit.c', [], [], [dbus_dep] ],
[ 'module-dbus-protocol',
[ 'dbus/iface-card.c', 'dbus/iface-card.h',
'dbus/iface-card-profile.c', 'dbus/iface-card-profile.h',
@ -153,12 +147,6 @@ if dbus_dep.found()
[], [], [dbus_dep] ],
[ 'module-rygel-media-server', 'module-rygel-media-server.c', [], [], [dbus_dep], libprotocol_http ],
]
if not get_option('consolekit').disabled()
all_modules += [
[ 'module-console-kit', 'module-console-kit.c', [], [], [dbus_dep] ],
]
endif
endif
if fftw_dep.found()
@ -250,7 +238,7 @@ module_echo_cancel_sources = [
]
module_echo_cancel_orc_sources = []
module_echo_cancel_flags = []
module_echo_cancel_deps = [libatomic_ops_dep]
module_echo_cancel_deps = []
module_echo_cancel_libs = []
if get_option('adrian-aec')
@ -305,18 +293,6 @@ all_modules += [
# FIXME: meson doesn't support multiple RPATH arguments currently
rpath_dirs = join_paths(privlibdir) + ':' + join_paths(modlibexecdir)
if host_machine.system() != 'windows' and host_machine.system() != 'darwin'
no_undefined_args = ['-Wl,--no-undefined']
else
no_undefined_args = []
endif
module_suffix = []
if host_machine.system() == 'darwin'
# meson defaults to dylib but ltdl expects so
module_suffix = 'so'
endif
foreach m : all_modules
name = m[0]
sources = m[1]
@ -334,9 +310,8 @@ foreach m : all_modules
install_rpath : rpath_dirs,
install_dir : modlibexecdir,
dependencies : [thread_dep, libpulse_dep, libpulsecommon_dep, libpulsecore_dep, libintl_dep, platform_dep, platform_socket_dep] + extra_deps,
link_args : [nodelete_link_args, no_undefined_args],
link_args : [nodelete_link_args, '-Wl,--no-undefined' ],
link_with : extra_libs,
name_prefix : '',
name_suffix : module_suffix,
implicit_include_directories : false)
endforeach

View file

@ -23,7 +23,6 @@
#include <stdio.h>
#include <errno.h>
#include <math.h>
#include <pulse/rtclock.h>
#include <pulse/timeval.h>
@ -179,7 +178,7 @@ struct userdata {
#ifdef USE_SMOOTHER_2
pa_smoother_2 *smoother;
#else
pa_smoother *smoother;
pa_smoother *smoother;
#endif
uint64_t counter;
@ -240,7 +239,7 @@ static uint32_t rate_controller(
/* Choose the rate that is nearer to base_rate */
new_rate = new_rate_2;
if (fabs(new_rate_1 - base_rate) < fabs(new_rate_2 - base_rate))
if (abs(new_rate_1 - base_rate) < abs(new_rate_2 - base_rate))
new_rate = new_rate_1;
return (uint32_t)(new_rate + 0.5);
@ -1711,6 +1710,9 @@ int pa__init(pa_module*m) {
PA_IDXSET_FOREACH(o, u->outputs, idx)
output_verify(o);
if (u->adjust_time > 0)
u->time_event = pa_core_rttime_new(m->core, pa_rtclock_now() + u->adjust_time, time_callback, u);
pa_modargs_free(ma);
return 0;
@ -1733,9 +1735,6 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
if (u->sink && PA_SINK_IS_LINKED(u->sink->state))
pa_sink_suspend(u->sink, true, PA_SUSPEND_UNAVAILABLE);
pa_strlist_free(u->unlinked_slaves);
if (u->sink_put_slot)

View file

@ -100,7 +100,7 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void*
/* No default sink, nothing to move away, just set the new default */
if (!c->default_sink) {
pa_core_set_policy_default_sink(c, sink->name);
pa_core_set_configured_default_sink(c, sink->name);
return PA_HOOK_OK;
}
@ -116,7 +116,7 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void*
}
/* Actually do the switch to the new sink */
pa_core_set_policy_default_sink(c, sink->name);
pa_core_set_configured_default_sink(c, sink->name);
return PA_HOOK_OK;
}
@ -160,7 +160,7 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
/* No default source, nothing to move away, just set the new default */
if (!c->default_source) {
pa_core_set_policy_default_source(c, source->name);
pa_core_set_configured_default_source(c, source->name);
return PA_HOOK_OK;
}
@ -176,7 +176,7 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
}
/* Actually do the switch to the new source */
pa_core_set_policy_default_source(c, source->name);
pa_core_set_configured_default_source(c, source->name);
return PA_HOOK_OK;
}

View file

@ -253,14 +253,9 @@ static void thread_func(void *userdata) {
pa_log_error("Could not write data into the stream ... ret = %i", ret);
u->thread_mainloop_api->quit(u->thread_mainloop_api, TUNNEL_THREAD_FAILED_MAINLOOP);
}
}
}
/* Run the rtpoll to process messages that other modules (module-combine-sink,
* module-loopback and module-rtp-recv) may have placed in the queue. */
pa_rtpoll_set_timer_relative(u->rtpoll, 0);
if (pa_rtpoll_run(u->rtpoll) < 0)
goto fail;
}
fail:
/* send a message to the ctl thread to ask it to either terminate us, or
@ -701,13 +696,13 @@ static int do_init(pa_module *m) {
u->msg = pa_msgobject_new(tunnel_msg);
u->msg->parent.process_msg = tunnel_process_msg;
/* The rtpoll created here is only run for the sake of module-combine-sink. It must
* exist to avoid crashes when module-tunnel-sink-new is used together with
* module-loopback or module-combine-sink. Both modules base their asyncmsgq on the
* rtpoll provided by the sink. module-loopback and combine-sink only work because
* they call pa_asyncmsq_process_one() themselves. module-combine-sink does this
* however only for the audio_inq, so without running the rtpoll, messages placed
* in control_inq would never be executed. */
/* The rtpoll created here is never run. It is only necessary to avoid crashes
* when module-tunnel-sink-new is used together with module-loopback or
* module-combine-sink. Both modules base their asyncmsq on the rtpoll provided
* by the sink. module-loopback and combine-sink only work because they call
* pa_asyncmsq_process_one() themselves. module_rtp_recv also uses the rtpoll,
* but never calls pa_asyncmsq_process_one(), so it will not work in combination
* with module-tunnel-sink-new. */
u->rtpoll = pa_rtpoll_new();
default_sink_name = pa_sprintf_malloc("tunnel-sink-new.%s", remote_server);

Some files were not shown because too many files have changed in this diff Show more