[GSoC 2021] Project Proposal

Christos Margiolis christos at christosmarg.xyz
Mon Mar 22 14:49:55 UTC 2021


Hello,

I'm a Computer Engineering student and I'd like to propose a project for
GSoC 2021 and possibly attract a mentor. This idea has already got some
small traction on #freebsd (Freenode) by people involved with the project.

To not bore with useless information, I basically wanted to implement a
"toggle" option for mixer(8) so that you can mute and unmute the mixer easily
without having to write external scripts to do that. Others have apparently
asked for the same thing in the forums too.

However, in order to be able to mute and unmute the mixer requires the program
to have knowledge of the previous volume so that it can set it back, which means
that since mixer(8) is an one-shot program, it would have to write a file to the
disk, which is not the most pretty solution.

To fix that, after discussing this on IRC, me and debdrup thought it'd be better
to wrap mixer(8)'s functionality in a new library called libmixer(3) for the
following reasons:

1.      Userland programs will be able to use the mixer more easily
        using this library.

2.      In order to solve the mixer toggling "issue" without having to
        write anything to disk, a new daemon called mixerd(8) can be 
        written using libmixer(3) to keep track of the volume history
        among other things.

3.      mixer(8) will use libmixer(3).

4.      Already existing mixer ports such as MixerTUI
        (https://www.freshports.org/audio/mixertui) can use the library
        as well. 

Apart from the reasons I mentioned above, which I think would make
mixer handling easier and more extensible, I think this library could
go as far as to implement support for virtual_oss and the like.

To make things more straight forward, I've already written a basic
libmixer(3) which currently implements almost all of mixer(8)'s functionality.
I also rewrote mixer(8) to use my libmixer(3) and it seems to be working
as expected, although I cannot test everything yet.

The code can be found in the following links:

GitHub:                 https://github.com/christosmarg/libmixer
My personal Git server: https://git.christosmarg.xyz/libmixer/files.html

Code review is especially welcome, although at the moment it's at a very
early stage - currently only 1 commit.

My involvement with the FreeBSD Project also includes the following:

1.      Wrote a guide Arduino development on FreeBSD without
        having to rely on the Arduino IDE:

        https://wiki.freebsd.org/Arduino/NativeCLI

2.      Reported 2 bugs, including 1 fix:

        https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254289
        https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254290

3.      Active on IRC, mostly Freenode and sometimes
        EFNet (@crm).

----------------------------------------------
Christos Margiolis <christos at christosmarg.xyz>


More information about the freebsd-hackers mailing list