Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Jun 2021 14:11:22 +0300
From:      Christos Margiolis <christos@freebsd.org>
To:        soc-status@freebsd.org
Cc:        hselasky@freebsd.org
Subject:   [GSoC'21 Weekly Update #2] Sound mixer improvements
Message-ID:  <20210621111122.ygoea7mqqbpiolc2@knob.station>

next in thread | raw e-mail | index | archive | help
Hello,

This is the last week's progress report.

mixer(3):

- Even though the OSS API works with volume values from 0 to 100, the
  caller now uses normalized 32-bit float values which get converted 
  by the library before calling the appropriate ioctl.
- Implemented functions for getting and setting the default audio card.
- Started using some of the OSSv4 API's ioctls. Since a few of them are
  missing on FreeBSD, I'm probably going to be updating the OSS kernel 
  drivers in /usr/src/sys/dev/sound/.

mixer(8):

- Got rid of the old implementation almost completely.
- We're now using 32-bit floats here as well.
- Added a few new options (their letters or behavior might change 
  in the future):
    * -a for printing information for _all_ mixers available in the 
      system (e.g /dev/mixer0.../dev/mixerN)
    * -d for setting the default audio card. The argument is the
      _number_ of the audio card we want to set as the default 
      (e.g 0 for pcm0).
    * -o for printing the mixer information in a format suitable for
      scripts like /etc/rc.d/mixer. It's a replacement for the old -s
      and -S options.
    * -r for modifying a recording source. It's simply a different
      implementation of the old mixer(8)'s `{+|-|^|=}rec rdev` 
      interface but it's easier to parse.
    * -s for printing _only_ the recording source(s) in a mixer.
- Made the program's output similar to `pciconf -lv` since now we're
  dealing with more information, and not just volume knobs. This might
  change though, depending on how much we'll have to print.
- The output also includes information for the audio card associated
  with the mixer, so /dev/sndstat is no longer needed to be checked.

Below is a sample output of my version of mixer(8).

The header has the mixer's audio card information, including the kernel
module. Then, the first column is the mixer device's name, the second 
is the left and right volumes, the third is the panning and the last 
columns have information about whether the device is a 
playback/recording/recording-source device:

$ mixer_prog
pcm0:mixer: <Realtek ALC257 (Analog 2.0+HP/2.0)> on hdaa0 kld snd_hda (default)
    vol        = 0.80:0.80      +0.00    pbk
    pcm        = 1.00:1.00      +0.00    pbk
    speaker    = 1.00:1.00      +0.00    pbk
    rec        = 0.37:0.37      +0.00    pbk
    ogain      = 1.00:1.00      +0.00    pbk
    monitor    = 0.67:0.67      +0.00    rec src

The code is available on:
- GitHub: https://github.com/christosmarg/mixer
- Sourcehut: https://git.sr.ht/~crm/mixer
- My Git server: https://git.margiolis.net/mixer/files.html

The project's Wiki article can be found at: 
- https://wiki.freebsd.org/SummerOfCode2021Projects/SoundMixerImprovements

--
Christos



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20210621111122.ygoea7mqqbpiolc2>