2024/03/03 Takashi Sakamoto
This project is a sub-project within Advanced Linux Sound Architecture a.k.a ALSA, aimed to provide user space service programs for Audio and Music units connected to IEEE 1394 bus, supported by drivers in ALSA firewire stack.
The latest release is
version 0.2.0 <https://github.com/alsa-project/snd-firewire-ctl-services/releases/tag/snd-firewire-ctl-services%2Fv0.2.0>
_.
The service programs are designed to operate digital signal processing function in the audio and
music units connected to IEEE 1394 bus. The service programs work as
message broker <https://en.wikipedia.org/wiki/Message_broker>
_. ALSA control and sequencer
applications are available as an end to communicate to the service programs. The audio and music
units in IEEE 1394 bus is the opposite end. The service programs receives messages from both
ends, then translates and convert the messages to send to the opposite end. The internal design of
the programs are illustrated in Design note
section.
The project provides the following service programs in the form of Rust binary crates:
snd-firewire-digi00x-ctl-service For sound card bound to ALSA firewire-digi00x driver (snd-firewire-digi00x) snd-firewire-tascam-ctl-service For sound card bound to ALSA firewire-tascam driver (snd-firewire-tascam), or TASCAM FE-8. snd-fireworks-ctl-service For sound card bound to ALSA fireworks driver (snd-fireworks) snd-firewire-motu-ctl-service For sound card bound to ALSA firewire-motu driver (snd-firewire-motu) snd-oxfw-ctl-service For sound card bound to ALSA oxfw driver (snd-oxfw) snd-bebob-ctl-service For sound card bound to ALSA bebob driver (snd-bebob) snd-dice-ctl-service For sound card bound to ALSA dice driver (snd-dice) snd-fireface-ctl-service For sound card bound to ALSA fireface driver (snd-fireface)
The project provides neither GUI programs nor end-user interfaces against expectation of users,
The main motivation of project is to preserve the way (protocol) to operate the audio and music units in IEEE 1394 bus, which was defined by several vendors.
Currently below devices are supported. If you would like to add support for your device, please contact to developer.
snd-firewire-digi00x-ctl-service
snd-firewire-tascam-ctl-service
snd-fireworks-ctl-service
snd-firewire-motu-ctl-service
Version 1 models
MOTU 828
MOTU 896
Register DSP models
MOTU Traveler
MOTU 828mkII
MOTU 896HD
MOTU UltraLite
MOTU 8pre
MOTU 4pre
MOTU AudioExpress
Command DSP models
MOTU 828mk3 (FireWire only)
MOTU 828mk3 (Hybrid)
MOTU 896mk3 (FireWire only)
MOTU 896mk3 (Hybrid)
MOTU UltraLite mk3 (FireWire only)
MOTU UltraLite mk3 (Hybrid)
MOTU Traveler mk3
MOTU Track 16
snd-oxfw-ctl-service
snd-bebob-ctl-service
snd-dice-ctl-service
snd-fireface-ctl-service
Former models
Fireface 800
Fireface 400
Latter models
Fireface UCX
Fireface 802
Due to a lack of information about the target devices, certain restrictions are unavoidable. However, we welcome any assistance that can enhance the project.
snd-bebob-ctl-service
snd-fireworks-ctl-service
snd-dice-ctl-service
snd-firewire-digi00x-ctl-service
snd-firewire-tascam-ctl-service
snd-firewire-motu-ctl-service
unsolicited response
system message.snd-fireface-ctl-service
github repository <https://github.com/alsa-project/snd-firewire-ctl-services>
_.Some library crates are released under MIT license. They are available in <crates.io>
_
as well.
alsa-ctl-tlv-codec <https://crates.io/crates/alsa-ctl-tlv-codec>
_ieee1212-config-rom <https://crates.io/crates/ieee1212-config-rom>
_ta1394-avc-general <https://crates.io/crates/ta1394-avc-general>
_ta1394-avc-audio <https://crates.io/crates/ta1394-avc-audio>
_ta1394-avc-stream-format <https://crates.io/crates/ta1394-avc-stream-format>
_ta1394-avc-ccm <https://crates.io/crates/ta1394-avc-ccm>
_Some library crates for protocol implementation are released under GNU Lesser General
Public License v3.0 or later with respect to clause for reverse engineering. They are
available in <crates.io>
_ as well.
firewire-bebob-protocols <https://crates.io/crates/firewire-bebob-protocols>
_firewire-fireworks-protocols <https://crates.io/crates/firewire-fireworks-protocols>
_firewire-oxfw-protocols <https://crates.io/crates/firewire-oxfw-protocols>
_firewire-dice-protocols <https://crates.io/crates/firewire-dice-protocols>
_firewire-digi00x-protocols <https://crates.io/crates/firewire-digi00x-protocols>
_firewire-tascam-protocols <https://crates.io/crates/firewire-tascam-protocols>
_firewire-motu-protocols <https://crates.io/crates/firewire-motu-protocols>
_firewire-fireface-protocols <https://crates.io/crates/firewire-fireface-protocols>
_The other crates are for runtime and released under GNU General Public License Version 3.
Rust programming language <https://www.rust-lang.org/>
_ v1.65 or later.
Cargo
glib <https://developer.gnome.org/glib/>
_
libhinawa v4.0 or later <https://git.kernel.org/pub/scm/libs/ieee1394/libhinawa.git/>
_
libhitaki v0.2 or later <https://github.com/alsa-project/libhitaki>
_
alsa-gobject v0.3 or later <https://github.com/alsa-project/alsa-gobject/>
_
The library crates enumerated in License
section are downloaded from <crates.io>
_ when
building by configurations of Cargo.toml
.
In Debian 13.0 (trixie) or later, some packages are available in the repositories instead of the manual installation of dependent libraries.
libhinawa source package <https://tracker.debian.org/pkg/libhinawa>
_
libhinawa4
libhinawa-dev
gir1.2-hinawa-4.0
libhitaki source package <https://tracker.debian.org/pkg/libhitaki>
_
libhitaki0
libhitaki-dev
gir1.2-hitaki-0.0
In Ubuntu 24.04 LTS (Noble Numbat) or later, the packages are also available by Debian import mechanism.
Build ::
$ cargo build
Execute temporarily ::
& cargo run --bin (the executable name) -- (the arguments of executable)
All of executables can print help when either --help
or -h
is given as an argument of
command line. In the most executables, the first positional argument is the numeric identifier of
sound card in Linux sound subsystem. For further information, please refer to Runtime debugging
clause.
Once the service program runs, it remains to dispatch events until receiving SIGTERM signal (e.g. press Ctrl + C) or detecting disconnection of the device.
Install executables ::
$ cargo install --path (path to binary crate)
The runtime crates which provide the executables are listed below:
snd-firewire-digi00x-ctl-service
snd-firewire-digi00x-ctl-service
crate locates in runtime/digi00x
snd-firewire-tascam-ctl-service
snd-firewire-tascam-ctl-service
crate locates in runtime/tascam
snd-fireworks-ctl-service
snd-fireworks-ctl-service
crate locates in runtime/fireworks
snd-firewire-motu-ctl-service
snd-firewire-motu-ctl-service
crate locates in runtime/motu
snd-oxfw-ctl-service
snd-oxfw-ctl-service
crate locates in runtime/oxfw
snd-bebob-ctl-service
snd-bebob-ctl-service
crate locates in runtime/bebob
snd-dice-ctl-service
snd-dice-ctl-service
crate locates in runtime/dice
snd-fireface-ctl-service
snd-fireface-ctl-service
crate locates in runtime/fireface
The executable is usually installed under ~/.cargo/bin
, while it's possible to choose the path.
In detail, please refer to
manual of cargo install <https://doc.rust-lang.org/cargo/commands/cargo-install.html>
_.
Uninstall executables ::
$ cargo uninstall -p (name of runtime crate)
All executables support an option for log level for debugging. When either -l
or
--log-level
is given with log level, they prints verbose logs to standard output.
At present, debug
is just supported for the log level.
This function is implemented by tracing <https://crates.io/crates/tracing>
and
tracing-subscriber <https://crates.io/crates/tracing-subscriber>
crates.
<https://ieeexplore.ieee.org/servlet/opac?punumber=8030>
_<https://web.archive.org/web/20210216003030/http://1394ta.org/specifications/>
_
.. image:: docs/control-model.png :alt: control model
.. image:: docs/measure-model.png :alt: measure model
.. image:: docs/notify-model-a.png :alt: notify-a-model
.. image:: docs/notify-model-b.png :alt: notify-b-model
.. image:: docs/overview.png :alt: overview