Hi there.
I wrote a small patch which introduces an usb-audio module option called uperiod.
Changing to lower values will improve sound quality in some cases.
Please comment.
THX Klaus
--- alsa-driver-1.0.18a/sound/usb/usbaudio.c.orig 2008-11-21 19:19:11.000000000 +0100 +++ alsa-driver-1.0.18a/sound/usb/usbaudio.c 2008-11-24 13:40:12.000000000 +0100 @@ -72,6 +72,7 @@ static int nrpacks = 8; /* max. number static int async_unlink = 1; static int device_setup[SNDRV_CARDS]; /* device parameter for this card*/ static int ignore_ctl_error; +static int uperiod = 125;
module_param_array(index, int, NULL, 0444); MODULE_PARM_DESC(index, "Index value for the USB audio adapter."); @@ -92,6 +93,8 @@ MODULE_PARM_DESC(device_setup, "Specific module_param(ignore_ctl_error, bool, 0444); MODULE_PARM_DESC(ignore_ctl_error, "Ignore errors from USB controller for mixer interfaces."); +module_param(uperiod, int, 0644); +MODULE_PARM_DESC(uperiod, "Max. size of period per URB.");
/* * debug the h/w constraints @@ -108,6 +111,8 @@ MODULE_PARM_DESC(ignore_ctl_error, #define MAX_URBS 8 #define SYNC_URBS 4 /* always four urbs for sync */ #define MIN_PACKS_URB 1 /* minimum 1 packet per urb */ +#define MAX_UPERIOD 1000 +#define MIN_UPERIOD 64
struct audioformat { struct list_head list; @@ -1919,7 +1924,7 @@ static int setup_hw_info(struct snd_pcm_ * in the current code assume the 1ms period. */ snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME, - 1000 * MIN_PACKS_URB, + uperiod * MIN_PACKS_URB, /*(nrpacks * MAX_URBS) * 1000*/ UINT_MAX);
err = check_hw_params_convention(subs); @@ -3767,6 +3772,11 @@ static int __init snd_usb_audio_init(voi printk(KERN_WARNING "invalid nrpacks value.\n"); return -EINVAL; } + + if (uperiod < MIN_UPERIOD || uperiod > MAX_UPERIOD) { + printk(KERN_WARNING "invalid uperiod value.\n"); + return -EINVAL; + } return usb_register(&usb_audio_driver); }