Open-source USB interface: Audio Widget

Actually, if you follow my signature and look for the ES9012/18 prototype, you'll find an unpopulated board with SPDIF output. It can be used as a starting point for optical out.

Optical in is a whole 'nother ballgame since the clock signal in the AB-1.2 is generated near the DAC chip, not in a receiver chip.

Glad you like it!


Børge
 
Hi guys,

the current Audio-Widget firmware does not work well in the OS X + UAC1 combination. Now, this isn't such a big issue because OS X + UAC2 works well.

Still, this has been bugging me for a while. Recently I've gotten some great help in debugging USB headers. The result is a piece of test fw. It works on my (presently busted) Mountain Lion test machine. Please test this one in OS X + UAC1:

awx_20130601_UAC1_OSX.elf

Please check in particular: Operation in both 44.1 and 48 (set under Audio MIDI Setup) and skipping between songs in iTunes or other players.


A few details:
- The code is pushed to audio-widget-experimental
- Grep for BSB 20130530 to see what has changed
- The UAC2 image supports Linux quirk
- Debug pins make it useless on AB-1.12 with PCM5102, no problems om AB-1.1/1.2.

Børge
 
Great! I did a lot more changes to it last night. It looks quite good here and I'll upload when I've cleaned up the code a little bit and done more long-term testing.

Firmware stability on 44.1 and 48 on both OS X and Win7-64 looks much better now. On OS X this will improve UAC1 audio quality compared to the stable branch. But the changes I've done are so large that a lot more testing is needed before this fw is merged with stable.

Børge
 
OK, go nuts :)

The biggest changes are:
- UAC IN endpoint removed because dead mic EP confuses OS X
- FB_rate_delta = 64, not (1<<12). This makes feedback state machine relax a bit.

It seems to work on OS X, Win7-64. Still to test XP and Win7-32. Thanks for testing on Linux! Long-term stability is important to check.

Børge
 

Attachments

  • awx_20130604.zip
    134 KB · Views: 38
Well, I did edit the UAC1 USB descriptors heavily. If you can run it past some sort of USB descriptor error reporting engine, that would be good.

I've been testing the firmware on OS X and XP all day. It's been stable the whole time except one missed feedback event in XP. So tonight I'll port the 2-level feedback algorithm from the UAC2 code. XP accepts the feedback data it is getting, and I see very little correction activity for the sample rate (which is good).

Børge
 
Here is the result of a large UAC1 cleanup. Please test on all OSes.
awx_20130605.zip

The major changes are:

- IN endpoint removed (OS X playback confused by a dead microphone)
- Endpoint tweaking
- FB_rate_delta=64 (gentler response by FB state machine)
- Multi-level FB algorithm ported form UAC2
- Easily turn debugging on and off in conf_usb.h

It's tested on Win7-64, XP and OS X. Playback at 44.1 and 48 are stable. Audio-Widget and HID work.


Børge
 
UAC1 seems to work fine but UAC2 seems to have problems... here is the dmesg output:

[ 1244.401486] usb 1-6: New USB device found, idVendor=16d0, idProduct=075d
[ 1244.401490] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1244.401492] usb 1-6: Product: QNKTC USB DAC AB-1.2
[ 1244.401494] usb 1-6: Manufacturer: Audio-Widget
[ 1244.401495] usb 1-6: SerialNumber: 1.0.0.0.0.0.A
[ 1244.407045] input: Audio-Widget QNKTC USB DAC AB-1.2 as /devices/pci0000:00/0000:00:0b.1/usb1/1-6/1-6:1.3/input/input7
[ 1244.407153] hid-generic 0003:16D0:075D.0003: input,hidraw0: USB HID v1.11 Device [Audio-Widget QNKTC USB DAC AB-1.2] on usb-0000:00:0b.1-6/input3
[ 1414.334410] cannot submit urb (err = -18)
[ 1414.334421] cannot submit urb (err = -18)
[ 1414.334424] cannot submit urb (err = -18)
[ 1414.334429] cannot submit urb (err = -18)

after that no app can play a sound

Audio output failed:
The audio device "default" could not be used:
File descriptor in bad state.

unless it's outputing directly to hw:0

hopefully it helps to determine the problem :)
 
Hi,

I have diffed the code in git going back to January 13th, and I don't think I've found any major show-stoppers in the UAC2 code. In any case, I have built the attached code today and committed to audio-widget-experimental.

In this code I have increased the polling interval on the feedback endpoint on both UAC1 and UAC2. I did see some tendencies in UAC1/Win7-64 that things were going a bit too fast for all polls to be taken, particularly through a hub. It looks better now.

My Linux box (Mint, 3.0.0.0-12 generic) is able to play music quite well using mpd. All frequency transitions on UAC2 work. This computer isn't highly stable at the moment but music seems OK.

Børge
 

Attachments

  • audio_widget_20130614debug.zip
    134 KB · Views: 57
Hope this is right place to post this - I just completed project using WaveIO USB to I2S card to drive North Star 192 DAC via I2S - it works on all frequencies NOT JUST 192 as some people reported. WaveIO is connected via USB to VortexBox 2.2 and using Vortexbox player. Very very sweet and clear sound - USB to I2S is must if you are serious about the sound.
 
Hi Børge,

I have just quickly tried out (both in UAC1 & UAC2) your latest firmwares:

awx_20130605clean.elf

and

audio_widget_20130614debug.elf

functionally, both seems to work fine (Debian GNU/Linux "Wheezy" 32bit, Kernel 3.9-1-686-pae from "Sid").

There seems to be some sound differences between the two firmwares, though (similar both in UAC1 and UAC2 mode). I wonder whether the differences may be due to the "-debug" code or something else (feedback loop?).

Could you provide a "-clean" version of the latest firmware?