| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
The adrian module was using home-brewed endianness conversion instead of
the appropriate mactos, and speex assumed a little-endian host. This
fixes both of these.
|
| |
|
|
|
|
|
| |
Add missing files to module_echo_cancel_la_SOURCES
Add Adrian license file to EXTRA_DIST
|
|
|
|
|
| |
While the sink or source is in the suspended state, disable the timer
callback because we are not doing any echo canceling then.
|
|
|
|
|
| |
Make the echo canceler drift up to 1ms now that things are more accurate.
Add 10 samples of headroom to allow for timing inaccuracies.
|
|
|
|
|
| |
Rework the code to align capture and playback samples so that we can keep more
accurate timings.
|
|
|
|
|
| |
Marks the recording and playback streams as const in the
pa_echo_canceller->run method for clarity.
|
|
|
|
|
|
| |
Since all algorithms will need to specify a block size (the amount of
data to be processed together), we make this a common parameter and have
the implementation set it at initialisation time.
|
|
|
|
|
| |
This adds an "aec_method" module argument to allow us to select the AEC
implementation to use.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds Andre Adrian's AEC implementation from his intercom project
(http://andreadrian.de/intercom/) as an alternative to the speex echo
cancellation routines. Since the implementation was in C++ and not in
the form of a library, I have converted the code to C and made a local
copy of the implementation.
The implementation actually works on floating point data, so we can
tweak it to work with both integer and floating point samples (currently
we just use S16LE).
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since the source and sink specification will need to be determined by
the AEC algorithm (can it handle multi-channel audio, does it work with
a fixed sample rate, etc.), we negotiate these using inout parameters at
initialisation time.
There is opportunity to make the sink-handling more elegant. Since the
sink data isn't used for playback (just processing), we could pass
through the data as-is and resample to the required spec before using in
the cancellation algorithm. This isn't too important immediately, but
would be nice to have.
|
|
|
|
|
| |
This allows us to tweak module parameters for whichever AEC module is
chosen.
|
|
|
|
|
| |
This splits out the echo-cancelling core from the PA-specific bits to
allow us to plug in other echo-cancellation engines.
|
|
|
|
| |
This will make splitting out the canceller parts cleaner.
|
|
|
|
|
|
|
| |
The speex echo canceler prefers a power of 2 for the frame size. Round down the
ideal frame_size to the nearest power of two. This makes sure we don't create
more than the requested frame_size_ms latency while still providing a power of 2
to the speex echo canceller.
|
| |
|
|
|
|
|
|
| |
Try to keep the drift between source and sink within 4ms now that we have more
accurate timings.
Don't force a resync on latency changes but let the drift code handle it.
|
|
|
|
|
| |
Tag the source and sink with the phone media roles so that they automatially
connect to phone streams such as Empathy when using the intended-rols module.
|
|
|
|
|
| |
Take into account the delay between taking the snapshot from the source and the
sink. Improves the quality of the timings.
|
|
|
|
|
|
| |
Make a new echo-cancel module that exposes a new sink and source. All data sent
to the sink is matched against the data captured from the source and
echo-canceled using the speex echo canceler.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Vala uses the name of the *.vapi file to determine the libraries to link
against. Since the pa_glib_mainloop_*() functions are in a separate
library (libpulse-mainloop-glib.so) the corresponding objects in the
Vala bindings have to be in a separate *.vapi file.
If you are compiling an app without the GLib integration you could use:
$ valac --pkg=libpulse test.vala
but if you do use GLib you can use:
$ valac --pkg=libpulse-mainloop-glib test.vala
(libpulse is a dep of the libpulse-mainloop-glib so no need to specify
it explicitly)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. PA uses Vala's "Posix" package (see line 23 of libpulse.vapi).
These dependencies have to be declared in the *.deps file.
2. Fix obvious copy/paste error.
3. Rename the parameter to match the C function. This simplifies
understanding what this parameter means.
4. According to the official documentation the "dev" parameter
for playback/capture streams on connection may be NULL and this
is the default. Change the method definition accordingly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in UIs
This value is not a technical upper limit, it's just a 'sensible'
value that is not crazy high, but also allows software amplification
above 0dB (aka 100%) for very quiet audio sources.
We recommend that a comprehensive volume control UI should allow
users to set volumes up to this limit, although of course should
deal gracefully if the user has set the volume even higher than this
without resulting in a feedback loop that effectively limits the
upper volume.
The value chosen is +11dB. This was selected somewhat subjectively
and is very similar to the current 150% that gnome-volume-control
uses (which is ~+10.57dB).
On the plus side, we now recommend that everyone allows
'Volumes up to 11' which is pretty awesome.
http://en.wikipedia.org/wiki/Up_to_eleven
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-April/006945.html
https://tango.0pointer.de/pipermail/pulseaudio-discuss/2010-April/006950.html
|
|
|
|
| |
Also fix a left over reference to HAL in default.pa
|
|
|
|
|
| |
It isn't necessary anymore with the new algorithm. The slow adjust of the
smoother was even detrimental to the accuracy of the rate estimate.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The same logic is applied to the sample rate adjustments in module-rtp-recv,
module-loopback and module-combine:
- Each time an adjustment is made, the new rate can differ at most 2‰ from the
old rate. Such a step is equal to 3.5 cents (a cent is 1/100th of a
semitone) and as 5 cents is generally considered the smallest observable
difference in pitch, this results in inaudible adjustments.
- The sample rate of the stream can only differ from the rate of the
corresponding sink by 25%. As these adjustments are meant to account for
very small clock drifts, any large deviation from the base rate suggests
something is seriously wrong.
- If the calculated rate is within 20Hz of the base rate, set it to the base
rate. This saves CPU because no resampling is necessary.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This prevents the smoother attached to the stream clock from being
updated while the stream is corked, which in turn ensures that once
corking is completed, pa_stream_get_time() always returns the same value
until the stream is uncorked - i.e., the clock does not advance when the
client believes that it will not.
The actual call to pa_smoother_put() happens on things like stream
suspend/unsuspend, which trigger timing updates. This changes the
smoother coefficients, which means that a call to pa_smoother_get() for
the same value of 'x' can return different values before and after a
timing update.
|
|
|
|
|
|
|
|
|
| |
If many small blocks are in queue, handle_seek is being called
for every one of them, sometimes causing a rewind. Delay the
call until all blocks are handled, then call handle_seek only
once.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
|
|
|
|
|
|
|
|
| |
Allow a message in the queue to perform both a seek and a post data.
For clients that do not use PA_SEEK_RELATIVE (e g gstreamer), this
cuts the message count - and sometimes even the rewinds - in half.
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
|
| |
|
|
|
|
| |
Spotted by palmerdabbelt via #894
|
|
|
|
|
| |
When logging a suppression message do so on the same log level as the
suppressed messages.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously this argument passed to configure only worked if --disable-hal and
--disable-bluez was also passed which wasn't immediately obvious to the
untrained compiler.
This change simply makes --disable-dbus disable the other two as well
and errors out of specific, incompatible --enable/--disable flags
are provided.
The summary table is also adjusted and intended to try and show the
dependency relationship a little.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Users have often come to me when their build doesn't work and typically
this is when they do not have dev headers for DBUS and udev installed
when building. Put in some specific warnings about these optional,
but critical, elements.
This will likely display this message on platforms where they are not
available, so patches welcome to hide them in a semi-intelligent way.
|
|
|
|
|
|
|
|
| |
Therefore, we must reflect this in the default.pa. Several users
have reported an error with consolekit when starting a self-built PA
due to the default config not working properly. This works around the
issue but we should include a warning on configure about the lack of
DBUS and udev support as this is a common mistake.
|
|
|
|
|
|
| |
These functions are used in OSS programs where the "flags" parameter for
open() is not a build-time constant and the build has _FORTIFY_SOURCE
enabled.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Based on comments from Arun Raghavan, make clear that we're referring
to the libspeex API documentation for the speex- options. Also correct
the quality range (was incorrectly 0..9 but is 0..10 now) and clean up
the line length.
Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
|
|
|
|
| |
This prevented to use pacat --file-format option correctly
|
|
|
|
|
|
|
|
|
| |
In the file src/pulsecore/random.c
I found that the log information "Failed to get proper entropy. Falling
back to seeding with current time." would never be printed.
This change corrects the issue.
|
|
|
|
|
|
|
|
|
|
| |
A Debian user seemed confused that the man page for pulse-daemon.conf
does not refer to the libspeex API Resampler for use in PulseAudio's
*-src. Fix it by explicitly mentioning speex.
(http://bugs.debian.org/541206)
Signed-off-by: Daniel T Chen <crimsun@ubuntu.com>
|
| |
|