Open-source USB interface: Audio Widget


Paid Member
2004-03-24 5:16 am
SF Bay Area
if you want to see how badly the codecs mangle the music. Typically, the better the audio chain the more unpleasant the sound from the music Cuisinarts (lossy compressors). I would judge first on clean uncompressed music you know that is locally hosted (in your computer) or there are so many uncontrollable variables you will have no way to gauge the relative quality.

I would first you a few simple test tracks to make sure its all working right- left channel, right channel in phase and out of phase or you could be judging an incorrect setup. You may be from the remarks above or the windows resampler is worse than I remember.
Option 4 should be the safest. On Win7 make sure you're sampling at 44.1.

Left-click the little speaker icon in the bottom-right corner
Left-click the icon on top of the volume control
Default format = 44100 from the pull-down menu
Allow exclusive
Disable all sound effects


Thanks i will do as you said..

Guys, no questions are stupid here! It's a long thread but beginner's questions are welcome.

Writing things to the LCD is easy. There is a fifo between the various tasks and the LCD output. Check out the audio-widget-experimental branch and look for my BSB signature in src/device_mouse_hid_task.c for an example of some simple LCD debugging.

Hi all,

The latest experimental firmware has been uploaded:

audio-widget-2012-08-11.elf - sdr-widget - Firmware for audio-widget. This is from the audio-widget-experimental branch. Enumerates under Linux, OSX, Win7 for both uac1 and uac2 (needs ASIO driver). HID code working. No need to set Quirks. - Audio an

The main changes are:

1. works under Linux, OSX and Windows without the need to set/change Quirk type;
2. HID code working under uac1 and uac2. The HID code is in preparation for things like hardware volume control etc.

now i'm wondering if you can control volume on Windows ? like native not in player...
on linux it goes with pulseaudio... you dont need output anything through it.. just use it as volume control and it works nice :D

thank you for your reply

Linuxworks is right :) The pulseaudio volume control is a SOFTWARE volume control, which alters the bit stream.

What we want to achieve (and I believe we have) is BIT PERFECT USB transfer of audio data to the DAC. Software volume control is NOT in line with this philosophy.

Indeed, we are working on a HARDWARE volume control mechanism which is bit perfect. It includes the following:

1. replacing the ES9023/AK DAC's with a DAC that has HARDWARE volume control, usually a step-attenuator at the analog output stage of the DAC; (Demian and George are looking into such designs.)

2. Adding firmware code for a Rotary Encoder Knob for changing the volume; This will allow the adding of a REAL volume control knob to the audio-widget, useful if the USB-I2S module is used inside a USB headphone amp etc.

3. Implementing HID audio control in accordance with the uac specs to link 1, 2 above with the host PC. (Borge has been hard at work on this and is already > 90% working.)

When all the above is in place, BIT PERFECT hardware volume control can be effected from the host PC operating system volume control or player software volume control.

i am asking how to setup properly under the UAC1 with windows and UAC2 in i asking something wrong here...and reason to talk about peachtree was thats the only other DAC i have ...

at UAC2 it holds preety good against the DAC....


For Linux uac2 playback, have you checked:

1. You are using high speed USB port (480mbps)
2. Your Linux kernel is >= 2.6.38

Btw, how is the SQ comparison between uac1 windows and uac1 Linux?

on my system with settings that i prefer its a huge difference.. UAC1 and UAC2 on linux is way better than on windows :)

Interesting... What type of music are you listening to? Is the sample rate 44.1? Perhaps there is a difference in whether or not the OS's sample rate converter is being used. In the readme file (see signature) there is a section on setting up the Windows side of things to use 44.1. That would be the most bit-correct UAC1 test.

On UAC2 the Windows ASIO driver should be bit correct.

found a typo in your readme

6 - Do the following. Ignore and approve any messages about driver not being
signed. Start, Run, hdwwiz.exe, Next, Install the hardware ... manually,
Next, Show All, Next, Have Disk, Browse to
"C:\Program Files (x86)\Atmel\Flip 3.4.5\usb", Choose "atmel_usb_dfu.inf",
Open, OK, Select "AT32U3A3", Next, Next, Finish

isn't it AT32UC3A3 ?
yes mostly the samplerate is 44.1 but in linux you can bypass pulseaudio and you can also bypass ALSA resampling (pesky thing)

and i did that right after i got it on windows ;)

This is interesting. It would be good to investigate if there are any differences which are measurable in the digital domain. Suggestions on the way to do that are most welcome! I was thinking about using actual music tracks as the source (at least to begin with) so that we can test the whole chain of player, driver, OS, USB firmware.

I have a system here where an USB-I2S module is plugged into an FPGA via I2S. Another board (AB-1.13) holds a module and outputs SPDIF.

This means any analysis which can be done in realtime on Verilog is possible. This system isn't capable of recording large blocks of samples in real time due to little RAM. But tests can be written to check that samples are arriving in a predictable way.

An SPDIF recorder may also work, like the ESI [email protected] I don't have a board like that here.

Go for it, firmware hacking can be a lot of fun! Feel free to ask questions here or on the audio-widget mailing list.

If you follow the schematics and insert a MAX3221CUE+ and surrounding parts, you'll get a fine RS232 debug. I actually have a few modules with that chip on it. That's if soldering cables on the USB-I2S module edge is within your reach and an 16-pin SSOP isn't.