tree: c738d4d99fffea40e90c0db3e8763e2de4e566a2 [path history] [tgz]
  1. client/
  2. examples/
  3. src/
  4. tools/
  5. .gitignore
  6. configure.ac
  7. cras.mk
  8. git_prepare.sh
  9. install_deps.sh
  10. libcras.pc.in
  11. Makefile.am
  12. README.dbus-api
  13. README.md
cras/README.md

CRAS = ChromeOS Audio Server

Directories

  • src/server - the source for the sound server
  • src/libcras - client library for interacting with cras
  • src/common - files common to both the server and library
  • src/tests - tests for cras and libcras
  • src/fuzz - source code and build scripts for coverage-guided fuzzers for CRAS

Building from source:

# Generate install-sh
./git_prepare.sh

# Configure
CC=clang \
CXX=clang++ \
CXXFLAGS="-g -O2 -std=gnu++11 -Wall" \
CFLAGS="-g -O2 -Wall" \
./configure --disable-alsa-plugin

# Compile
make -j$(nproc)

# Compile with unit tests
make -j$(nproc) check

# Install binaries to /usr/bin
sudo make install

Code complete for for editors

You need to install bear first and generate compile commands for language server plugins in editors by

make clean && make compile_commands.json

Then you‘ll get compile_commands.json for editor. Import the JSON file to your editor and you’ll get useful code complete features for CRAS and its unit tests.

Configuration:

Device Blocklisting:

Blocklist of certain USB output device(s) is possible by modifying the config file /etc/cras/device_blocklist.

The format of this file is as follows:

[USB_Outputs]
  <vendor_id>_<product_id>_<checksum>_<device_index> = 1

Where vendor_id and product id are the USB identifiers for the card to blocklist. The checksum is the output of “cksum” command applied to the sysfs “descriptors” file of the device. The device index specifies the index of the output device in the card to blocklist. This is a bool parameter, so ‘= 1’ enables the option.

Example, blocklisting the non-functional output device reported by the C-Media based CAD-u1 mic:

[USB_Outputs]
  0d8c_0008_00000000_0 = 1

Card Configuration:

There can be a config file for each sound alsa card on the system. This file lives in /etc/cras/. The file should be named with the card name returned by ALSA, the string in the second set of ‘[]’ in the aplay -l output. The ini file has the following format.

[<output-node-name>] ; Name of the mixer control for this output.
  <config-option> = <config-value>

output-node-name can be speficied in a few ways to link with the real node:

  • UCM device name - The name string following the SectionDevice label in UCM config, i.e. HiFi.conf
  • Jack name - Name of the mixer control for mixer jack, or the gpio jack name listed by ‘evtest’ command.
  • Mixer control name - e.g. “Headphone” or “Speaker”, listed by ‘amixer scontrols’ command.

Note that an output node matches to the output-node-name label in card config by priorty ordered above. For example if a node has UCM device, it will first search the config file for the UCM device name. When not found, jack name will be used for searching, and lastly the mixer output control name.

config-option can be the following:

  • volume_curve - The type of volume curve, “simple_step” or “explicit”.
  • Options valid and mandatory when volume_curve = simple_step:
    • max_volume - The maximum volume for this output specified in dBFS * 100.
    • volume_step - Number of dB per volume ‘tick’ specified in dBFS * 100.
  • Options valid and mandatory when volume_curve = explicit:
    • dB_at_N - The value in dB*100 that should be used for the volume at step “N”. There must be one of these for each setting from N=0 to 100 inclusive.

Example: This example configures the Headphones to have a max volume of -3dBFS with a step size of 0.75dBFS and the Speaker to have the curve specified by the steps given, which is a 1dBFS per step curve from max = +0.5dBFS to min = -99.5dBFS (volume step 10 is -89.5dBFS).

[Headphone]
  volume_curve = simple_step
  volume_step = 75
  max_volume = -300
[Speaker]
  volume_curve = explicit
  dB_at_0 = -9950
  dB_at_1 = -9850
  dB_at_2 = -9750
  dB_at_3 = -9650
  dB_at_4 = -9550
  dB_at_5 = -9450
  dB_at_6 = -9350
  dB_at_7 = -9250
  dB_at_8 = -9150
  dB_at_9 = -9050
  dB_at_10 = -8950
  dB_at_11 = -8850
  dB_at_12 = -8750
  dB_at_13 = -8650
  dB_at_14 = -8550
  dB_at_15 = -8450
  dB_at_16 = -8350
  dB_at_17 = -8250
  dB_at_18 = -8150
  dB_at_19 = -8050
  dB_at_20 = -7950
  dB_at_21 = -7850
  dB_at_22 = -7750
  dB_at_23 = -7650
  dB_at_24 = -7550
  dB_at_25 = -7450
  dB_at_26 = -7350
  dB_at_27 = -7250
  dB_at_28 = -7150
  dB_at_29 = -7050
  dB_at_30 = -6950
  dB_at_31 = -6850
  dB_at_32 = -6750
  dB_at_33 = -6650
  dB_at_34 = -6550
  dB_at_35 = -6450
  dB_at_36 = -6350
  dB_at_37 = -6250
  dB_at_38 = -6150
  dB_at_39 = -6050
  dB_at_40 = -5950
  dB_at_41 = -5850
  dB_at_42 = -5750
  dB_at_43 = -5650
  dB_at_44 = -5550
  dB_at_45 = -5450
  dB_at_46 = -5350
  dB_at_47 = -5250
  dB_at_48 = -5150
  dB_at_49 = -5050
  dB_at_50 = -4950
  dB_at_51 = -4850
  dB_at_52 = -4750
  dB_at_53 = -4650
  dB_at_54 = -4550
  dB_at_55 = -4450
  dB_at_56 = -4350
  dB_at_57 = -4250
  dB_at_58 = -4150
  dB_at_59 = -4050
  dB_at_60 = -3950
  dB_at_61 = -3850
  dB_at_62 = -3750
  dB_at_63 = -3650
  dB_at_64 = -3550
  dB_at_65 = -3450
  dB_at_66 = -3350
  dB_at_67 = -3250
  dB_at_68 = -3150
  dB_at_69 = -3050
  dB_at_70 = -2950
  dB_at_71 = -2850
  dB_at_72 = -2750
  dB_at_73 = -2650
  dB_at_74 = -2550
  dB_at_75 = -2450
  dB_at_76 = -2350
  dB_at_77 = -2250
  dB_at_78 = -2150
  dB_at_79 = -2050
  dB_at_80 = -1950
  dB_at_81 = -1850
  dB_at_82 = -1750
  dB_at_83 = -1650
  dB_at_84 = -1550
  dB_at_85 = -1450
  dB_at_86 = -1350
  dB_at_87 = -1250
  dB_at_88 = -1150
  dB_at_89 = -1050
  dB_at_90 = -950
  dB_at_91 = -850
  dB_at_92 = -750
  dB_at_93 = -650
  dB_at_94 = -550
  dB_at_95 = -450
  dB_at_96 = -350
  dB_at_97 = -250
  dB_at_98 = -150
  dB_at_99 = -50
  dB_at_100 = 50