Linux and Focusrite / Novation products

A number of our users have been asking for help using Saffire 6 USB on Linux.  Before we get to that, I thought it would be useful to clarify our interfaces status on Linux, then I’ll post up some information that will be useful for brave driver developers wanting to attack the devices that don’t work.

Please note that this is cobbled together from the back of my head, so might well be inaccurate – I’ll endeavor to correct and update it as best I can.

Finally, please understand that Focusrite does not officially support Linux.  Although some people are seeing positive results in the comments, and some of our products are “known to work”, your mileage may vary.  Good luck!

USB Audio Interfaces

Could work: Scarlett 2i2, 2i4, 8i6, 18i6, 6i6, 18i8, 18i20, Saffire 6 USB MkII (USB audio class 2.0 compatible), Forte and iTrack Solo.

Note that Forte’s display will not function on Linux as its content is rendered by a daemon running on the host.  I don’t think this should affect its operation as a sound card though.

Could work (but no driver): Saffire 6 USB, Novation nio 2|4

VRM Box will work as an audio device, with two outputs (headphones).  However, the VRM processing will not work, as this is embedded in the kernel mode driver on OS X and Windows and would be a very complex task to port (sorry, we have no plans to open source the VRM algorithm any time soon).

FireWire Audio Interfaces

Saffire Pro 40, Pro 24, Pro 24DSP, Liquid Saffire 56: may work via FFADO drivers.

Saffire Pro 40 (second revision): does not work with FFADO driver. These devices can be identified by serial number – any unit with a serial greater than PF0000100000 will not (currently) work.

Saffire, Saffire Tracker, Pro 26i/o, Pro 10 i/o: full support via FFADO drivers

Novation USB Controllers

Impulse, ReMOTE SL MkII (& ZeRO), ReMOTE SL (& ZeRO), Nocturn Keyboard: should work (USB class-compliant MIDI ports).  Note that Impulse and SL/ZeRO MkII have extra vendor-specific USB endpoints that will not work without a driver, these are for communication with the Automap server application which is not essential for MIDI control.

Launchpad: works (thanks to driver by Will Scott)

Nocturn: could work, though not USB class-compliant so would need a driver.  Could probably be adapted from the Launchpad driver with a trivial change of USB PID (see below).

Launchkey: should work – class compliant.

Launchpad S – class compliant!

Novation Synths

Ultranova: requires driver, not known if one exists.  Automap / plug-in editor interaction is complex (routing logic in the Windows / OS X drivers) but MIDI could work easily enough.

MiniNova: requires driver.  The MiniNova (and UltraNova) librarian and soon to be released editor have a back-door to communicate with the hardware (purely to prevent spam MIDI data clogging up your DAW), which can’t work with the class driver.  As with the Nocturn, UltraNova & Launchpad, the format for USB MIDI transfers is simply raw MIDI data (as opposed to the four-byte packeting of USB MIDI class data).

Xio & X-Station: should work (USB audio class-compliant ports).

USB VIDs and PIDs

Scarlett 18i6 1235 0x8000
Scarlett 8i6 1235 0x8002
Scarlett 2i2 1235 0x8006
Scarlett 2i4 1235 0x800A
Scarlett 6i6 1235 0x8012
Scarlett 18i8 1235 0x8014
Scarlett 18i20 1235 0x800C
iTrack Solo 1235 0x800E
Forte 1235 0x8010
Saffire 6USB (USB 2.0 version) 1235 0x8008
Remote 1235 0x4661
XStation               (old) 1235 0x0001
Speedio 1235 0x0002
RemoteSL + ZeroSL 1235 0x0003
RemoteLE 1235 0x0004
XIOSynth             (old) 1235 0x0005
XStation 1235 0x0006
XIOSynth 1235 0x0007
Remote SL Compact 1235 0x0008
nio 1235 0x0009
Nocturn 1235 0x000A
Remote SL MkII 1235 0x000B
ZeRO MkII 1235 0x000C
Launchpad 1235 0x000E
Saffire 6 USB 1235 0x0010
Ultranova 1235 0x0011
Nocturn Keyboard 1235 0x0012
VRM Box 1235 0x0013
VRM Box Audio Class (2-out) 1235 0x0014
Dicer 1235 0x0015
Ultranova 1235 0x0016
Twitch 1235 0x0018
Impulse 25 1235 0x0019
Impulse 49 1235 0x001A
Impulse 61 1235 0x001B
XIO Emergency OS Download Device 1235 0x1005
Nocturn Keyboard Emergency OS Download Device 1235 0x1012
Impulse bootloader 1235 0x1019
nIO DFU 1235 0x3201
6USB DFU 1235 0x3202
VRM Box DFU 1235 0x3203
Twitch DFU 1235 0x3218
168 comments
  1. Can you give more information about “Saffire 6 USB MkII” ? I can’t find it on your product page, is it a future product ?

    The Saffire 6 would be the perfect USB audio interface for me… if it had full linux support

    • Sure – we made a running change to the 6USB to a USB2.0 chipset. Everything else in the unit is identical, but the driver is different.

      It is now a USB Audio Class 2.0 device, which means in theory it should work with Linux. It does work with the Apple CoreAudio driver, but we provide our own for lower latency. The Windows usbaudio.sys driver does not support Audio Class 2.0 so it needs our driver to function.

      Visually you can tell the difference by looking at the label under the USB port on the back of the unit – a MkII will say “USB 2.0”, a MkI will say “USB 1.1”.

  2. Hi there!

    Did you made some progress?
    I’m having a new VRMBox here and having just Linux running, it’s a pity I can’t use their software…
    Could you give me some information on how to get this up and running?
    It’s ok if I have to code something myself. If I get the time, I’ll try to fix it myself – but a pretty much finished solution (or at least a point to start) would be far better 😉

    Thanks in advance!
    Ali

    • Unfortunatley VRM processing will not work on Linux, as it runs the VRM algorithm in the driver. VRM Box itself will work as a great headphone output, as it’s an audio class device by default.

      Sorry I can’t offer a solution, but we currently have no plans to port the VRM driver to Linux.

      • That’s a pity 😦
        Tried to go through wine, but the Installer needs WinXP SP2 and won’t recognize my wine as that 😉
        Well, any chance to bring this up with wine + usb support?

        Thanks in advance!

      • I don’t think it can work with Wine, as IIRC it only emulates the Win32 layer and the VRM processing takes place in the kernel mode driver. Sorry!

  3. martinschwenke said:

    Can you please tell me if the Scarlett 18i6’s instrument inputs auto-sensing or do they need to be set to Hi-Z in software? I’m guessing the latter might be difficult using a generic Linux USB driver. Thanks for any ideas on this…

    • Hi Martin – the switch between line (10kΩ) and instrument (1MΩ) input mode is indeed in software, but it should be accessible to a Linux driver. I can have a dig for the API if you like!

      • martinschwenke said:

        Thanks Dave, that sounds like a plan.

        However, I might found out a bit more about libusb before I get too excited. I’m wondering if it would be possible to write a usespace driver in something like Python using libusb to handle the non-time-critical settings-related stuff. If that can be used while the USB audio kernel driver is also loaded then it makes for a fairly simple solution.

        Not expecting you to know whether that can be done… mostly thinking out aloud… and evaluating whether to buy the Scarlett 18i6 in the context of wondering whether a time-poor hacker who has never hacked on USB might get enough time to make this plan work… 😉

        The other, simpler, solution would be to use Windows in a virtual machine to do an initial useful setup of the device and then just use it without tweaking the settings. One option would be to just set the front inputs to Hi-Z and just use those inputs for either instrument or mic – I hope you don’t need to tweak a setting to switch between those? Then for regular line-in, just use the rear inputs. That would work, wouldn’t it?

        Thanks again…

      • The usermode USB idea is a good one, that’s exactly how it works on the Mac. The USB audio control request to set the inputs to HiZ mode is as follows, I assume you can access something in libusb to send a USB device request.

        #define CUR 0x01
        #define TE_HIZ 9
        #define ID_ADC_INPUT_TERMINAL_UNIT 1

        UInt16 value = 0; // 1 for HiZ, 0 for low

        unsigned char endpoint = 0;
        IOUSBDevRequest req;

        req.bmRequestType = USBmakebmRequestType(kUSBOut, kUSBClass, kUSBInterface);
        req.bRequest = CUR;
        req.wValue = (TE_HIZ << 8) | channelIndex; // channel 0 or 1
        req.wIndex = ID_ADC_INPUT_TERMINAL_UNIT << 8 | endpoint; // endpoint is zero in this case
        req.pData = &value;
        req.wLength = 2;

        I think that should do it, but if it fails your last option would definitely work.

  4. martinschwenke said:

    Thanks, Dave. Hopefully I’ll buy one of these soon. When I start tinkering, I’ll try the above… and probably come back with questions about how to do more things…

    Just out of interest, are you aware of anyone else who is looking ay writing a usermode USB driver for Linux to handle the interesting parts of the 18i6?

    Thanks again!

    • Good, I hope I can give you what you need though I can’t make any promises! I’m not aware of any other usermode USB projects for the Scarlett range, but it’s a great idea.

  5. has this been asked already, if so I apologize…?

    With class II suport now enabled in devices like the scarlett 18i6, this works under linux but… you have to disable the alsamixer in the kernel (ie see this note: http://sergey.vlasov.me/2012/09/using-focusrite-scarlett-18i6-in-linux.html )

    So this begs the question, anyone adding alsamixer support back in? Is the problem here a bug in the alsa code, or is it just functionality differences with the mixer built-in on the new products?

    I’ve been trying to track this issue down under linux, with the thought of fixing it, if its within my teams abilities.

    • That’s the first I’ve heard of Scarlett devices working on Linux, great stuff and thanks for the tip Brian!

      I don’t know, but i doubt there’s a conflict with the mixer on the device (which is there to mix input and output streams for monitoring) and the ALSA mixer, which must be there to mix different software sources using the same outputs to the device (forgive me, I have virtually no understanding of the Linux audio stack or ALSA).

      With any luck, there’s a simple error in snd_usb_create_mixer() ?

      Best,
      Dave

      • martinschwenke said:

        I’ve been meaning to post an update…

        The alsa mixer driver code doesn’t know what to do with descriptor
        subtype 9:

        [158184.372835] usbaudio: unit 51: unexpected type 0x09
        [158184.372845] snd-usb-audio: probe of 1-8:1.0 failed with error -5

        So I think the ALSA USB audio driver is just incomplete… or that
        value of 9 is non-standard.

        I’m currenty hand-hacking the kernel module in the same way as Brian.

        With this hack, I get audio streaming nicely in both directions at
        88200Hz and MIDI seems to work just fine. To make MIDI work with
        Ardour I need use a2jmidid with the option that tells it to bridge
        devices – that was yesterday’s advance. So, I’ve done some initial
        tests with audio and MIDI recording, and it seems to work reliably.

        In the ALSA USB audio driver, it looks like mixer quirks are handled
        after parsing the mixer controls, so I don’t think mixer quirks can be
        used to work around the problem.

        So, my first step from here will be to come up a quirks setting for
        sound/usb/quirks-table.h to make it setup the streams but not attempt
        to setup the mixer at all. That will nicely circumvent the problems
        with mixer creation and might be accepted upstream, hopefully as a
        short-term solution. The quirks interface is somewhat hard for me to
        understand. Without any code changes (other than the quirk table
        entry) I think I would have to either hard-code the interfaces that
        need to be setup – that doesn’t look too hard. Alternatively, if I
        can make snd_usb_create_streams() available in quirks.c then I could
        create a new type of quirk that just creates the streams… however,
        without moving code around things get circular. Another approach
        might be to try to use some interface class/subclass matching but I
        haven’t got my head around it yet. Certainly using this quirk type

        .type = QUIRK_AUDIO_STANDARD_INTERFACE

        for each useful interface should result in the streams being setup
        just as they are now with the hack.

        The next thing to try might be to ignore the unknown mixer elements
        instead of aborting. This message:

        http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg27782.html

        seems to suggest that this has been tried:

        > [ 256.830798] ALSA sound/usb/mixer.c:1907: Ignoring UAC2_EXTENSION_UNIT
        > [ 256.830829] snd-usb-audio: probe of 1-8:1.0 failed with error -5

        I’ll have to give it another try.

        Right now I’m still trying to figure out what magic I have to invoke
        to build a kernel module that will insert into a Debian
        kernel… without having to rebuild and package the whole kernel.

        I’ve also started hacking together some Python code to toggle the
        instrument/line bit on the front 2 inputs. It doesn’t work, because I
        tried the quickest approach (i.e. no setup) because I’ve never done
        USB programming before:

        [677511.307349] usb 4-1.2: usbfs: process 12035 (python) did not claim interface 0 before use

        There’s obviously some simple setup I need to do. I’ll get back to
        it… but life has been busy… so…

        For now, a friend with a Mac has helped me setup the 18i6 with a nice
        saved config:

        * Front inputs set to “instrument”, given that there are plenty of
        other line inputs on the back.

        * Just the DAW is routed to the monitor outputs on the back.

        * All the inputs (and *not* the DAW) are routed to the headphone jack
        on the front. The front inputs and 1st 2 line inputs on the back
        are panned to the centre so they can be used as mono inputs. The
        other 4 inputs are setup as 2 stereo pairs, panned left-right.

        Given the routing, I can theoretically either do:

        * low latency monitoring using an external mixer by combining the rear
        outputs with the headphone output (and switching off monitoring in
        the DAW); or

        * higher latency monitoring by turning down the headphone output and
        switching on monitoring in the DAW.

        So, I’m setup to try and use most of the features of the 18i6 without
        needing to tweak anything… 🙂

        Will post more information as I progress… but progress has been
        slow so far, due to life getting in the way…

  6. martinschwenke said:

    OK, I think I’m starting to win! I now have a nice script to rebuild
    snd-usb-audio.ko for the running Debian kernel and load it into the
    kernel. This means I can do fairly quick hack, compile, test runs.

    I removed the hack that comments out the mixer creation and instead
    tried a quirks approach: just create the streams for the audio and
    MIDI interfaces. My initial patch is at the end of this comment. I’m
    just telling the driver that interfaces 1 and 2 are standard audio,
    and interface 4 is MIDI. I re-tested audio and MIDI, both input and
    output – it seems fine.

    This means I’m completely ignoring interfaces 0, 3 and 5. 0 seems to
    have all the mixer-fu, so that seems to be the right thing to do (for
    now). 3 doesn’t seem to do much… perhaps it should be mapped to
    something? 5 seems to be a firmware update interface… and it isn’t
    clear that the ALSA driver knows anything about that.

    Whatever the case, the 18i6 seems usable with this patch.

    However, I’m happy to take advice since, although I’m a decent
    programmer, I don’t know a lot (anything? more than yesterday?) about
    USB and audio… 🙂

    Next, I might do some hacking around in the mixer code to see if I can
    get some mixer support working. Initially I’ll probably only go as
    far as trying to ignore things the driver doesn’t know about.

    I wouldn’t count on me making much progress soon. I want to actually
    try using the 18i6 for recording instead of just hacking the driver…

    Unless someone thinks the patch below is wrong then I might post it to
    the ALSA list and see if the driver maintainer wants to merge it.
    Then at least the Linux kernel will do *something* with the 18i6
    instead of just failing with an obscure mixer error…

    diff –git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
    index 32d2a21..63b7dfd 100644
    — a/sound/usb/quirks-table.h
    +++ b/sound/usb/quirks-table.h
    @@ -2708,6 +2708,46 @@ YAMAHA_DEVICE(0x7010, “UB99”),
    },

    {
    + /* Focusrite Scarlett 18i6 */
    + USB_DEVICE(0x1235, 0x8004),
    + .driver_info = (unsigned long) & (const struct snd_usb_audio_quirk) {
    + .vendor_name = “Focusrite”,
    + .product_name = “Scarlett 18i6”,
    + .ifnum = QUIRK_ANY_INTERFACE,
    + .type = QUIRK_COMPOSITE,
    + .data = & (const struct snd_usb_audio_quirk[]) {
    + {
    + .ifnum = 0,
    + .type = QUIRK_IGNORE_INTERFACE
    + },
    + {
    + .ifnum = 1,
    + .type = QUIRK_AUDIO_STANDARD_INTERFACE
    + },
    + {
    + .ifnum = 2,
    + .type = QUIRK_AUDIO_STANDARD_INTERFACE
    + },
    + {
    + .ifnum = 3,
    + .type = QUIRK_IGNORE_INTERFACE
    + },
    + {
    + .ifnum = 4,
    + .type = QUIRK_MIDI_STANDARD_INTERFACE
    + },
    + {
    + .ifnum = 5,
    + .type = QUIRK_IGNORE_INTERFACE
    + },
    + {
    + .ifnum = -1
    + }
    + }
    + }
    +},
    +
    +{
    /*
    * Some USB MIDI devices don’t have an audio control interface,
    * so we have to grab MIDI streaming interfaces here.

  7. rgareus said:

    Hiho,

    I’ve started to work on the a mixer. A fully featured ALSA mixer interface is prototyped at
    https://github.com/x42/alsa-driver/commit/3d9c17a3a0a8f4d86489fe9ff8ddff53dde8cdc5

    git clone -b s18i6 git://github.com/x42/alsa-driver.git
    cd alsa-driver/alsa
    ./gitcompile
    sudo make install && alsa force-reload
    

    see also
    http://mailman.alsa-project.org/pipermail/alsa-devel/2013-January/058766.html
    http://mailman.alsa-project.org/pipermail/alsa-devel/2013-January/058821.html

    Related to that I have a couple of questions:

    Is it possible to query the saved state of the the mixer-matrix and routing tables from the device after it has been power-cycled? ..and if so: How?

    What does the URB wIndex 0x34 do? AFACT it is only used during factory reset.

    TIA

    • Nice one – I’ll clone it when I get a chance.

      It is indeed possible to query the routing table and mix matrix, I’ll have to dig out the documentation which I’ll aim to publish in another article soon. While I’m at it I’ll look up index 0x34!

      • rgareus said:

        Thanks Dave,

        I found that once data has been written to registers, it can be read back [1], but after a power-cycle the data queried from the device is not valid and does not correspond to the saved state (firmware v305).

        [1] exceptions to that are mixer-matrix (0x3c) and route (0x33) /control in/ requests which always return 0 or EINVAL. The ALSA mixer caches those values, and currently restores /defaults/ when the device is connected.

      • I dug out the code you need to store data in flash over a power cycle. You need to write 0xa5 to memory address 0x5a – this magic value will instruct the unit to save its settings!

        This ought to work on 18i20, 18i6, 18i8, 6i6 and 8i6.

  8. Why not simply realease all your Win/Mac source code, so that others can help in porting it to a proper OS?

    Surely it can only benefit you if people port the code, help patch and improve it and create an software ecosystem around your products. If you release the code under a GPL license your competitors won’t be able to benefit from the code without contributing back. It really seems like a no-brainer to me.

    • rgareus said:

      Hi Daniel,

      Not a bad idea in general.

      On OSX, Focursite drivers use Usermode USB, this is pretty much useless on Linux and BSD since the device is in-use by the kernel (alsa driver) and meanwhile not accessible to userspace. But anyway, being able to read (and copy parts of) the OSX driver code would make development of a Linux or BSD or … driver much easier.

      IMHO the proper solution would be to just produce class-compliant USB devices where no drivers are needed 🙂 But that’s another story 🙂

      2c,
      robin

      • It makes sense that a lot of code won’t be directly portable. But it’s always useful to have multiple implementations at hand when porting something, letting you understand protocoles, tricks and optimizations.

        I’m primarilly interested in a port for the MiniNova software, which is largely in userspace. The MiniNova a great stand-alone device, but not being able to connect it to a computer is a bit limiting.

    • Thanks for your comments Daniel – I wish releasing software really were a no-brainer! There are many factors to consider, and I genuinely believe in the value of open source software and do consider them seriously.

      One that gives me the most concern is actually the responsibility that goes with running a serious open source project – providing good documentation and “custodianship” of the code is something that is often done badly, and can seriously limit the usefulness of a project.

      We’ve yet to do it, but I would like to see us release some of our source to the community, so thanks for your feedback.

  9. mvdkwast said:

    Hi,

    How similar is the Scarlett 18i20 to the 18i6 ? Are they close enough to reuse rgareus’ alsa mixer interface with a few modifications, or are they very different internally ?

    Thanks.

    • They’re very similar internally, so you should be able to get it working quite easily – key difference is the mute / dim / monitor section, which has changed to incorporate the hardware controls. Let us know how you get on!

  10. Gonna give it a try with my pro 14. I want to break the windows need LOL

  11. Hi !

    Thanks for this status, I’m just about to buy an external USB sound card Linux compatible. I’m really interested in the scarllet 2i4. what is the status about this one ?

    Thanks a lot !

    • 2i4 has the same structure as Saffire 6 USB MkII and should work nicely on Linux, though I’ve not tested it.

      • gbetous said:

        Hi !

        Finally I bought one… and I confirm : it works perfectly under Linux (I did not test MIDI for now but I have no doubt as it is recognised by Jack).
        Great product, really !

  12. gosvald said:

    Hi martinschwenke,

    How do you apply your path to the running kernel? I just got Scarlett 18i20 and I am trying to get it working on Opensuse 12.3.

    • martinschwenke said:

      gosvald, that depends on your background and whether you’ve ever built a Linux kernel module before! However, doesn’t OpenSUSE ship with a Linux 3.7 kernel? That kernel should have the patch so it should just work.

      Note that my patch doesn’t provide a mixer, so I pre-configured my 18i6 and saved the settings on a Mac. If you want a mixer I suggest that you follow rgareus’ notes and build his patched version of alsa. The instructions for doing that look quite straightforward.

      I’ve cherry-picked rgareus’ patches into a Debian 3.2-based RT kernel (I think there were a few conflicts to resolve), and have a rebuilt and installed the snd-usb-audio module. Sadly, I haven’t got around to testing it out…

      rgareus, have you had your patches merged upstream?

      • rgareus said:

        > rgareus, have you had your patches merged upstream?

        To be frank: No, I did not bother. I was not happy with the 18i6 for many reasons and lost interest.

  13. gosvald said:

    OpenSuse ships with 3.7 kernel but Scarlett does not work. I have compiled the whole kernel many times before. It was a long time ago though. I never compiled just a single driver. Always the whole menuconfig or xconfig and all that jazz. I tried to compile the alsa-driver package but I am missing some headers and I am not sure which ones at the moment. I did not have a lot of time for this. I can see the card in proc and it is visible in Pulse configuration but it shows shaded with error message that the driver is either not loaded or not working. I actually have to try to connect Scarlett to a WIN 7 machine to make sure it’s not a hardware problem. I originally ordered a Saffire Pro 40 but the shop sold it to someone else while it was on layby for me. They gave me the Scarlett instead to try.

    • martinschwenke said:

      I only use my Scarlett directly with JACK, and indirectly with Pulse via pulseaudio-module-jack. Perhaps Pulse doesn’t like that the card is missing a mixer? Is the card listed in /proc/asound/cards? Can you play a WAV file directly to the ALSA device using something like “aplay”? That’s about as far as my audio debugging skils go…

  14. gosvald said:

    Yes I can see the card in /proc/asound/cards:
    0 [USB ]: USB-Audio – Scarlett 18i20 USB
    Focusrite Scarlett 18i20 USB at usb-0000:02:00.0-2, high speed
    1 [Generic ]: HDA-Intel – HD-Audio Generic
    HD-Audio Generic at 0xfd9fc000 irq 50

    aplay would not work. When I try to list aplay devices I get this:

    aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 1: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
    Subdevices: 1/1
    Subdevice #0: subdevice #0

    Scarlett is not listed there.

  15. gosvald said:

    I just tried to run alsamixer (in command line) and the output is:

    Card: Scarlett 18i20 USB F1: Help │
    │ Chip: USB Mixer F2: System information │
    │ View: F3: Playback F4: Capture F5: All F6: Select sound card │
    │ Item: Esc: Exit │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ │
    │ This sound device does not have any controls.

  16. gosvald said:

    I have had some success. I upgraded my Kernel to version 3.9 (seemed like the quickest option). I can now see Sacrlett 18i20 when listing devices with aplay -l. I still get errors when trying to play a file though. I also cannot start jack because it is trying too use alsa driver and that fails. Scarlett is no longer shaded in desktop configuration either.

  17. gosvald said:

    When I try to play a file direct I get this errors:

    # aplay M1F1-Alaw-AFsp.wav
    ALSA lib pcm_direct.c:998:(snd1_pcm_direct_initialize_slave) unable to install hw params
    ALSA lib pcm_dmix.c:1034:(snd_pcm_dmix_open) unable to initialize slave
    aplay: main:731: audio open error: Input/output error

  18. gosvald said:

    OK. And the winner is….Me! All working now. Thanks for the help. Martin you said that you use Scarlett directly with JACK, and indirectly with Pulse via pulseaudio-module-jack. How did you configure that?

    • martinschwenke said:

      gosvald, I’m just wondering what the trick was to make things work… 🙂

      I checked my setup. I used to do the jack/pulse thing but I don’t do that anymore. I think that was documented at https://help.ubuntu.com/community/UbuntuStudioPreparation#Pulse_Audio – it was certainly one of the Ubuntu Studio things.

      However, I’ve simplified by studio machine and no longer have Pulse installed.
      These days I do this:

      http://jackaudio.org/routing_alsa

      to create a virtual ALSA device that gets routed through JACK. Seems to work for using a media player and watching YouTube videos… 🙂

    • Hey Tobias, great work.

      I was able to patch my 3.8 kernel with your changes quite nicely. I have my Scarlett 18i8 working with alsamixer now which is great. Thanks for your hard work. I’d like to see this merged into the 3.12 kernal and maybe backported for a couple of kernel versions.

      I’m interested in helping with the patch and the GUI, I’d like to see the Scarlett mixers fully supported and functional in linux. I’m going to write out my compilation steps so that others will have them. I’ve also included some questions for you.

      I started some preliminary work on a GUI. It’s not worth uploading yet. If and when I have something I’ll be sure to update this thread.

      Questions for Tobias:

      My “master” alsa mixer control for scarlett 18i8 produces an audible click when the volume is changed and the device is connected through jackd. Does this happen to you? It doesn’t happen when I’m routed normally through pulseaudio.

      Have you made any progress on the hardware monitors yet? I haven’t tried enabling their compilation yet.

      Do you have plans to merge this into the alsa project? If so what work needs to be done?

      I sent you a pull request on github for the addition of the patch.

      Thanks again Tobias.

      Notes on compilation:
      Compiling Tobias’ change took me about 6 hours. My work involved a lot of trial and error though so you may be faster. I seperated out the changes into a single patch file so it can be applied to any newer kernel’s source eaisly (I imagine anything past 2.6 will work).

      I was able to complie and run the change into my linux 3.8 lowlatency kernal in Ubuntu Mint 15. All of my commands are the ubuntu versions. To make the change I diff’ed Tobia’s sound/usb/ folder with sound/usb in the 3.11 kernel, then took those changes and applied them into the 3.8 kernel subtree.

      Clone my git branch of Tobias’ changes. Mine has the scarlett kernel patch, thought I hope to merge it into Tobias’ branch so we can keep all this stuff together.

      git clone http://github.com/trrichard/alsa-driver_scarlett.git

      I hope to keep a version of this doc updated in the repo. Theres a file called README.scarlett.kernel.patch that has the same instructions in the repository.

      # You should probably have your scarlett disconnected.
      # To apply, download the source and headers of your kernel using your package manager

      # Most likely
      sudo apt-get install linux-source-3.8.0

      # Copy and untar to a build directory
      cp /usr/src/linux-source-3.8.0/linux-source-3.8.0.tar.bz2 ./
      tar -xf linux-source-3.8.0.tar.bz2

      # Change into the linux directory and try a dry run of the patch
      cd linux-source-3.8.0
      patch –dry-run -p1 -i

      # NOTE: It is not uncommon to have a few differences between
      # your version of the kernel and the one the patch was created
      # from. Your dry run should succeed though it may have offsets.
      # If it fails you can insert the patched code by hand in C.

      # Preform the actual patch
      patch -p1 -i

      # Configure and setup the kernel build.
      # This is too large of a topic to cover here. These are the steps I used.
      # Using some default settings.
      make oldconfig

      # Copy the module symvers file (needed for compiling versioned modules)
      cp /usr/src/linux-headers-3.8.0-32-lowlatency/Module.symvers ./

      # Run make prepare
      make prepare

      # For my kernel I had to run make scripts as well for recordmcount
      make scripts

      # Build the scarlett patched usb audio modules
      make M=sound/usb/ modules

      # Remove the previous audio module
      sudo modprobe -r snd-usb-audio
      # If modprobe won’t remove the module make sure scarlett is disconnected.
      # If thats not enough try rebooting the machine with scarlett disconnected.

      # Apply the usb midi and patched usb audio modules
      sudo insmod sound/usb/snd-usbmidi-lib.ko
      sudo insmod sound/usb/snd-usb-audio.ko

      # Plug in your scarlett and run alsamixer with the number of your card
      # If you don’t know the number just run alsamixer with no args and
      # press f6 to switch cards.
      alsamixer -c 1

      # All of the hardware mixer options should show up!

      • > … audible click …

        I remember something like that, yes. But when I try it now, I can only reproduce very minor “clicks”, and they are the same on every slider (that has input).
        Either it was fixed in one of the firmware-updates of the device I did, or a few different factors are the reason for the click, maybe strange input signals, or certain “Input Source” Settings, or …

        > … hardware monitors …

        The basic code for this comes from rgareus’ work.
        It currently uses the alsa controls API (the same that is used for setting the mixer values), BUT:

        1) I don’t know any (mixer) software that handles (and periodically re-requests!) this kind of control information. At a deeper level, most (all?) mixer GUIs use alsa’s simple mixer interface, which is another (userspace) layer of software on top of the (kernel-to-userspace) controls api.

        2) Different from the volume controls, the VU-meters are not exposed ‘per channel’, but ‘per metering point’ by the scarlett hardware. In the current driver this leads to exactly /three/ VU-meter controls, which have up to 18 (sub-)channels (instead of the ususal 1/2, i.e. mono/stereo). No alsa software I know is remotely prepared for this…

        3) IIRC, alsamixer did not like those controls (i.e. hangs).

        4) Other cards with hardware meters and alsa support use the alsa hwdep API instead for metering levels and have a dedicated mixer/metering application.
        As I already wrote elsewhere, I won’t be the one to write one. I might be able to help with the driver side, though.

        > … merge this into the alsa project? …

        I myself don’t have the time to go through the process. But I have based my repository on the alsa upstream git tree, so merging should not be a technical problem.

        It’s more about bringing it to the attention of the alsa developers and keeping the process going.
        rgareus had actually written to the alsa mailing list about his version (which I extended), but then no further steps (code review, …) were taken.

        > … sent you a pull request …

        What is the difference (Is there a difference?) between your .patch file and the one I would get with a git diff against the upstream version of alsa I based my work on?

      • There is no difference between your code and the patch file. The patch file is easier to apply to any kernel version and it looked like a bunch of people were having compile problems associated with trying to build in the alsa kernel branch.

        I figured that this was the best way to get people who don’t necessarily know how to recompile their kernel to help test the driver.

        I’m willing to write the userland GUI for the Scarlett. I’m starting on it now. I could definitely use your help on the driver side though.

        I’m looking into the mudita24 code to see if it can be adapted.

        I’ll also look into the hwdep API.

        Thx.

      • The audible click disappears as soon as jack is started, because it sets the sampling rate.
        I’ve now fixed the driver to initialize the sampling rate to some value.

      • Hardware metering causes a kernel panic when I run amixer -c 1. I’ll see if I can get you a crash dump/stack trace.

      • Hey, guys I can help with some testing and coding. I have18i20 and some C skills(ported emu10k1 alsa driver to QNX few years ago). Just tell me what to do..

    • I am still working on the GUI. Here is all I’ve got so far. I’ve been building up a “fake mixer” so I have something to test against and started creating playing with some widget elements. I’m working on making a reasonable interface that we can use on all of the scarletts.

      This is just the beginnings of the work though, I wanted to share so if your interested you can help.

      It is important to note this repository is only of interest to people who want to help on the GUI at this point.
      It doesn’t work yet.
      https://github.com/trrichard/ScarlettMixer

      I’m not committed to python, it seamed the easiest way to prototype this. That being said I’ve liked how it’s worked out so far.

      @Tobias, I’ll try to update the patch this weekend, I’ll also see if I can get you a script to generate it. Probably just involves scraping git for your changes then spit out the patch file or something.

      • Hey all, gui is in an early alpha but is slightly functional. There are some limitations all of which I expect to be able to resolve. I’m just letting you know, don’t expect all the features yet. Also, for the GUI to work you must have the kernel driver for the Scarlett installed.

        Things that work:
        Stereo sound.
        Panning.
        Basic Volume control for all of the matrix entries.
        Detection of when there was a hardware change.
        Input selection for the matrices.

        Current Limitations:
        Right now the mixes are hard coded to stereo and limited to AB CD and EF.
        The code is making the assumption that each mix pair is connected to one of the output interfaces. (AB to Monitor CD to Headphone 1 EF to Headphone 2)
        There is no master volume control.
        I currently have a space set up for the hardware monitoring meter but I can’t connect it till I have driver support.
        There is no support for the per channel settings for line level and pad.
        No way to join two signals together to make a left/right input.
        Hardware detection only updates the input selection.

        I expect the interface to change quite a bit as I work on this so don’t get too comfortable with it. It is still a work in progress.

        @Bogdan Lisnenko It would be very helpful if you could get the monitoring working on the alsa hardware driver.

        If you see a bug, feature or have problems installing on your OS let me know. I’m building on the newest Mint linux.

      • @Tyler Richard, Actually I think all of mixer and routing features including monitoring should be implemented using hwdep interface + gui app without any alsa mixer help. This is how windows driver works and this is the only one correct way. Scarlett Mix Control is mostly router app not a mixer. There are some routing configuration without any submixes being used for example so there is no place even for master fader in alsa.
        Here is my current studio setup of 18i20: all 8 analog inputs are routed to 8 adat output channes. Signal goes to another interface then it goes to DAW. Mixed stereo is sent via ADAT back to 18i20 outputs. So I can’t even change any volume of any of my channels in Scarlett mix control since I’m not using scarlett submixes, only hw routing.

      • @Bogdan There is no such thing like the “alsa mixer” you seem to have in mind…
        There are registers in the scarlett hardware, which are exposed as controls by the driver. These controls frequently used to control the “mixer” registers in the hardware, so the user-space applications to change them are often called something like “alsamixer”. The routing is also controlled by registers, these show up as enum-type selectors in the usual GUI applications.

        If you thing that under certain conditions (like the use-case you described) some control do not makes sense, an Scarlett specific mix/route-GUI should probably implement the logic to hide them.
        You can expose all the registers via hwdep (even in addition to the now existing controls api, it’s not really either/or…); I fail to see how this addresses the problem you seem to have, it’s not like the hardware-registers suddenly disappear … they’ll still be settable/gettable via hwdep or “mixer” controls, or whatever API you choose to expose across the kernel/userspace boundary…

  19. gosvald said:

    Hi Martin,
    I did not do anything special. I attempted to build custom alsa module but gave up because I did not have the time. I then simply installed Kernel 3.9 and made scarlet a default sound card. After that everything worked. I am now back on the stock kernel because I had some other issues with some drivers. I will; continue experimenting but at least I know the quick and dirty way. If I can’t make it work with my current kernel I might configure a separate boot profile or even dual boot to a separate partition.

  20. gosvald said:

    Hi Tobias,

    What would need to be done to support Scarlett 18i20?

  21. gosvald said:

    HI Tobias,
    I managed to build your alsa driver. Scarlett now works with my current kernel. When I run alsa mixer though, I still can’t see Scarlett there. Do I have to do anything else?

  22. The scarlett mixer driver needs device-specific information, and I only have a 18i8 to test with.
    I’ve now added some preliminary device information for the 18i20 to my repository –
    I expect that at least a part of your mixer controls work correctly with it.

    The website says that 18i20 only has a 18×8 Matrix (like the 18i8), and I currently have no clue how the other 12 outputs are routed…

    • I’m 18i20 owner. I can confirm it has 18×8 matrix mixer to create 4 stereo submixes. But then you can route any of 18 hw inputs or 20 DAW PCM or 4 submixes (from 18×8 matrix) to any hw outputs without any attenuators(multiplexer). Also inputs of 18×8 matrix mixer are assignable from 18 hw inputs or 20 DAW pcm’s.

  23. Hello,
    is there any information available on a possible alsa driver for the 6i6? I’m seriously considering this interface, but would also want to use it with linux. Is the 6i6 similar to other scarlett interfaces internally, therefore making it possible to adapt rgaeus work?

  24. New 18i20 owner. Using KX Studio at the moment, whatever the stock kernel is at the moment. The 18i20 shows up, but with the Alsa mixer, no controls visible, greyed out or not. Any simple explanation of how to get this mixer useable under Ardour? Not a Linux newbie, but AM new to KX Studio….

  25. The Scarlett mixer configuration is not discoverable via the usb descriptors. That’s why the stock snd_usb_audio driver does not present any mixer controls.

    Based on rgareus work I have created an alsa-driver branch at
    https://github.com/smilingthax/alsa-driver_scarlett/
    that contains scarlett-specific mixer code in snd_usb_audio and which has support for at least 18i8 and 18i6.
    I have also added some support for the 18i20 mixer, but the mappings are only based on guesswork (not tested with a real 18i20).
    If you compile and use this module instead of the stock alsa/kernel one, mixer controls should appear. Report any flaws in the mapping, and I’ll fix them.

    • Thanks for the quick comment. I’ll give this a shot over the holiday weekend. Been awhile since I dealt with gcc, might be fun… 😉

    • Ok, checked the code out of the repository, via the zip file, twice now. FYI, it seems to be missing the config file. Make doesn’t like that at all. Ideas?

      • I’m not sure. I never compiled the complete tree, but only the sound/usb/ subdirectory, as out-of-tree kernel module by using
        make -C /usr/src/linux-2.6/ M=$PWD modules
        (and modules_install, if you want to use modprobe instead of insmod).
        The path /usr/src/linux-2.6/ refers to my kernel build environment (kbuild, headers, .config file; the full source is IIRC not required) for the current kernel is.
        [Also the kernel SND_USB_AUDIO config option should be set to M(odule), but that’s probably already the case, as you reported basic functionality with your stock kernel.]

  26. Does this mixer supports 8i6 now? i have one and i am desperately looking for the mixer….

  27. what is the default routing of this? i noticed that the 8i6 has a default mix setup by the driver where in all the inputs are mixed to monitor and headphoen outputs… ! how can i disable this?

    • The default mixer settings are just the settings from “Save to the hardware”, e.g. in the Win/Mac Scarlett Mixer application. Some initial factory settings probably have the routing you described. The stock snd-usb-audio driver does not set scarlett’s mixer at all.

      My branch of the driver can be probably very easily extended to support the 8i6. What is needed is a correct “mixer descriptor” (i.e. how the hardware is wired) for the 8i6 (together with the corresponding usb ids, but these are well-known).
      I can certainly guess most of the values, but I cannot test it myself.

      • how could i help you on this.. i have the hardware and you have the software 😉 would you like to send me the patches and some how-tos so that i can just start with … i think the 8i6 deserves a gui based stand alone application like SMC is that so?

      • I’ve updated my branch with the the necessary (guessed) values for 8i6:
        https://github.com/smilingthax/alsa-driver_scarlett/

        You’ll have to get this and compile+load the new snd-usb-audio module for you’re current kernel. Some of the possible ways to do this can be found in the comments above; I don’t have the time to go in to much details here. Please report any incorrect mapping of the mixer controls, and I’ll try to fix them.

        A GUI based application would certainly be nice, but I’m certainly not the one to write it. All the gain and routing controls are available via the text-mode alsamixer tool. VU-meters are not supported by my branch (for now) and will most certainly require a matching user-space application to work properly. A generic mixer GUI for alsa is qasmixer; it’s the one I use, and (sadly) the only one I can recommend (besides alsamixer).

      • That’s really great… i will get it build in my machine and will let you know… thank you very much and appreciate the effort.

      • usually when can we expect this patch in the mainline kernel? i hope this alsa code would be pulled in to the kernel drivers, isn’t it so?

      • I haven’t made any attempt yet to get the code into upstream alsa (which is the route to the mainline kernel).
        OTOH I have yet to hear any success stories from others (except that I know the mixer works for me…).

      • I think i could help you here by testing it.. but the issue is that i dont want to break the existing production setup for testing this… i may need to have a testing setup ready for this. let me prepare a test bed for this…

      • Hi,

        I tried to build it for the 8i6. The build went fine and i could install it. the alsa force reboot had some issues and the dmesg is following,

        [ 3532.229030] usb 1-1: new high-speed USB device number 4 using ehci-pci
        [ 3532.344189] usb 1-1: New USB device found, idVendor=1235, idProduct=8002
        [ 3532.344195] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
        [ 3532.344198] usb 1-1: Product: Scarlett 8i6 USB
        [ 3532.344202] usb 1-1: Manufacturer: Focusrite
        [ 3532.344205] usb 1-1: SerialNumber: 000024A2
        [ 3532.452086] usbcore: registered new interface driver snd-usb-audio
        [ 3596.665505] usbcore: deregistering interface driver snd-usb-audio
        [ 3596.795668] usbcore: registered new interface driver snd-usb-audio
        [ 3669.838668] usbcore: deregistering interface driver snd-usb-audio
        [ 3669.901642] snd_seq_dummy: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.901678] snd_seq_dummy: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.901705] snd_seq_dummy: Unknown symbol __snd_printk (err 0)
        [ 3669.901716] snd_seq_dummy: disagrees about version of symbol snd_seq_create_kernel_client
        [ 3669.901719] snd_seq_dummy: Unknown symbol snd_seq_create_kernel_client (err -22)
        [ 3669.904070] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_receive
        [ 3669.904075] snd_usbmidi_lib: Unknown symbol snd_rawmidi_receive (err -22)
        [ 3669.904096] snd_usbmidi_lib: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.904110] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_empty
        [ 3669.904113] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_empty (err -22)
        [ 3669.904120] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit
        [ 3669.904123] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit (err -22)
        [ 3669.904133] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_add
        [ 3669.904136] snd_usbmidi_lib: Unknown symbol snd_ctl_add (err -22)
        [ 3669.904171] snd_usbmidi_lib: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.904188] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_new1
        [ 3669.904190] snd_usbmidi_lib: Unknown symbol snd_ctl_new1 (err -22)
        [ 3669.904206] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_ack
        [ 3669.904209] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_ack (err -22)
        [ 3669.904239] snd_usbmidi_lib: Unknown symbol __snd_printk (err 0)
        [ 3669.904254] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_peek
        [ 3669.904257] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_peek (err -22)
        [ 3669.904274] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_notify
        [ 3669.904277] snd_usbmidi_lib: Unknown symbol snd_ctl_notify (err -22)
        [ 3669.904296] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_new
        [ 3669.904298] snd_usbmidi_lib: Unknown symbol snd_rawmidi_new (err -22)
        [ 3669.904306] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_set_ops
        [ 3669.904309] snd_usbmidi_lib: Unknown symbol snd_rawmidi_set_ops (err -22)
        [ 3669.904329] snd_usbmidi_lib: Unknown symbol snd_hidden_kmalloc (err 0)
        [ 3669.906846] snd_hwdep: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.906860] snd_hwdep: disagrees about version of symbol snd_info_register
        [ 3669.906863] snd_hwdep: Unknown symbol snd_info_register (err -22)
        [ 3669.906874] snd_hwdep: disagrees about version of symbol snd_info_create_module_entry
        [ 3669.906877] snd_hwdep: Unknown symbol snd_info_create_module_entry (err -22)
        [ 3669.906890] snd_hwdep: disagrees about version of symbol snd_info_free_entry
        [ 3669.906892] snd_hwdep: Unknown symbol snd_info_free_entry (err -22)
        [ 3669.906910] snd_hwdep: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.906925] snd_hwdep: disagrees about version of symbol snd_ctl_register_ioctl
        [ 3669.906928] snd_hwdep: Unknown symbol snd_ctl_register_ioctl (err -22)
        [ 3669.906958] snd_hwdep: Unknown symbol __snd_printk (err 0)
        [ 3669.907041] snd_hwdep: disagrees about version of symbol snd_device_new
        [ 3669.907045] snd_hwdep: Unknown symbol snd_device_new (err -22)
        [ 3669.907058] snd_hwdep: disagrees about version of symbol snd_ctl_unregister_ioctl
        [ 3669.907061] snd_hwdep: Unknown symbol snd_ctl_unregister_ioctl (err -22)
        [ 3669.909542] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_receive
        [ 3669.909547] snd_usbmidi_lib: Unknown symbol snd_rawmidi_receive (err -22)
        [ 3669.909571] snd_usbmidi_lib: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.909585] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_empty
        [ 3669.909588] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_empty (err -22)
        [ 3669.909595] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit
        [ 3669.909598] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit (err -22)
        [ 3669.909608] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_add
        [ 3669.909611] snd_usbmidi_lib: Unknown symbol snd_ctl_add (err -22)
        [ 3669.909643] snd_usbmidi_lib: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.909659] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_new1
        [ 3669.909661] snd_usbmidi_lib: Unknown symbol snd_ctl_new1 (err -22)
        [ 3669.909677] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_ack
        [ 3669.909680] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_ack (err -22)
        [ 3669.909710] snd_usbmidi_lib: Unknown symbol __snd_printk (err 0)
        [ 3669.909724] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_transmit_peek
        [ 3669.909727] snd_usbmidi_lib: Unknown symbol snd_rawmidi_transmit_peek (err -22)
        [ 3669.909744] snd_usbmidi_lib: disagrees about version of symbol snd_ctl_notify
        [ 3669.909747] snd_usbmidi_lib: Unknown symbol snd_ctl_notify (err -22)
        [ 3669.909763] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_new
        [ 3669.909766] snd_usbmidi_lib: Unknown symbol snd_rawmidi_new (err -22)
        [ 3669.909774] snd_usbmidi_lib: disagrees about version of symbol snd_rawmidi_set_ops
        [ 3669.909777] snd_usbmidi_lib: Unknown symbol snd_rawmidi_set_ops (err -22)
        [ 3669.909796] snd_usbmidi_lib: Unknown symbol snd_hidden_kmalloc (err 0)
        [ 3669.912522] snd_seq_midi_event: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.912546] snd_seq_midi_event: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.912566] snd_seq_midi_event: Unknown symbol snd_hidden_kmalloc (err 0)
        [ 3669.914840] snd_seq_midi_event: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.914864] snd_seq_midi_event: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.914884] snd_seq_midi_event: Unknown symbol snd_hidden_kmalloc (err 0)
        [ 3669.968041] snd_seq_midi_event: Unknown symbol snd_hidden_kzalloc (err 0)
        [ 3669.968067] snd_seq_midi_event: Unknown symbol snd_hidden_kfree (err 0)
        [ 3669.968088] snd_seq_midi_event: Unknown symbol snd_hidden_kmalloc (err 0)

      • kernel: 3.8.0-30-lowlatency #22-Ubuntu SMP PREEMPT Thu Sep 5 19:37:35 UTC 2013 i686 i686 i386 GNU/Linux

        alsa: 1.0.25

      • You have a lot of symbol mismatches in the alsa modules — and all of them are completely unrelated to my changes…
        That’s unfortunate; (some) possible causes could be: Trying to load a mixture of (old) in-kernel alsa driver parts with (newer) upstream alsa parts. E.g. don’t compile just the sound/usb subdirectory, even if that happens to work with my (more recent) 3.10 kernel. Also make sure that all inter-dependent modules are installed in the module directory. Make sure that no part of alsa is compiled directly into the kernel, but everything is compiled as module (i.e. replaced by the modules compiled from my repository). Maybe even the .config options are causing problems…

      • should i get the git repo from alsa-project.org and then patch it with your changes and compile ?

      • Please try with the instructions Tyler Richard has posted here (README.scarlett.kernel.patch).

  28. I think i could help you here by testing it.. but the issue is that i dont want to break the existing production setup for testing this… i may need to have a testing setup ready for this. let me prepare a test bed for this…

  29. Hey man I just bought a 6i6 sorry I know this is not quite the same but I am having trouble with it. I am running Linuxmint DE under 3.2. I’ve read that dudes running later kernels are having issues as well. I am able to see the scarlett in Jack but Jack only sees midi. Alsa mixer sees it as well but there are no controls available. Any input getting me started would be helpful. Thanks, John

    • I’d expect pcm in/out to just work with a more recent kernel. Mixer controls most certainly require a patched driver. I have yet to add the 6i6 mixer config to my repository; note that you currently have to compile the patched kernel module yourself.

  30. Hi Tobias, thanks for your work. I also just got a Scarlett 6i6 and have the same situation as John Goldsmith on a Linux Mint 15 (Ubuntu 13 based) machine. As expected, the soundcard work with Jack, alsamixer sees it but without controls, and the alsa module is not loaded.

    I don’t care much about the mixer controls, but I’m mostly interested in simply loading the snd_usb_audio module so that I can use it without running Jack. Would your patch work as it is for this scope?

    thanks!
    M

  31. Hey I was able to get my Scarlett 18i8 to work without any kernal work in Mint 15. It should have basic functionality, I can listen to youtube videos etc. All I had to do was change my pulseaudio card from my laptop’s default to the Scarlett. It should be listed in the advanced audio settings for Cinnamon.

  32. Yes the patch works for that. I also was able to get it working with pulse audio without adding the patch. If you don’t need seperate controll over the channels that would probably be sufficent.

  33. Hi all, I am a scarlett 18i20 owner, it works out of the box on my xubuntu 13.10 machine (3.11 “regular” kernel). I am going through the process of enabling the mixer controls, following the advices in this thread (btw: thanks everybody for your work!). I have a probably naive question: what are, at this time, the differences between Tobias’ and Tyler’s repositories? Which one I am supposed to use? And, in case I manage to get the mixer working, is there anything I can do to contribute back? Thanks again!

    • Tyler’s has a README and a patchfile to apply against the stock kernel. My repository might be more up-to-date (One of the reasons I have not yet accepted Tyler’s pull request is because I basically want some mechanism to automatically generate an updated patch file).

      Esp. for the 18i20 the mixer configuration is still unclear to me (you might have already read it here…). So if you get the driver running, it could be that the mixer controls are quite messed up in terms of what matrix control (volume, input selector, mix enum) changes what. If that is the case I would make some changes let you test them. That might be easier with my repository (and not the patchfile), but it also depends on your knowledge of the whole compilation and git stuff…

      • Hi Tobias, in the meanwhile I managed to patch my 3.11 kernel using Tyler’s patch and instructions, it was quite simple. I made some tests and the routing+mixing seems to work ok. I tried selecting different sources (pcm-s or mixes) for the outputs and even tried mixing some pcm-s in a mix, and it worked well, I plan to try with phisical inputs as well (didn’t have a mic or instrument with me). I read about your doubts, and I can confirm that the “mixes” should be 8 (this is the number of available mixes in MixControl for windows), so they should go from A to H (instead of A to P). I didn’t try what happens trying to use a mix past “H”, but I will.

        I also noticed that every configuration I set is lost after a power cycle. I read in these comments about a magic value that should be used to save the state (0x5a or something, sorry but I’m not familiar with this stuff). I had a glance to the patch and saw the value used somewhere, but again I didn’t understand how, so I don’t know if I’m missing something or it doesn’t work. I also tried using MixControl on windows to store a custom configuration using “Save to Hardware”, but then, back to linux, I’m again left with a “default” configuration. It might be that the stored configuration is only loaded when the card is used in “stand alone mode”, or something.

        Of course I would be happy to help you with the test. I’m not familiar with kernel compilation and git, but I am a (newbie) programmer so I can try, and I will! Also, a gui would be much needed, so if you or tyler or anyone else is planning to work on it, I’d be glad to help.

      • There is a “Save To HW” mixer control, which can be set to “Save” (it will jump back to “–” by itself, after moving away and back to the control). This should trigger the state saving.

        BUT — as you already noticed — this will only affect the “stand alone mode”, because the device has to be initialized by the linux driver (“again”), and the stored values cannot be read back from the device. The windows tool actually also just stores the settings used in the “connected mode” on the computer (similar to alsactl store/restore).

      • Yes, I saw the control but thought it was not “active”, I will try again and pay more attention. And yes, on window it’s the same. I just asked the support about this, and the person who answered me said that “load from hardware” is possible with saffire interfaces, and that he would ask the dev team if the feature can be added to the MixControl for the scarlett interfaces as well. Maybe there is another magic value for that 🙂

        Dave, do you know something about this possibility? I think this would be important, since losing all the routing and mixing settings at every power cycle could soon become too painful, until a separate application with save-to-file ability (like MixControl) is developed for linux.

      • The default alsa-utils init script (on debian) work quite well for me here (settings are stored on system shutdown(?)… or maybe I called alsactl manually?). You can also call alsactl store / alsactl restore manually as non-root user, if you specify a different file to store the state to (resp. restore from), e.g.
        /usr/sbin/alsactl store -c 2 -f mysettings.state
        (-c 2 is my scarett device).

        The restore spits a warning about not being able to restore the “Save To HW” – switch that can be ignored. I will look into fixing it at the driver level.

      • Wooah, great! I didn’t know about alsactl… it worked!

        I tested the analog inputs, and they work. I can also confirm that the mixes from “I” to “P” are useless. As soon as I have time I will try to compile the sound module from Tobias’ git repo, so I can test his modifications. Tyler, are you still working on the gui? Need some help with coding?

        (And now… Ardour, come to me!)

      • There are no big modifications yet in my repository above what is in Tylers’; I’ll remove the useless mix controls in my next commit.

      • @athos
        https://github.com/trrichard/ScarlettMixer

        Just some base stuff so far. Doesn’t work for anything but a virtual Scarlett yet I’ll probably change a lot in the next couple days but I’d love some help if you have time.

  34. Hi All,

    I am considering buying a Scarlett 18i8, and am new to linux. I am currently running the latest 12.04LTS, and am not sure which kernal is included in that. Based on what you have all learned, if I were to buy the Scarlett 18i8, what would I need to do to get it working?

    Thanks in advance, – Jim

  35. @Thobias or @Tyler
    Do I have to do any modification to try your drivers with a 6i6?

    Ps.: Great job you guy are doing. Hope to see it in mainstream alsa in the future.

  36. Gui should work. It detects the matrix size and inputs at runtime. Of course I haven’t tested it so if theres an issue let me know. The gui is still in development.

    • I just recompiled my kernel 3.8 with the patches and tried it with the 6i6 it didn’t work. Nothing changed from before, it showed up in Alsa with no capabilities. In Jack as midi in/out. Can’t garantee I compiled everything right though

      • Sounds like the module was not loaded into the kernel into the kernel. What steps did you take after building the module to load it into kernel? Did you use modprobe to load it at runtime or did you install it into your kernel’s modules directory?

        Can you post the results of
        $ modinfo snd_usb_audio
        as well.

      • I just now got around to adding (untested) support for 6i6 to my repository. Tyler also needs to update his patch, if you want to use the patch and not my git branch.

  37. Guess I should have bought a 2i2 or the 8i6 or a tascam, got this thing sitting on my desk all limp d..k.

  38. http://www.linuxmusicians.com/viewtopic.php?f=18&t=12079&p=49492#p49492

    Focusrite Scarlett 18i20 issues here,

    problems
    solutions ?

    had 18i6 up and running for last year, unit crapped out (lost one channel) just out of warranty…in middle of project !!!

    ran to local music store, bought the 18i20 brand new as this site when consulted says early on “should be running” and is listed along side of the 18i6 which did run..

    will not run, after many hours many attempts, following all directions on this and a variety of sites. even reinstalling and trying everything again…

    only on Linux since 2006, but not a guru for sure, just a working artist, not a hobbiest…

    Warning to anybody thinking of purchasing this unit – don’t !!! at least not yet.

    I have been a focusrite user for many years, first in analog audio (quality and great rep), but all experiences with digital Focusrite products has been less than stellar. (18i6 loses channel 14 months after purchase, always permanently installed, never moved and protected by very expensive power conditioner, only top rate cables…unit just died…however, i got it to work in Linux.

    Because I was such a Focusrite fan I dropped the cash on another Focusrite product…error…the old analog stuff is fantastic !!! always be a fan, the new digital stuff ??? buyer beware.

    • I’m sorry to hear of your frustration! Have you been in touch with your reseller regarding your 18i6? They may well be able to repair it for a small fee.

      I hope anyone reading this blog (and in particular this post!) understands that Focusrite does not officially support Linux. I’m not personally able to spend the time testing things out, let alone to make time for the test team here to investigate another platform.

      I’ll revisit the wording of the original post, in hindsight “could work” would have been more sensible.

  39. Thanks Dave, understood. I still did go for focusrite even after my own bad experience with one piece of gear, as I said a big fan of the analog gear. I trust that someone will have better luck and success than I did and will finally make it part of alsa so it will eventually work, until then forced back to windows (which, luckily, i always kept up to date for ‘plan b’). will be reinstalling my MIA card once I get uo the energy to pull my tower out of the nice baffled box and undo all the nice zapstrap cable runs that were done…ouch…no more linux multi-tracking for now…

    To be sure I did go with the 18i20 because of reading that it should work…and finding out the hard way it doesn’t was gruelling, but now will have to run 2 different monitoring systems one for windows and one for linux (with the pre 18i6 card i used – the MIA card which works still, i hope). I trust that one day it will come to work with linux, until then thank you for all your efforts.

  40. As I understand this, for the 18i20 the current state is: 3.8 kernels and higher should see the USB interface, and perhaps even take audio in and out using the normal alsa midi and alsa audio kernel modules. However, there is no mixer interface to these audio inputs/outputs/mixes by default. You have to apply a patch for mixing to the alsa drivers found in your kernels sources, then compile and (somehow) install this module, after uninstalling the default alsa modules. At that point you should be able to use the built in ‘alsamixer’ to control everything except the metering. Sound about right? And also there are no pull requests for the alsa project maintainers yet?

  41. Ok, tried it out on Ubuntu 12.04lts using a 3.8 kernel, works fine, or rather it connects without error and dmesg just says:

    [ 133.933909] usb 1-1.2: new high-speed USB device number 4 using ehci-pci
    [ 134.026898] usb 1-1.2: New USB device found, idVendor=1235, idProduct=800c
    [ 134.026905] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
    [ 134.026909] usb 1-1.2: Product: Scarlett 18i20 USB
    [ 134.026912] usb 1-1.2: Manufacturer: Focusrite
    [ 134.743886] usbcore: registered new interface driver snd-usb-audio

    ****

    !!! BUT everything QUITS if it’s clocked to anything but internal, ie. clocking to ADAT is a no go.

    ****

    Installing KX-Studio repos now so I can get WineASIO installed for Reaper.

    * NOTE * I first connected the unit to a windows box to get it’s internal mixer state set, and it also downloaded newer firmware, so I strongly suggest borrowing a windows box on first setup.

    • Hi All – Thanks for the great work you are doing to get the Focusrite products working on Linux!

      I just started today with my new Scarlett 18i8, and have gotten it working for my use case (Ardour DAW w/ Jack) under 12.04LTS using the 3.11 kernel. Like Andre, I started by updating firmware and setting up the mix on a windows box.

      Thanks again for all the work you are doing – if it were not for all of you, I would not have gotten up and running so quickly!

  42. hi guys,
    does someone has any link/documentation about an gui-mxer to manage scarlett 18i8 internal mixer (even an alpha release)?
    thks

  43. Ditto – I would be glad to assist with testing a mixer app.

  44. Tyler Richard started one: https://github.com/trrichard/ScarlettMixer
    I haven’t tested it myself, though (I mainly use qasmixer).
    It (both) requires the snd-usb-audio module with scarlett mixer support (i.e. my branch of alsa-driver, or the patch against the stock kernel that Tyler derived from it).

    • Hi! I had a problem with ScarlettMixer:
      $ scarlett_mixer
      Traceback (most recent call last):
      File “/usr/bin/scarlett_mixer”, line 9, in
      load_entry_point(‘scarlett-mixer==0.0.1’, ‘console_scripts’, ‘scarlett_mixer’)()
      File “/usr/lib64/python2.7/site-packages/pkg_resources.py”, line 353, in load_entry_point
      return get_distribution(dist).load_entry_point(group, name)
      File “/usr/lib64/python2.7/site-packages/pkg_resources.py”, line 2321, in load_entry_point
      return ep.load()
      File “/usr/lib64/python2.7/site-packages/pkg_resources.py”, line 2048, in load
      entry = __import__(self.module_name, globals(),globals(), [‘__name__’])
      File “build/bdist.linux-x86_64/egg/scarlett_mixer/main.py”, line 20, in
      File “build/bdist.linux-x86_64/egg/scarlett_mixer/scarlettgui.py”, line 5, in
      ImportError: cannot import name Publisher

      I’ve made the patch with which mixer works:
      diff -Naur ScarlettMixer.a/scarlett_mixer/main.py ScarlettMixer.b/scarlett_mixer/main.py
      — ScarlettMixer.a/scarlett_mixer/main.py 2014-03-13 13:55:31.466969503 +0600
      +++ ScarlettMixer.b/scarlett_mixer/main.py 2014-03-13 13:40:45.026051540 +0600
      @@ -18,6 +18,7 @@
      import mixer_model
      from docopt import docopt
      from scarlettgui import MixerConsoleFrame
      +from wx.lib.pubsub import setuparg1

      def main():
      diff -Naur ScarlettMixer.a/scarlett_mixer/scarlettgui.py ScarlettMixer.b/scarlett_mixer/scarlettgui.py
      — ScarlettMixer.a/scarlett_mixer/scarlettgui.py 2014-03-13 13:55:31.466969503 +0600
      +++ ScarlettMixer.b/scarlett_mixer/scarlettgui.py 2014-03-13 13:41:47.046276180 +0600
      @@ -2,7 +2,7 @@
      # Import the easiest to use scrolledpanel.
      import wx.lib.scrolledpanel as scrolled
      import math
      -from wx.lib.pubsub import Publisher
      +from wx.lib.pubsub import pub as Publisher

      TASK_RANGE = 50
      MIXER_CHANGED = “alsachanged”

      • Hey Daeavelwyn Kalandeth Baeltalquis I responded to your post on git hub.

        I’m removing the Publisher setup. It didn’t end up working out in the code. I’ll update the repo with that removed soon. You can just delete that import line if your comfortable doing that or wait for me to update.

  45. islisis said:

    >Nocturn: could work, though not USB class-compliant so would need a driver.
    >Could probably be adapted from the Launchpad driver with a
    >trivial change of USB PID (see below).
    It would be fantastic to see the Nocturn work in Linux or under WINE. Appreciate all the support you have given here!

    • matthew brandi said:

      Although this doesn’t seem to be very well known — and I don’t know who we have to thank —, the Nocturn does work under GNU/Linux. Try plugging it in and running:

      aconnect -io

      You should see something like:

      client 28: ‘Nocturn’ [type=kernel]
      0 ‘Nocturn MIDI 1 ‘

      Tested this morning using Ubuntu 16.04, but my guess is that any (recent) distro release will work.

      Of course, I don’t yet know how well it works. I am in the process of mapping the thing in Pure Data. It looks like just echoing the MIDI control messages received back at the Nocturn will light the appropriate lights, but it is early days. (For example, the learn button is controller 120: 127 = on (lit green); 0 = off.)

      Have fun.

    • matthew brandi said:

      Exception: speed dial seems to send CC 74 but receive CC 80 (to light its collar).

      CC 0 seems to be global (i.e. send 0 on CC 0 to douse all lights, and send 127 on CC 0 to light all lights).

      Knobs work in increment/decrement mode — as the x-fader seems to (oddly), but I haven’t mapped it yet.

      Touch mode is a simple on/off for most knobs (and works fine). I am not sure what the correct behaviour is for touching the speed dial (CC 82), but clicking it (CC 81) works fine.

      • The crossfader is 8-bit, so uses two MIDI messages – IIRC one for the top seven bits and another for the LSB (which you can just ignore).

      • matthew brandi said:

        Thanks for that. Most helpful. Since posting — too soon! — I had noticed that the x-fader was sending two controllers (one of which was sending 0 – 127 absolute position). It was spotting the one-bit controller first that confused me. I should learn to keep my mouth shut. 😉

  46. Hi,

    I’ve bought a 6i6, and it works and I’ve managed to record with it just using the knobs on the front. However, all the sound on the headphone jack is on the left channel, until I move Jack over to run on my internal sound card, and then the mix is fine as it should be from Ardour.

    I suppose I need the mixer application? I’m on Fedora 20 with all the latest updates.

    So, do I need to build the Alsa driver? If so, will it build against kernel 3.15.7-200.fc20.x86_64?

    I build the mixer app and ran it, but there are no controls, it’s blank.

    • romangarifullin said:

      If you install driver from repo linked earlier, you will be able to use standard alsa mixer

      • Does this mean this repo?

        https://github.com/smilingthax/alsa-driver_scarlett/

        I downloaded the latest from there, installed kernel-devel RPM from YUM and ran autoconf and make in the alsa sub directory and got this …

        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        make dep
        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        find: ‘/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/alsa-kernel/’: No such file or directory
        make[1]: Entering directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa’
        make[2]: Entering directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include’
        make -C sound prepare
        make[3]: Entering directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include/sound’
        make prepare2
        make[4]: Entering directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include/sound’
        cp ../../alsa-kernel/include/*.h .
        cp: cannot stat ‘../../alsa-kernel/include/*.h’: No such file or directory
        make[4]: *** [*.h] Error 1
        make[4]: Leaving directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include/sound’
        make[3]: *** [prepare] Error 2
        make[3]: Leaving directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include/sound’
        make[2]: *** [prepare] Error 2
        make[2]: Leaving directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa/include’
        make[1]: *** [dep] Error 1
        make[1]: Leaving directory `/home/biggaz/Downloads/alsa-driver_scarlett-s18i8/alsa’
        make: *** [include/sndversions.h] Error 2

      • romangarifullin said:

        Yes, but you should compile only drivers from sound/usb out-of-tree:
        make -C $KDIR M=$PWD

        -C $KDIR
        The directory where the kernel source is located.
        “make” will actually change to the specified directory
        when executing and will change back when finished.

        M=$PWD
        Informs kbuild that an external module is being built.
        The value given to “M” is the absolute path of the
        directory where the external module (kbuild file) is
        located.

        Or you may patch your kernel. I’ve patched from here: https://raw.githubusercontent.com/trrichard/alsa-driver_scarlett/1e1d90845d985d4e02b268822844d897b5bb01c1/scarlett.kernel.patch

  47. You can also use the official scarlett mixer with a virtualbox containing at least windows7 and usb 2.0 support enable in your host. IMO it’s actually the more complete solution as every mixers proposed aren’t really finalized :-/

  48. I think I managed to compile this, I got the following …

    snd-usb-audio.ko
    snd-usbmidi-lib.ko

    I then copied them to /lib/modules, and tried to modprobe them, which ran without error. I plugged in the Focusrite though, and ran alsa mixer, and it’s no better sadly.

    What have I done wrong?

    • romangarifullin said:

      Sorry, but in linux 3.16.0 I also cannot build this driver and patched kernel does not shows all mixer parameters (

    • romangarifullin said:

      Hi!
      I’ve successfully got a working mixer on 6i6. I’ve done next steps:
      1. Download repo https://github.com/smilingthax/alsa-driver_scarlett/
      2. Change directory to alsa-driver_scarlett/
      3. git diff b044dfe . > /tmp/scarlett.patch
      4. cd /usr/src/linux-3.16.1-tuxonice/sound/usb/
      5. patch -p3 < /tmp/scarlett.patch
      6. build and install kernel with usb sound device as usual

      • artabtv said:

        Hello, I confirm that it is working with the procedure above. I cannot see it in Jack as available channels, but I can record each channel separatelly with Alsa and audacity. Does it work for you with Jack?

      • I tried doing this, the patch doesn’t apply cleanly on Fedora. I was trying to build an RPM that I could share here.

        There’s a problem with the quirks-table.h modifications. I tried to sort it out but I’m not good enough with linux patch tools.

      • romangarifullin said:

        I can see channels in jack (now connected via alsa_in and alsa_out):

  49. Are there any users of the Forte using Linux to confirm whether or not the device works? I’m looking at buying one (I will be using it on Windows also), even if it only works as a DAC on Linux for now, that will do the trick.

    • I bought a Forte some time ago. It only works as a sound output on Linux. You can’t use it to record anything since all the input/output settings are made on the soundcard itself, through a GUI that runs from a Windows-only deamon.. Such a shame it doesn’t work with Linux, I get so annoyed with Windows nowadays.

  50. Scarlett support is starting to make progress getting into Linux. See the start of the thread here: http://article.gmane.org/gmane.linux.alsa.devel/128371

    davehodder: if you folks are working on any changes to the Scarlett to make it more UAC2 compatible (for example), now would be a good time to share that before a lot of special case code makes its way into the Linux kernel. 🙂

    • Cheers Adam – I must confess that we’re not currently working on any changes to UAC2 support.

      FYI, there are extensions to some of the descriptors to capture information about channel count changes at different sample rates. In particular, the ADAT channels are halved at > 48kHz for SMUX, and the UAC2 spec makes no provision for this. I can provide more information if you’re interested? We definitely won’t be removing this as it’s necessary for smooth sample rate management on Windows.

      Cheers!
      Dave

  51. As of today, 1/7/2015, support for all of the Scarlett devices is in the 3.19rc3 kernel and will presumably make its way into the 3.19 release. Canonical provides pre-compiled upstream kernels for Ubuntu. Instructions for downloading and installing these kernels are here: https://wiki.ubuntu.com/Kernel/MainlineBuilds.

    Thanks to Tobias Hoffman, Robin Gareus, Chris Arges, Takashi Iwai, and whoever else put time and effort into getting this to work and getting it into the mainline kernel.

    • That’s great news! I know we’re not exactly proactive in supporting the community, but I’d like to echo Paul’s thanks to all those who have helped out.

    • martinschwenke said:

      That’s awesome! Thanks to all those involved!

    • Great work all involved. I’m really greatful! Hope to see this on Fedora soon!

  52. quietpenguin said:

    I have a question regarding the routing configuration in the Saffire PRO 24.

    I’m successfully using the snd-firewire-improve alsa modules (which will be default in kernel version 3.19 – I have used dkms to install them under kernel version 3.18).

    See https://github.com/takaswie/snd-firewire-improve

    The streaming from / to the Focusrite Saffire PRO 24 audio interface is perfect without any XRUNs – compliments to Takashi Sakamoto for a cool piece of programming..

    Unfortunetly, there is as yet no generic mixer for dice (eap) based audio interfaces in alsa-tools.

    I am looking for a solution (other than ffado) to configure the routing in the PROs input , output and monitoring sections. A linux command line solution would be OK.

    I should mention here that I have tried unsuccessfully over the last 5 weeks to get the ffado library to work:
    The ffado driver fails to synchronise with jack..
    The ffado mixer app switches the input but not the output and monitoring sections of the Saffire PRO 24
    The channel numbering in the ffado mixer inputs is crossed 1+2 >> 3+4 and vice versa.

    I am not a programmer and cannot judge the quality of the programming of the ffado code but it is buggy. The standard answer from the ffado-team is that it’s probably the firewire host controller, which is definitely not the case as the perfectly working alsa snd-firewire, snd-dice modules prove.

    Any ideas?

  53. I just posted my ongoing contribution for Scarlett UI in HTML5. A 1st screenshot is avaliable at http://breizhme.net/alsajson/ The code relies on new Scarlett Linux Alsa driver based on RobinX42 reverse engineering. Since kernel version 3.19.1 Scarlette driver is now included in Linux vanilla kernel, Scarlett boards should very soon work out of the box.

    My code is split in two parts:
    1- AlsaJsonGateway https://github.com/fulup-bzh/AlsaJsonGateway
    2- HTML5 https://github.com/fulup-bzh/AlsaJsonMixer

    The AlsaJsonGateway is 100% independant of any sound boards. It is an almost flat port to JSON/REST world of the old amixer.c command line. [In fact I’m wondering why this fonctionnality is not standard in Alsa] The gateway also supportd basic http services for HTML/CSS files. It supports soundcards discovery, getcontrols and since this night setcontrols. What remains to implement outside of making the code more robust is a session management to store/restore boards settings [should be easy].

    The UI is 100M% HTML5. It uses Foundation-5 for graphic rendering and Angular for JavaScript framework. It still very early days, but hopefully the demo at http://breizhme.net/alsajson/ provides a good example of HTML5 potentiallities. Note that the demo runs with a fake sound board [flat copy of JSON response from my development machine] also feel free to play with all bouttons you wont break anything. They is still a signifant work to do, but hopefully I we not need any new graphical widgets, currently I have: sliders [synchonized for sereo] Knob for balance and input selector with avaliable/disable status and tabs for mixes. UI will not be 100% like M$ one, but should remains close enough for people not to get lost.

    The beauty of HTLM5 is to support both local and remote mode. It allows to drive sound board through an embedded device from a WIFI tablet. The AlsaJsonGateway is a very small piece of code written on C that should be pretty easy to port on any plateform supporting GNU lighttpd. Obviouslty if Focuritte had open API on its board implementing a nice UI would be easier.

    At the end the only significant missing part should be input-level bars. 1st if I understood correcly Alsa driver port does not include them. Second level bar are realtime info, this would impose to add a websocket on top of my gateway and while not impossible it not an easy job !!!

    • What a wonderful bit of work, wow!

      I agree – it would be lovely to run something like your JSON gateway on the device, but that would mean waaaaay more complexity / RTOS etc. and put the cost up significantly.

      You can read the meters from the device (you definitely don’t want to try and meter on the host in realtime) – though if the Alsa driver doesn’t expose them you’d need to talk USB to the device directly which would mess up your abstraction.

      Good luck!
      Dave

  54. Today running a webserver on an embedded ship does not really cost anything, but that something only manufacturer can choose to implement or not. We are entering in the world of APIs and every new generation of devices should have a REST interface. Today hardware cost increase to support REST on WIFI is probably less than 10€.

    To come back to MixerUI, would it be possible to request meters directly from USB without unloading Audio driver ? I’m not sure it would be possible to transmit them in realtime, but ar least sending peak information would be nice.

    For UI hopefully by the end of the week I will have a working version that people can start to play with.

  55. For info, I posted ALPHA-1 version of AlsaJsonGateway on https://github.com/fulup-bzh/AlsaJsonGateway I would be please to get some help for testing. It works on OpenSuse/64bit and Min/32bit but while I’ve try to make the code robust, I unfortunatly may have miss stuffs 🙂

    This ALPHA supports every ALSA Read & Write controls as well as a session management to store boards config on disk. Session not only allows to restore config when board is power off/on, but can be used to save multiple specifics configuration options.

    The REST/API as well as JSON objects gramar should now be stable.

    Conclusion: if you’re afraid of compiling a small C programm [you be strait forward on any Linux plateform], please let me know if it works for you.

  56. I posted the 1st working version of my Scarlette Mixer interface for Linux. It’s still the early days and some more work need to be done. Nevertheless this version should work for most of us. I implemented 100% of Alsa drivers controls and added a session management to keep track on preferences when power on/off the board.

    As it s pure HTML, you can check the demo online from: http://breizhme.net/alsajson/index.html Note nevertheless that the interface is not designed to be used in remote mode. The fake AlsaJsonGateway I installed on my server, might be a little slow for the initial loading, but it should be enough to get a good idea of the rendering.

  57. Posted a fully operationnal version of Linux Scarlett Mixer UI. The mixer now provides full control of board input routings for both playbacks and jackd captures. It handles playback output routings and volulme controls as well as every switched expect for the ‘save to hardware’ that I did not find within Alsa driver.

    On top of board traditionnal controls, UI provides a complete session load/store mechanism to restore specific mix you may have for your differents projects. A default ‘current-session’ allows to plug/unplug the board without loosing all your parameters.

    * Demo: http://breizhme.net/alsajson
    * Video https://vimeo.com/user36538868/alsa-html5-mixer

    Note: While I’ve try to make the code as generic as possible, I only tested it with 18i8. UI should work with any other board that uses the same Alsa driver and should be pretty easy to adapt to any other class of board, but someone will have to do the job.

  58. Well, I just upgraded to Fedora 22 beta, with kernel 4.0.1-300.fc22.x86_64, so now I should have the latest alsa code for my 6i6.

    I ran alsamixer, and there are now a SHED load of controls for this sound card.

    I’ve always had the problem that only the left channel of audio could be heard on the monitor/headphone jack. I thought playing with these settings would allow me to fix this. I tried changing the volume of “Master 1 (Monitor)”, and after turning it up, all sound output stopped (Hydrogen drum machine was running).

    So, now I’ve gone from a card with only the left channel working, to one that doesn’t do anything. I’ve played with various values to no avail.

    Master monitor has Master 1L (Monitor) Source, and Master 1R (Monitor) Source. These are set to PCM1, is that the same as in Jack connections being connected to System > Playback 1?

    I also tried this JSON web page for controlling the card. Personally I think a Gtk or Qt front end would have been better, but each to their own. Anyway, I installed the back end RPM for Fedora, and copied the HTML into /home/gaz/AWG. It finds my Focusrite and it’s in the list, but I can’t click on it to bring up any controls.

    So … disaster … I have a new door stop.

    • If you checked AlsaJson gateway readme, it is noted. First that you need to install the JsonMixer independantly, as the Mixer is not included within gateway package. Second that only the 18i8 is currently supported.
      I do not have a 6i6 to test it, hopefully if its driver is compatible with the 18i8, registering the board should be enough. Board registration is done in AlsaJsonMixer/src/common-ui/js/BootMixerApp.js just add a line with your board name and if it work report it, I will add it to the list.

    • I’ve noticed some issues with the new mixer. I haven’t had time to look into it, but the problems I see can usually be worked around by toggling the controls in alsamixer back and forth. It looks like the new mixer code doesn’t properly set all the initial settings, and by changing them, you can restore functionality.

      Looking into this is on my long-term todo list, so if no one gets to it, I probably will have a look at some point.

  59. earthwormgaz: The 18i20 is now added to Fulup’s code.
    For example: To get your desktop program audio on your headphones:
    [1] Install jack pulse audio bridge
    [2] start jack
    [3] select pulse-audio bridge in Linux audio settings
    [4] run a brower or your audio app the send audoi to Pulse,, for example youtube
    [5] In alsamixer select for the master 4 (and/or 5) the PCM1/2 input.
    [6] Enable output switches 7/8/9/10.
    You can also route audio through a mix, for example select PCM1/2 as input for 1,2. Put volume sliders up and select Mix A out for master 4 or 5. Test the analog output and volume controls. Found so far that HP1/2 volume cannot be controlled. HP1/2 are hard-wired to analog 7/8/9/10 out too. (master 4/5) So far this looks like bug in the mixer as other analog outputs do work with the volume controls.The master volume does not work as well and switch 21 has no effect. Some other features which are in the 18i8 and not in the 18i8 are not implemented such as the routing presets: Clear,DAW Tracking, Zero Latency Tracking,and Mixing. Fulup mentioned that the information the ALSA mixer replies does not contain these enumeration values, this as well for the pads, impedance and 48V seem not have ALSA function. (perhaps a driver issue issue) . But for the rest, it all functional.Thanks to Fulup for al the help to make it work.

  60. eathwrogaz: Just saw you have an 6i6. Just locate the common-mixer.js fle, there is an entry for the 18i8 (and 18i20 in the latest version) Just add a line for the 6i6 or change one to something like when(“/scarlett-6i6-usb”,{redirectTo:”/scarlett”.

  61. I’m trying to get the 8i6 mixer working on Ubuntu 15.04. Kernel 3.19.0-18-generic recognises the device and it’s inputs and outputs correctly. alsamixer works but the mixer matrix seems a bit messed up:
    – An 18×6 matrix is set up – is that right? I was expecting and 8×6 matrix
    – Nothing comes out of Mix A or Mix B. Mix A,B,C & D appear mapped to Mix C,D,E & F
    – Only Matrix Input 01 has any effect – Matrix Input 02-18 don’t work

    I’m able to build and test snd-usb-audio.ko. It looks to me that I need to play with the settings in scarlett_device_info s8i6_info.

    Can anyone provide some guidance as to all the magic numbers in that structure?

  62. “– An 18×6 matrix is set up – is that right?” – I now realise that 18×6 matrix is right
    “– Only Matrix Input 01 has any effect – Matrix Input 02-18 don’t work” – Not sure what was going on there! All matrix inputs now seem to work fine.

    Still get nothing from Mix A or Mix B but that’s no big deal. Mixer seems to be working. Yay.

    • “– Nothing comes out of Mix A or Mix B. Mix A,B,C & D appear mapped to Mix C,D,E & F”

      I run my newly aquired 8i6 on kernel 4.0.5-gentoo and can confirm this. With alsamixer Mix A and Mix B are dead, the firs four sliders of every matrix entry go to Mix D-F and the last two faders have no effect. This seems to be a two-off bug in the drivers, …I failed to understand the offsets in the info structs in sound/usb/mixer_scarlett.c.

      Everything else seems to work, though. I guess I can live with 4 instead of 6 mixes.

  63. As happy music wrote about the 18i20 current ALSA driver does not support all sound controls. Outside of snooping missing command from USB under windows and ask Alsa developers to include them, they is not much to do.

    On mixer UI side it is somehow easier. If you send me the output of your CTRL_GET_ALL, I will be able to integrate your board within Mixer/UI. In order to get CTRL_GET_ALL for your board, send http://localhost:1234/jsonapi?request=ctrl-get-all&cardid=hw:1 changing ‘hw:1’ to what ever your Scarlett board is.

    Please: send your request about UI/Mixer bug directly on bug tracker at https://github.com/fulup-bzh/AlsaJsonMixer/issues

  64. Thanks Fulup Ar Foll. I’d like to try your mixer but am still having kernel problems.

    Ubuntu 15.04. Kernel 3.19.0-18-generic makes my laptop run very hot (low cpu so something in the kernel?) whenever playing or recording audio direct from alsa or via jack.

    Starting with 3.16.0-38-generic solves the overheating problem and I can record and playback properly using alsa direct or jack but, of course, no mixer support 😦

    I’ve got the kernel source for 3.16.0 but this patch (described above) doesn’t apply cleanly and will not compile.
    “1. Download repo https://github.com/smilingthax/alsa-driver_scarlett/
    2. Change directory to alsa-driver_scarlett/
    3. git diff b044dfe . > /tmp/scarlett.patch
    4. cd /usr/src/linux-3.16.1-tuxonice/sound/usb/
    5. patch -p3 < /tmp/scarlett.patch
    6. build and install kernel with usb sound device as usual"

  65. I run the 18i20 without any kernel changes. just Ubuntu 15.04 out of the box.

    On github, in the ALSA driver source file mixer_scarlett.c there is code commented:

    830 /*{ .num = 1, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
    831 { .num = 1, .type = SCARLETT_SWITCH_PAD, .name = NULL},
    832 { .num = 2, .type = SCARLETT_SWITCH_IMPEDANCE, .name = NULL},
    833 { .num = 2, .type = SCARLETT_SWITCH_PAD, .name = NULL},
    834 { .num = 3, .type = SCARLETT_SWITCH_PAD, .name = NULL},
    835 { .num = 4, .type = SCARLETT_SWITCH_PAD, .name = NULL},*/

    For the 18i8 this code it is not commented. Perhaps this is the reason why some controls on the 18i20 are not supported through the alsa-mixer?

  66. Also suggest to change the following:
    { .num = 3, .type = SCARLETT_OUTPUTS, .name = “Line 7/8” },
    { .num = 4, .type = SCARLETT_OUTPUTS, .name = “Line 9/10” },
    into :
    { .num = 3, .type = SCARLETT_OUTPUTS, .name = “Line 7/8/Headphone 1” },
    { .num = 4, .type = SCARLETT_OUTPUTS, .name = “Line 9/10/Headphone 2” },
    since these line outputs are hardwired to the head-phone outs in the 18i20.

  67. Hi guys, is there a way to get Focusrite Scarlett Solo’s controls working
    under linux? Ubuntu 15.04 (kernel 3.19.0-21-generic) and Alsa v1.0.28)..
    I can record from my mic but I can’t use controls of the card… Please help.

  68. Hi Guys,
    Nice support page, but it would deserve a small update:
    Could we get also a statement regarding the new thunderbolt interfaces?

  69. Are there any infos regarding Thunderbolt Audio Interfaces under Linux? This would be really cool (Ardour, Bitwig under Linux etc.). Is this any standard or quasi standard audio over Thunderbolt or something proprietary? Many thanx, Niels.

    • It be really cool to have information about Scarletts 2nde Gen and ALSA support. If you, guys at focusrite, could just try it and let the community knows if it works and if not, why 🙂

  70. Hello,
    anyone got some easy tips to make the 18i8 second generation run? Im working with a debian jack audio system.
    Thanks, Serafin