[alsa-devel] Help on snd_pcm_hw_params() for ulaw on plugin
E.Richiardone
emmanuel.richiardone at gmail.com
Tue Jun 30 14:38:22 CEST 2015
Sorry for void subject of before
Hi all,
I am building a solution on a Debian platform that should playback an
audio recorded in G711 ulaw format. I am using Alsa to interfacing
with the audio device, it's a snd_cs5535audio. Below there is a
fragment of the code I am using.
I don't have any problems accessing the device using the "plughw:0,0"
device, where I can correctly set directly the ulaw 8000Hz format.
Now I was needing an multiband equalizer, and found that Alsa supports
some ladspa plugins, I choosed mbeq.
But if I use a device name different from "plughw:0,0", as for example
the "default" device or "plug", the final function snd_pcm_hw_params()
returns an error:
"cannot set hw params (Invalid argument)"
I was thinking that maybe my problem is that only the "plughw" device
accept directly the G711 ulaw format.
Anyone can confirm my thought?
There is a way to access a device directly in G711 ulaw format that
can be equalized with a plugin?
My initialisation source code:
----------8<----------
// #define AUDIODEV "plughw:0,0"
#define AUDIODEV "default"
[...]
pcm_name = strdup(AUDIODEV);
if((err = snd_pcm_open(&playback_handle, pcm_name, stream, 0)) < 0){
printf(" E> cannot open audio device %s (%s)\n", pcm_name,
snd_strerror(err));
closeall(1);
}
if((err = snd_pcm_hw_params_any(playback_handle, hw_params)) < 0){
printf(" E> cannot initialize hardware parameter structure
(%s)\n", snd_strerror(err));
closeall(1);
}
if((err = snd_pcm_hw_params_set_access(playback_handle, hw_params,
SND_PCM_ACCESS_RW_INTERLEAVED)) < 0){
printf(" E> cannot set access type (%s)\n", snd_strerror(err));
closeall(1);
}
err = snd_pcm_hw_params_set_format(playback_handle, hw_params,
SND_PCM_FORMAT_MU_LAW);
if(err < 0){
printf(" E> cannot set ulaw format (%s)\n", snd_strerror(err));
closeall(1);
}
val = 8000;
if((err = snd_pcm_hw_params_set_rate_near(playback_handle,
hw_params, &val, 0)) < 0){
printf(" E> cannot set rate (%s)\n", snd_strerror(err));
closeall(1);
}
[...]
if((err = snd_pcm_hw_params(playback_handle, hw_params)) < 0){
printf(" E> cannot set hw params (%s)\n", snd_strerror(err));
closeall(1);
}
---------->8----------
My /etc/asound.conf :
----------8<----------
defaults.ctl.card 0
defaults.ctl.device 0
defaults.pcm.card 0
defaults.pcm.device 0
ctl.equal {
type equal;
library "/usr/lib/ladspa/mbeq_1197.so";
module "mbeq";
controls "/usr/local/webif/.alsaequal.bin";
}
pcm.plugequal {
type equal;
slave.pcm "plughw:0,0";
library "/usr/lib/ladspa/mbeq_1197.so";
module "mbeq";
controls "/usr/local/webif/.alsaequal.bin";
}
pcm.!default {
type plug;
slave.pcm plugequal;
hint {
show on
description "Default equalized"
}
}
pcm.dsp0 {
type plug
slave.pcm plugequal;
}
---------->8----------
Many thanks
Best Regards
--
E.Richiardone
More information about the Alsa-devel
mailing list