[alsa-devel] Restart alsa-gi project as alsa-gobject project
Jaroslav Kysela
perex at perex.cz
Wed Dec 4 10:10:49 CET 2019
Dne 04. 12. 19 v 1:33 Takashi Sakamoto napsal(a):
> Hi Jaroslav,
>
> On Sun, Dec 01, 2019 at 05:04:50PM +0900, Takashi Sakamoto wrote:
>> Since Audio Mini Conference 2018, I continued to work for alsa-gi[1] in
>> my local to integrate toward better I/O libraries. However I realized
>> that its basic design includes some disadvantages to produce useful APIs.
>>
>> I rethink the design and realize it better to wrap each of structures
>> in <sound/asound.h> simply. Then, I restart it as alsa-gobject[2].
>> At present, master branch includes a library, `libalsactl0` for the
>> most of I/O features in ALSA control interface, which is compatible with
>> GObject mechanism and GObject introspection.
>>
>> Jaroslav, would you please delete the alsa-gi repository and fork
>> the master branch from my alsa-gobject repository, then apply enough
>> configurations to the new repository?
>>
>>
>> My repository includes four branches as well for ALSA
>> hwdep/rawmidi/timer/seq interfaces. The most of features in each
>> interface is already available via included libraries but under heavy
>> development.
>>
>> I already start to test them with Python 3 (PyGObject) and they seem
>> work well. I also test them with Rust bindings generated by gtk-rs/gir[3]
>> tool. Near future I also publish Rust crates for further convenience.
>>
>>
>> For your interests, this Python 3 script is a sample to listen one
>> event from ALSA control character device. This simple program is not
>> terminated voluntarily or by sending UNIX signal, thus please generate
>> control event by alsamixer or amixer:
>>
>> ```
>> #!/usr/bin/env python3
>>
>> import gi
>> gi.require_version('GLib', '2.0')
>> gi.require_version('ALSACtl', '0.0')
>> from gi.repository import GLib, ALSACtl
>>
>> class MyCard(ALSACtl.Card):
>> def __init__(self, card_id, ctx, dispatcher):
>> super().__init__()
>> self.open(card_id)
>>
>> self.create_source().attach(ctx)
>>
>> self.__dispatcher = dispatcher
>>
>> def do_handle_disconnection(self):
>> self.__dispatcher.quit()
>>
>> def do_handle_elem_event(self, elem_id, events):
>> # Print the first event and quit event loop.
>> print(elem_id.get_iface().value_nick,
>> elem_id.get_device_id(), elem_id.get_subdevice_id(),
>> elem_id.get_name(), elem_id.get_index(),
>> events.value_nicks)
>> self.__dispatcher.quit()
>>
>>
>> ctx = GLib.MainContext.new()
>> dispatcher = GLib.MainLoop.new(ctx, False)
>> card = MyCard(0, ctx, dispatcher)
>>
>> dispatcher.run()
>> ```
>>
>> [1] https://github.com/alsa-project/alsa-gi
>> [2] https://github.com/takaswie/alsa-gobject
>> [3] https://github.com/gtk-rs/gir
>
> Would I expect your arrangement for this project, or should I continue
> to develop it apart from alsa-project?
You're the only developer for this thus I'll shift the repos in the ALSA
project on github. You should also write to README that this project is not
using alsa-lib, thus the extra abstraction interfaces from alsa-lib cannot be
used. Or do you plan to build gobjects on top of alsa-lib, too?
Thanks,
Jaroslav
>
>
> Regards
>
> Takashi Sakamoto
>
--
Jaroslav Kysela <perex at perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat, Inc.
More information about the Alsa-devel
mailing list