Peter Meerwald | 24 Jul 09:49 2014
Picon

[PATCH] sconv: Use optimized conversion function for both directions

for example, the conversion function for
convert_from_float32ne(PA_SAMPLE_S16LE) can also be used for
convert_to_s16ne(PA_SAMPLE_FLOAT32LE)

Signed-off-by: Peter Meerwald <pmeerw <at> pmeerw.net>
---
 src/pulsecore/sconv_neon.c |    2 ++
 src/pulsecore/sconv_sse.c  |    3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/pulsecore/sconv_neon.c b/src/pulsecore/sconv_neon.c
index 6c2a2b3..8e6a23c 100644
--- a/src/pulsecore/sconv_neon.c
+++ b/src/pulsecore/sconv_neon.c
 <at>  <at>  -89,4 +89,6  <at>  <at>  void pa_convert_func_init_neon(pa_cpu_arm_flag_t flags) {
     pa_log_info("Initialising ARM NEON optimized conversions.");
     pa_set_convert_from_float32ne_function(PA_SAMPLE_S16LE, (pa_convert_func_t) pa_sconv_s16le_from_f32ne_neon);
     pa_set_convert_to_float32ne_function(PA_SAMPLE_S16LE, (pa_convert_func_t) pa_sconv_s16le_to_f32ne_neon);
+    pa_set_convert_from_s16ne_function(PA_SAMPLE_FLOAT32LE, (pa_convert_func_t) pa_sconv_s16le_to_f32ne_neon);
+    pa_set_convert_to_s16ne_function(PA_SAMPLE_FLOAT32LE, (pa_convert_func_t) pa_sconv_s16le_from_f32ne_neon);
 }
diff --git a/src/pulsecore/sconv_sse.c b/src/pulsecore/sconv_sse.c
index 10943ba..9cfb9d9 100644
--- a/src/pulsecore/sconv_sse.c
+++ b/src/pulsecore/sconv_sse.c
 <at>  <at>  -168,10 +168,11  <at>  <at>  void pa_convert_func_init_sse(pa_cpu_x86_flag_t flags) {
     if (flags & PA_CPU_X86_SSE2) {
         pa_log_info("Initialising SSE2 optimized conversions.");
         pa_set_convert_from_float32ne_function(PA_SAMPLE_S16LE, (pa_convert_func_t) pa_sconv_s16le_from_f32ne_sse2);
-
(Continue reading)

JoonCheol Park | 22 Jul 09:50 2014
Picon

best benchmark tool for pulseaudio ?

Hello,

I'd like to optimize pulseaudio settings on my system (arm based).
and I'm planning to try test with several change settings to find best settings on my system.
To do this, I want to know what is the best way to measure the performance of pulseaudio for each settings. Especially I'd like to check the cpu consumption or latency.

I tried to googling for this and reviewed code briefly to find some unit tests for performance checking..
* oprofile - looks profile each function in point of developer view
* top or ptop or perf top - difficult to check exact start/end time of pulse
* cpu-test.c - looks only for resmapling performance

I couldn't find proper ways yet. but I believe that there's some official or usual tools which pulseaudio(or generic linux audio system) experts use to do benchmark or optimize settings on specific system.
If anybody can recommend something good tools or documents for this purpose, it would be really helpful for me.

Regards,
JC
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
David Schlosser | 21 Jul 12:17 2014
Picon

Pulseaudio only recognises 3 of my 4 cards after reboot

Hi

I'm new here & to pulseaudio, so I hope this is the right place for asking about my problem. I'm using Pulseaudio v4.0

I have an internal sound card and also 3 USB DACs connected - When I boot, all 4 of these devices are listed by 'aplay -l', but, Pulseaudio as reported by  'pacmd list-cards' only shows 3 cards. 

However, after I then run 'alsa force-reload', and re-run pacmd list-cards, it will correctly show all four devices until I next reboot.

What's happening here & how do I ensure Pulseaudio finds all 4 cards on a reboot.

thanks, David
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
Lukas K | 20 Jul 20:33 2014
Picon

[PATCH] Add checkbutton for disabling volume meters

Add a checkbutton for disabling volume meters because of high CPU
utilisation when updating them
---
 src/mainwindow.cc          |  52 +++++++++++-
 src/mainwindow.h           |   2 +
 src/minimalstreamwidget.cc |  19 ++++-
 src/minimalstreamwidget.h  |   6 ++
 src/pavucontrol.glade      | 195 ++++++++++++++++++++++++++-------------------
 src/streamwidget.cc        |   1 -
 src/streamwidget.h         |   1 -
 7 files changed, 190 insertions(+), 86 deletions(-)

diff --git a/src/mainwindow.cc b/src/mainwindow.cc
index 5a42318..7458039 100644
--- a/src/mainwindow.cc
+++ b/src/mainwindow.cc
 <at>  <at>  -93,6 +93,7  <at>  <at>  MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
     x->get_widget("sinkTypeComboBox", sinkTypeComboBox);
     x->get_widget("sourceTypeComboBox", sourceTypeComboBox);
     x->get_widget("notebook", notebook);
+    x->get_widget("showVolumeMetersCheckButton", showVolumeMetersCheckButton);

     cardsVBox->set_reallocate_redraws(true);
     sourcesVBox->set_reallocate_redraws(true);
 <at>  <at>  -109,6 +110,8  <at>  <at>  MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
     sourceOutputTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onSourceOutputTypeComboBoxChanged));
     sinkTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onSinkTypeComboBoxChanged));
     sourceTypeComboBox->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onSourceTypeComboBoxChanged));
+    showVolumeMetersCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onShowVolumeMetersCheckButtonToggled));
+

     GKeyFile* config = g_key_file_new();
     g_assert(config);
 <at>  <at>  -120,6 +123,10  <at>  <at>  MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>
     if (g_key_file_load_from_file (config, m_config_filename, flags, &err)) {
         int width  = g_key_file_get_integer(config, "window", "width", NULL);
         int height = g_key_file_get_integer(config, "window", "height", NULL);
+        /* When upgrading from a previous version, set showVolumeMeters to TRUE (default from glade file), so
users don't complain about missing volume meters. */
+        if(g_key_file_has_key(config, "window", "showVolumeMeters", NULL)) {
+            showVolumeMetersCheckButton->set_active(g_key_file_get_boolean(config, "window",
"showVolumeMeters", NULL));
+        }

         int default_width, default_height;
         get_default_size(default_width, default_height);
 <at>  <at>  -202,6 +209,7  <at>  <at>  MainWindow::~MainWindow() {
     get_size(width, height);
     g_key_file_set_integer(config, "window", "width", width);
     g_key_file_set_integer(config, "window", "height", height);
+    g_key_file_set_integer(config, "window", "showVolumeMeters", showVolumeMetersCheckButton->get_active());

     gsize filelen;
     GError *err = NULL;
 <at>  <at>  -421,6 +429,7  <at>  <at>  bool MainWindow::updateSink(const pa_sink_info &info) {
         is_new = true;

         w->setBaseVolume(info.base_volume);
+        w->setVolumeMeterVisible(showVolumeMetersCheckButton->get_active());
     }

     w->updating = true;
 <at>  <at>  -482,6 +491,7  <at>  <at>  static void suspended_callback(pa_stream *s, void *userdata) {
 }

 static void read_callback(pa_stream *s, size_t length, void *userdata) {
+    printf("read from stream %p\n", s);
     MainWindow *w = static_cast<MainWindow*>(userdata);
     const void *data;
     double v;
 <at>  <at>  -535,7 +545,8  <at>  <at>  pa_stream* MainWindow::createMonitorStreamForSource(uint32_t source_idx, uint32_
     pa_stream_set_suspended_callback(s, suspended_callback, this);

     flags = (pa_stream_flags_t) (PA_STREAM_DONT_MOVE | PA_STREAM_PEAK_DETECT |
PA_STREAM_ADJUST_LATENCY |
-                                 (suspend ? PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND : PA_STREAM_NOFLAGS));
+                                 (suspend ? PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND : PA_STREAM_NOFLAGS) |
+                                (!showVolumeMetersCheckButton->get_active() ? PA_STREAM_START_CORKED : PA_STREAM_NOFLAGS));

     if (pa_stream_connect_record(s, t, &attr, flags) < 0) {
         show_error(_("Failed to connect monitoring stream"));
 <at>  <at>  -574,9 +585,10  <at>  <at>  void MainWindow::updateSource(const pa_source_info &info) {
         is_new = true;

         w->setBaseVolume(info.base_volume);
+        w->setVolumeMeterVisible(showVolumeMetersCheckButton->get_active());

         if (pa_context_get_server_protocol_version(get_context()) >= 13)
-            createMonitorStreamForSource(info.index, -1, !!(info.flags & PA_SOURCE_NETWORK));
+            w->peak = createMonitorStreamForSource(info.index, -1, !!(info.flags & PA_SOURCE_NETWORK));
     }

     w->updating = true;
 <at>  <at>  -689,6 +701,7  <at>  <at>  void MainWindow::updateSinkInput(const pa_sink_input_info &info) {
         w->index = info.index;
         w->clientIndex = info.client;
         is_new = true;
+        w->setVolumeMeterVisible(showVolumeMetersCheckButton->get_active());

         if (pa_context_get_server_protocol_version(get_context()) >= 13)
             createMonitorStreamForSinkInput(w, info.sink);
 <at>  <at>  -746,6 +759,7  <at>  <at>  void MainWindow::updateSourceOutput(const pa_source_output_info &info) {
         w->index = info.index;
         w->clientIndex = info.client;
         is_new = true;
+        w->setVolumeMeterVisible(showVolumeMetersCheckButton->get_active());
     }

     w->updating = true;
 <at>  <at>  -1220,3 +1234,37  <at>  <at>  void MainWindow::onSourceOutputTypeComboBoxChanged() {

     updateDeviceVisibility();
 }
+
+
+void MainWindow::onShowVolumeMetersCheckButtonToggled() {
+    bool state = showVolumeMetersCheckButton->get_active();
+    printf("toggled %d\n", state);
+    for (std::map<uint32_t, SinkWidget*>::iterator it = sinkWidgets.begin() ; it != sinkWidgets.end();
it++) {
+        SinkWidget *sw = it->second;
+        if(sw->peak) {
+            pa_stream_cork(sw->peak, (int)!state, NULL, NULL);
+        }
+        sw->setVolumeMeterVisible(state);
+    }
+    for (std::map<uint32_t, SourceWidget*>::iterator it = sourceWidgets.begin() ; it !=
sourceWidgets.end(); it++) {
+        SourceWidget *sw = it->second;
+        if(sw->peak) {
+            pa_stream_cork(sw->peak, (int)!state, NULL, NULL);
+        }
+        sw->setVolumeMeterVisible(state);
+    }
+    for (std::map<uint32_t, SinkInputWidget*>::iterator it = sinkInputWidgets.begin() ; it !=
sinkInputWidgets.end(); it++) {
+        SinkInputWidget *sw = it->second;
+        if(sw->peak) {
+            pa_stream_cork(sw->peak, (int)!state, NULL, NULL);
+        }
+        sw->setVolumeMeterVisible(state);
+    }
+    for (std::map<uint32_t, SourceOutputWidget*>::iterator it = sourceOutputWidgets.begin() ; it !=
sourceOutputWidgets.end(); it++) {
+        SourceOutputWidget *sw = it->second;
+        if(sw->peak) {
+            pa_stream_cork(sw->peak, (int)!state, NULL, NULL);
+        }
+        sw->setVolumeMeterVisible(state);
+    }
+}
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 5c501f7..30e1ad0 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
 <at>  <at>  -68,6 +68,7  <at>  <at>  public:
     Gtk::VBox *streamsVBox, *recsVBox, *sinksVBox, *sourcesVBox, *cardsVBox;
     Gtk::Label *noStreamsLabel, *noRecsLabel, *noSinksLabel, *noSourcesLabel, *noCardsLabel, *connectingLabel;
     Gtk::ComboBox *sinkInputTypeComboBox, *sourceOutputTypeComboBox, *sinkTypeComboBox, *sourceTypeComboBox;
+    Gtk::CheckButton *showVolumeMetersCheckButton;

     std::map<uint32_t, CardWidget*> cardWidgets;
     std::map<uint32_t, SinkWidget*> sinkWidgets;
 <at>  <at>  -85,6 +86,7  <at>  <at>  public:
     virtual void onSourceOutputTypeComboBoxChanged();
     virtual void onSinkTypeComboBoxChanged();
     virtual void onSourceTypeComboBoxChanged();
+    virtual void onShowVolumeMetersCheckButtonToggled();

     void setConnectionState(gboolean connected);
     void updateDeviceVisibility();
diff --git a/src/minimalstreamwidget.cc b/src/minimalstreamwidget.cc
index 562739d..d1f26e1 100644
--- a/src/minimalstreamwidget.cc
+++ b/src/minimalstreamwidget.cc
 <at>  <at>  -29,8 +29,10  <at>  <at>  MinimalStreamWidget::MinimalStreamWidget(BaseObjectType* cobject, const Glib::Re
     Gtk::VBox(cobject),
     peakProgressBar(),
     lastPeak(0),
+    peak(NULL),
     updating(false),
-    volumeMeterEnabled(false) {
+    volumeMeterEnabled(false),
+    volumeMeterVisible(true) {

     x->get_widget("channelsVBox", channelsVBox);
     x->get_widget("nameLabel", nameLabel);
 <at>  <at>  -69,6 +71,19  <at>  <at>  void MinimalStreamWidget::enableVolumeMeter() {
         return;

     volumeMeterEnabled = true;
-    peakProgressBar.show();
+    if(volumeMeterVisible) {
+        peakProgressBar.show();
+    }
 }

+void MinimalStreamWidget::setVolumeMeterVisible(bool v) {
+    volumeMeterVisible=v;
+    if(v) {
+        if(volumeMeterEnabled) {
+            peakProgressBar.show();
+        }
+    }
+    else {
+        peakProgressBar.hide();
+    }
+}
diff --git a/src/minimalstreamwidget.h b/src/minimalstreamwidget.h
index 7d5ee24..8bfc5bc 100644
--- a/src/minimalstreamwidget.h
+++ b/src/minimalstreamwidget.h
 <at>  <at>  -32,6 +32,7  <at>  <at>  public:
     Gtk::Image *iconImage;
     Gtk::ProgressBar peakProgressBar;
     double lastPeak;
+    pa_stream *peak;

     bool updating;

 <at>  <at>  -41,6 +42,11  <at>  <at>  public:
     bool volumeMeterEnabled;
     void enableVolumeMeter();
     void updatePeak(double v);
+    void setVolumeMeterVisible(bool v);
+
+private :
+    bool volumeMeterVisible;
+
 };

 #endif
diff --git a/src/pavucontrol.glade b/src/pavucontrol.glade
index 5116632..725a1dc 100644
--- a/src/pavucontrol.glade
+++ b/src/pavucontrol.glade
 <at>  <at>  -7,6 +7,66  <at>  <at> 
     <property name="value">44.2408370972</property>
     <property name="step_increment">5</property>
   </object>
+  <object class="GtkWindow" id="channelWindow">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">window2</property>
+    <child>
+      <object class="GtkHBox" id="channelWidget">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">6</property>
+        <child>
+          <object class="GtkLabel" id="channelLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">&lt;b&gt;left-front&lt;/b&gt;</property>
+            <property name="use_markup">True</property>
+            <property name="width_chars">15</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHScale" id="volumeScale">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="adjustment">adjustment1</property>
+            <property name="digits">0</property>
+            <property name="draw_value">False</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkLabel" id="volumeLabel">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">1</property>
+            <property name="yalign">0</property>
+            <property name="xpad">8</property>
+            <property name="label" translatable="yes">&lt;small&gt;50%&lt;/small&gt;</property>
+            <property name="use_markup">True</property>
+            <property name="justify">right</property>
+            <property name="width_chars">9</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
   <object class="GtkWindow" id="cardWindow">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
 <at>  <at>  -137,66 +197,6  <at>  <at> 
       </object>
     </child>
   </object>
-  <object class="GtkWindow" id="channelWindow">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="title" translatable="yes">window2</property>
-    <child>
-      <object class="GtkHBox" id="channelWidget">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="spacing">6</property>
-        <child>
-          <object class="GtkLabel" id="channelLabel">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">0</property>
-            <property name="yalign">0</property>
-            <property name="label" translatable="yes">&lt;b&gt;left-front&lt;/b&gt;</property>
-            <property name="use_markup">True</property>
-            <property name="width_chars">15</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkHScale" id="volumeScale">
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="adjustment">adjustment1</property>
-            <property name="digits">0</property>
-            <property name="draw_value">False</property>
-          </object>
-          <packing>
-            <property name="expand">True</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="volumeLabel">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="xalign">1</property>
-            <property name="yalign">0</property>
-            <property name="xpad">8</property>
-            <property name="label" translatable="yes">&lt;small&gt;50%&lt;/small&gt;</property>
-            <property name="use_markup">True</property>
-            <property name="justify">right</property>
-            <property name="width_chars">9</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
   <object class="GtkWindow" id="deviceWindow">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
 <at>  <at>  -278,7 +278,6  <at>  <at> 
                         <property name="spacing">3</property>
                         <child>
                           <object class="GtkToggleButton" id="muteToggleButton">
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
 <at>  <at>  -301,7 +300,6  <at>  <at> 
                         </child>
                         <child>
                           <object class="GtkToggleButton" id="lockToggleButton">
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
 <at>  <at>  -325,7 +323,6  <at>  <at> 
                         </child>
                         <child>
                           <object class="GtkToggleButton" id="defaultToggleButton">
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
 <at>  <at>  -430,7 +427,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatPCM">
                                 <property name="label" translatable="yes">PCM</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="sensitive">False</property>
                                 <property name="can_focus">True</property>
 <at>  <at>  -442,7 +438,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatAC3">
                                 <property name="label" translatable="yes">AC3</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
 <at>  <at>  -456,7 +451,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatDTS">
                                 <property name="label" translatable="yes">DTS</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
 <at>  <at>  -470,7 +464,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatEAC3">
                                 <property name="label" translatable="yes">EAC3</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
 <at>  <at>  -484,7 +477,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatMPEG">
                                 <property name="label" translatable="yes">MPEG</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
 <at>  <at>  -500,7 +492,6  <at>  <at> 
                             <child>
                               <object class="GtkCheckButton" id="encodingFormatAAC">
                                 <property name="label" translatable="yes">AAC</property>
-                                <property name="use_action_appearance">False</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
 <at>  <at>  -698,7 +689,6  <at>  <at> 
       <object class="GtkVBox" id="vbox20">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
-        <property name="border_width">12</property>
         <property name="spacing">12</property>
         <child>
           <object class="GtkNotebook" id="notebook">
 <at>  <at>  -1194,18 +1184,29  <at>  <at> 
                         <property name="can_focus">False</property>
                         <property name="shadow_type">none</property>
                         <child>
-                          <object class="GtkVBox" id="cardsVBox">
+                          <object class="GtkVBox" id="vbox3">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <child>
-                              <object class="GtkLabel" id="noCardsLabel">
+                              <object class="GtkVBox" id="cardsVBox">
                                 <property name="visible">True</property>
-                                <property name="sensitive">False</property>
                                 <property name="can_focus">False</property>
-                                <property name="xpad">16</property>
-                                <property name="ypad">16</property>
-                                <property name="label" translatable="yes">&lt;i&gt;No cards available for configuration&lt;/i&gt;</property>
-                                <property name="use_markup">True</property>
+                                <child>
+                                  <object class="GtkLabel" id="noCardsLabel">
+                                    <property name="visible">True</property>
+                                    <property name="sensitive">False</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xpad">16</property>
+                                    <property name="ypad">16</property>
+                                    <property name="label" translatable="yes">&lt;i&gt;No cards available for configuration&lt;/i&gt;</property>
+                                    <property name="use_markup">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
 <at>  <at>  -1213,6 +1214,43  <at>  <at> 
                                 <property name="position">0</property>
                               </packing>
                             </child>
+                            <child>
+                              <object class="GtkVBox" id="vbox4">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <object class="GtkHSeparator" id="hseparator1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkCheckButton" id="showVolumeMetersCheckButton">
+                                    <property name="label" translatable="yes">Show volume meters</property>
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
                           </object>
                         </child>
                       </object>
 <at>  <at>  -1412,7 +1450,6  <at>  <at> 
                         <child>
                           <object class="GtkButton" id="deviceButton">
                             <property name="label" translatable="yes">Device</property>
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">True</property>
 <at>  <at>  -1440,7 +1477,6  <at>  <at> 
                         <property name="spacing">3</property>
                         <child>
                           <object class="GtkToggleButton" id="muteToggleButton">
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
 <at>  <at>  -1463,7 +1499,6  <at>  <at> 
                         </child>
                         <child>
                           <object class="GtkToggleButton" id="lockToggleButton">
-                            <property name="use_action_appearance">False</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
diff --git a/src/streamwidget.cc b/src/streamwidget.cc
index 94363ec..9492f4b 100644
--- a/src/streamwidget.cc
+++ b/src/streamwidget.cc
 <at>  <at>  -31,7 +31,6  <at>  <at> 
 /*** StreamWidget ***/
 StreamWidget::StreamWidget(BaseObjectType* cobject, const Glib::RefPtr<Gtk::Builder>& x) :
     MinimalStreamWidget(cobject, x),
-    peak(NULL),
     mpMainWindow(NULL) {

     x->get_widget("lockToggleButton", lockToggleButton);
diff --git a/src/streamwidget.h b/src/streamwidget.h
index b797ec5..160dc52 100644
--- a/src/streamwidget.h
+++ b/src/streamwidget.h
 <at>  <at>  -43,7 +43,6  <at>  <at>  public:

     pa_channel_map channelMap;
     pa_cvolume volume;
-    pa_stream *peak;

     ChannelWidget *channelWidgets[PA_CHANNELS_MAX];

--

-- 
2.0.2
Michael DePaulo | 20 Jul 14:56 2014
Picon

Make PulseAudio listen only on loopback ?

Hi guys,

So with X2Go's 2 clients for Windows (the regular "X2Go Client", and
"PyHoca-GUI"), we start pulseaudio.exe with a script like this one:

load-module module-native-protocol-tcp port=4713 auth-cookie=\.pulse-cookie
load-module module-esound-protocol-tcp port=4714
load-module module-waveout

This causes pulseaudio.exe to listen on all network interfaces. It
also causes a Windows Firewall prompt, which is a nuisance to users.

However, with X2Go, there is an option to tunnel all the sound traffic
over SSH. So when this option is set, we only need to pusleaudio.exe
to listen on loopback. Is there a way to do this?

Thanks in advance,
Mike DePaulo
Windows Maintainer for X2Go
Kaster, Kevin W | 18 Jul 00:08 2014

Pulseaudio BlueZ sink is running but not producing audio sound

Hi,

I'm having problems with a Pulseaudio BlueZ sink, and I don't know how to debug it further. My BlueZ sink
appears to be running but it is not passing any audio to the BT headphones.

Background:
I am using BlueZ 5.19, Pulseaudio 5.0, DBus 1.8.4, ALSA lib 1.0.26.
I am basically building a new distribution using Yocto based on Poky. So I have to pull all the pieces in
myself, and I may have missed something or built in with the wrong switches.
I am running everything as root (this is a deeply embedded system), including pulseaudio. I have seen the
message about not running as root, but I also saw a note that running as --system doesn't support dynamic
loading, and I didn't know if that applied to Bluetooth detection or not. So I'm open to changing this if
someone can tell me the correct thing to do. But regular audio to the Pulseaudio ALSA sink works fine so I
don't think that is the problem.
I have a basic /etc/asound.conf file which just specifies that the default ALSA PCM and CTL use the pulse plugin.

Problem:
When playing audio to the BlueZ sink, it looks like it is running properly, is not muted, has 100% volumes,
and I can see the latency bouncing around at reasonable numbers. The Pulseaudio messages in the system log
say it is streaming audio over A2DP. hcidump says ACL packets are being transmitted. But no audio comes out
of the sink.

What could be wrong? How can I debug this further?

Here are some snippets from the message log:
...
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [pulseaudio]
module-suspend-on-idle.c: Sink bluez_sink.00_02_3C_43_4A_09 becomes busy, resuming.
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [pulseaudio] sink.c: Suspend
cause of sink bluez_sink.00_02_3C_43_4A_09 is 0x0000, resuming
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [bluetooth]
module-bluez5-device.c: Acquiring transport /org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/transport.c:media_owner_create() Owner created: sender=:1.8
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/a2dp.c:a2dp_sep_lock() SEP 0x7945e8 locked
...
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/transport.c:transport_set_state() State changed
/org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0: TRANSPORT_STATE_IDLE -> TRANSPORT_STATE_REQUESTING
...
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/transport.c:transport_set_state() State changed
/org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0: TRANSPORT_STATE_REQUESTING -> TRANSPORT_STATE_ACTIVE
...
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/avdtp.c:avdtp_sep_set_state() stream state changed: OPEN -> STREAMING
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/sink.c:sink_set_state() State changed /org/bluez/hci0/dev_00_02_3C_43_4A_09:
SINK_STATE_CONNECTED -> SINK_STATE_PLAYING
Jul 15 21:20:48 delphi-ive-ev-secondary daemon.debug bluetoothd[885]:
profiles/audio/transport.c:transport_update_playing()
/org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0 State=TRANSPORT_STATE_ACTIVE Playing=1
Jul 15 21:20:48 delphi-ive-ev-secondary user.info pulseaudio[915]: [bluetooth]
module-bluez5-device.c: Transport /org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0 acquired: fd 38
Jul 15 21:20:48 delphi-ive-ev-secondary user.info pulseaudio[915]: [bluetooth]
module-bluez5-device.c: Transport /org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0 resuming
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [bluetooth]
module-bluez5-device.c: Stream properly set up, we're ready to roll!
...
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [pulseaudio] bluez5-util.c:
Properties changed in transport /org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0
Jul 15 21:20:48 delphi-ive-ev-secondary user.debug pulseaudio[915]: [pulseaudio] bluez5-util.c:
Transport /org/bluez/hci0/dev_00_02_3C_43_4A_09/fd0 state changed from idle to playing

Here is the output from pactl list sinks. The only strange thing I see here, is the "intended_roles" says "phone":
Sink #1
        State: RUNNING
        Name: bluez_sink.00_02_3C_43_4A_09
        Description: Creative WP-350 Headset
        Driver: module-bluez5-device.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 24
        Mute: no
        Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor Source: bluez_sink.00_02_3C_43_4A_09.monitor
        Latency: 28496 usec, configured 45317 usec
        Flags: HARDWARE DECIBEL_VOLUME LATENCY
        Properties:
                bluetooth.protocol = "a2dp_sink"
                device.description = "Creative WP-350 Headset"
                device.string = "00:02:3C:43:4A:09"
                device.api = "bluez"
                device.class = "sound"
                device.bus = "bluetooth"
                device.form_factor = "headset"
                bluez.path = "/org/bluez/hci0/dev_00_02_3C_43_4A_09"
                bluez.class = "0x240404"
                bluez.alias = "Creative WP-350 Headset"
                device.icon_name = "audio-headset-bluetooth"
                device.intended_roles = "phone"
        Ports:
                headset-output: Headset (priority: 0)
        Active Port: headset-output
        Formats:
                pcm

Thanks,
Kevin

****************************************************************************************
Note: If the reader of this message is not the intended recipient, or an employee or agent responsible for
delivering this message to the intended recipient, you are hereby notified that any dissemination,
distribution or copying of this communication is strictly prohibited. If you have received this
communication in error, please notify us immediately by replying to the message and deleting it from your
computer. Thank you. ****************************************************************************************
Peter Hurley | 15 Jul 13:56 2014

A2DP as default bluetooth profile?

I've disabled the HSP/HSP bluetooth profiles in bluez so that it
only supports A2DP. Unfortunately, this causes module-bluetooth-device
to select the 'Off' profile, even when the A2DP sink state is connected.

How do I configure pulseaudio so that A2DP is the default profile for
devices discovered by module-bluetooth-discover?  Or optionally, how
do I convince module-bluetooth-device to select the next lower priority
profile instead of "Off"?

Also, how do I set module properties? For example, module-bluetooth-discover
looks at "bluetooth.hsp.auto.connect" but I can't find any documentation
explaining how to set that?

Please cc me as I'm not subscribed to the list.
Iskren Hadzhinedev | 13 Jul 19:12 2014

Re: PulseAudio Painfully Slow

Hi,

Just a shot in the dark here, but Skype had an issue with PulseAudio 4 with some terrible cracking sound, that I also had with wine. The quickest fix I was able to find is to set the PULSE_LATENCY_MSEC variable to 60 and run wine/skype with those. I just aliased wine to 'PULSE_LATENCY_MSEC=60 wine' and edited the skype.desktop to do the same and it's working just fine.

I'm running PulseAudio 5.0 on a Slackware64 14.1 system that doesn't have PA packaged, so I had to build/install from source and since then (along with alsa-plugins), it's been working just fine. It also allows me to manually route audio from my headphones to my speakers without resetting anything, so it must be something from your system. Follow Mr. Patrakov's advise and provide the requested information, but in the mean time, try this override and see if it's going to work normally.

 

On Sunday 13 July 2014 11:04:14 Benny de von Ausfern wrote:

> So yes, I tried to install pulseaudio again, for the 99th time. No, it did

> not work "out-of-the-box", pulseaudio does not work out of the box for any

> of my devices, not for the past 4 years. No, its not simpler than ALSA, I

> have to crawl everywhere to tell it to stop being intrusive (who said that

> I want it to reset my mixer volumes every single time I plug in/out my

> headphones!??!).

>

> So before ranting all against pulseaudio again, I decided to come here and

> let you guys perhaps point out if I've done anything wrong. Performance is

> the name of the game here.

>

> I cannot, for instance, play games and listen to music at the same time.

> Pulseaudio eats so much resource trying to resample everything that even if

> I set the graphics resolution of a 2008 game to its minimum, run it

> windowed in 720 (rather than my 1080) the game is still only marginally

> playable. Add skype voicechat together with that and the game is simply

> unplayable. I've tested with 5 different games (FEZ, Trine 2, Left 4 Dead

> 2, Brutal Legend, Dungeons & Dragons Online - on Wine), they are all

> unplayable (some run ok if its only music + game, but none with skype +

> game or skype + game + music). I've tried different resample methods, but

> even "resample-method = trivial", the FPS drop is so considerable that its

> hard/unpleasant/impossible to play these games regardless of what I do

> (except for FEZ, that one works. Guess why....)

>

> So what now? Purge pulseaudio again?

 

Kind regards,
--

Iskren Hadzhinedev

_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
Michael DePaulo | 14 Jul 14:21 2014
Picon

Raspberry Pi Model B+ has Improved Audio

FYI:

I've seen many people post about the Raspberry Pi over the last year.
So I thought I'd point this out:

http://www.linuxvoice.com/raspberry-pi-model-b/

From a thread about the old models:
Re: [pulseaudio-discuss] pulseaudio settop boxes
On Sat, Feb 8, 2014 at 5:21 PM, Laurențiu Nicola <lnicola <at> dend.ro> wrote:
> Hi Wolfgang,
>
> First of all, I hope I won't offend anyone with this email, as it's not
> really related to PulseAudio and I should probably have taken it
> off-list.
>
> The complaints are usually related to the integrated sound card, which
> uses PWM (although at a rather high frequency). I tried to use it only
> once and, while I can't really comment on the audio quality, it seemed
> to have a lot of interference: when the Pi was writing to the SD card,
> there was a lot of audible noise. I'm using an USB DAC (sound card).
>
> Initially I was using ALSA, but the audio was choppy until I changed the
> sampling rate to 44100 Hz. The USB support is not great on the Raspberry
> Pi and there was a series of kernel changes intended to fix some
> problems with keyboards or something like this. I'm running mine
> headless, and those changes caused audio distortion for me, but luckily
> they can be disabled from configuration. The Raspberry Pi also has I2S
> support, which is a dedicated audio bus, supporting high sampling rates
> and bit depths. There are some I2S sound cards available and the drivers
> were recently merged into the kernel.
>
> Another series of problems was SD card corruption for me, as the Pi
> would not boot anymore if I restarted it improperly (which happens quite
> often because the power connector on mine is a bit finicky), but this
> seems to happen less often with newer firmwares.
>
> As for PulseAudio, I'm using the RTP module with an application I wrote.
> The CPU usage is rather high, but this is probably due to the resampler
> (which is needed for RTP because of the clock skew). The rate estimation
> algorithm seems to be a bit buggy: sometimes the buffer size grows too
> much, at other times the audio gets choppy (although I find it weird
> that I have to restart PA, not just the RTP session to fix it) and
> sometimes it stops playing at all. However, I expect that these are
> issues with the RTP module, not with the rest of PulseAudio.
>
> Basically, you can make it work and it's not that much of a hassle.
>
> Regards,
> Laurentiu
>
> On Sat, Feb 8, 2014, at 23:00, hamann.w <at> t-online.de wrote:
>> >> Hello,
>> >>
>> >> I'm not sure this is what you expect to get as an answer, but I'm using
>> >> PulseAudio on a Raspberry Pi. It "mostly" works.
>> >>
>> >> Laurentiu
>> >>
>>
>> Hi Laurentiu,
>>
>> I thought about something along these lines ... but I recall that people
>> are complaining
>> about the audio quality. Are you using the analog output? And what kind
>> of
>> obstacles does the "mostly" refer to?
>>
>> Regards
>> Wolfgang
>>
>> _______________________________________________
>> pulseaudio-discuss mailing list
>> pulseaudio-discuss <at> lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss <at> lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
Weedy | 14 Jul 00:42 2014
Picon

Re: PulseAudio Painfully Slow

On 13/07/14 02:04 PM, Benny de von Ausfern wrote:
> So yes, I tried to install pulseaudio again, for the 99th time. No, it
> did not work "out-of-the-box", pulseaudio does not work out of the box
> for any of my devices, not for the past 4 years.

My pulse worked pretty much out of the box.

I've made a couple tweaks since initial install.
Attachment (pulse.tar.xz): application/x-xz, 4639 bytes
_______________________________________________
pulseaudio-discuss mailing list
pulseaudio-discuss <at> lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss
Alexander E. Patrakov | 13 Jul 20:40 2014
Picon

Re: PulseAudio Painfully Slow

14.07.2014 00:04, Benny de von Ausfern wrote:
> So yes, I tried to install pulseaudio again, for the 99th time. No, it 
> did not work "out-of-the-box", pulseaudio does not work out of the box 
> for any of my devices, not for the past 4 years. No, its not simpler 
> than ALSA, I have to crawl everywhere to tell it to stop being 
> intrusive (who said that I want it to reset my mixer volumes every 
> single time I plug in/out my headphones!??!).

(ignored, as this is not the main point)

>
> So before ranting all against pulseaudio again, I decided to come here 
> and let you guys perhaps point out if I've done anything wrong. 
> Performance is the name of the game here.
>
> I cannot, for instance, play games and listen to music at the same 
> time. Pulseaudio eats so much resource trying to resample everything 
> that even if I set the graphics resolution of a 2008 game to its 
> minimum, run it windowed in 720 (rather than my 1080) the game is 
> still only marginally playable. Add skype voicechat together with that 
> and the game is simply unplayable. I've tested with 5 different games 
> (FEZ, Trine 2, Left 4 Dead 2, Brutal Legend, Dungeons & Dragons Online 
> - on Wine), they are all unplayable (some run ok if its only music + 
> game, but none with skype + game or skype + game + music). I've tried 
> different resample methods, but even "resample-method = trivial", the 
> FPS drop is so considerable that its hard/unpleasant/impossible to 
> play these games regardless of what I do (except for FEZ, that one 
> works. Guess why....)

We need to separate wine and PulseAudio bugs here. It's quite unusual 
that you blame PulseAudio even though wine contains a much slower 
resampler that is always on. Please see this bug that I still refuse to 
work on because my earlier work was ignored:

http://bugs.winehq.org/show_bug.cgi?id=30639

Can you reproduce the bug without wine?

Also, some details about your systems would be nice. All we need is the 
contents of /proc/cpuinfo, the "top" output while making an audio call 
with skype (with no games), and the information collected by 
alsa-info.sh script:

http://www.alsa-project.org/alsa-info.sh

--

-- 
Alexander E. Patrakov

Gmane