Skip to content

Releases: alsa-project/alsa-gobject

Version version 0.3.0

30 Jun 03:12
v0.3.0
Compare
Choose a tag to compare

This major release includes batch of changes with loss of backward compatibility.

Add entry headers

For application of all of including libraraies, entry headers are added.

Migration to gi-docgen for documentation

The gi-docgen is used instead of gtk-doc to generate documentation.

Use utility macro to define GObject stuffs

The utility macro available since GObject v2.44 is used.

Enhancement of test scripts

Test scripts are refined so that interfaces and boxed structures are tested as well.

Loss of backward compatibility between v0.2/0.3 releases

Following to GNOME convention for throw function

In GNOME convention, the throw function to report error at GError argument should return gboolean
value to report the overall operation finished successfully or not. At v0.3 release, the most of
public API are rewritten according to it.

Using GObject Interface

GObject Interface is utilized for some cases to express structure with union.

  • ALSACtl.ElemInfoCommon and ALSACtl.ElemInfoSingleArray for struct snd_ctl_elem_info
  • ALSASeq.QueueTimerCommon for struct snd_seq_queue_timer

Therefore some GObject-derived objects implements the interfaces.

  • ALSACtl.ElemInfoIec60958
  • ALSACtl.ElemInfoBoolean
  • ALSACtl.ElemInfoBytes
  • ALSACtl.ElemInfoInteger
  • ALSACtl.ElemInfoInteger64
  • ALSACtl.ElemInfoEnumerated
  • ALSASeq.QueueTimerAlsa

Some boxed structures are obsoleted and removed.

  • ALSACtl.ElemInfo
  • ALSACtl.QueueTimer
  • ALSACtl.QueueTimerDataAlsa

GObject Interface is utlized to define common feature of hwdep device as well.
ALSAHwdep.DeviceCommon interface is added for the purpose.

Event expression for ALSA Sequencer

ALSASeq.Event boxed structure is newly added to each event, and ALSASeq.EventCntr is
simplified to include deserializer only. ALSASeq.EventError domain is newly added to express
event handling problem.

Name consistency in time stamp expression

The word tstamp is renamed to real time in the most of functions, enumerations, object
names, and methods for name consistency.

  • ALSATimer.TstampEvent boxed structure is renamed to ALSATimer.RealTimeEvent
  • ALSATimer.EventType enumeration is renamed to ALSATimer.RealTimeEventType
  • ALSATimer.EventDataType enumeration is renamed to ALSATimer.EventType
  • ALSATimer.InstanceStatus.get_tstamp() method is renamed to ALSATimer.InstanceStatus.get_time()
  • ALSATimer.get_tstamp_source() function is renamed to ALSATimer.get_real_time_clock_id()

In time stamp, the counterpart of real time is tick. ALSATimer.TickEvent boxed structure
is renamed to ALSATimer.TickTimeEvent. ALSATimer.Event, ALSATimer.EventDataTick and
ALSATimer.EventDataTstamp are obsoleted and removed. ALSATimer.UserInstance::handle-event
is obsoleted as well. The alternatives are available to retrieve corresponding event.

  • ALSATimer.UserInstance::handle-tick-time-event
  • ALSATimer.UserInstance::handle-real-time-event

ALSASeq.Tstamp is obsoleted and removed as well. The accessor methods to it are rewritten
to retrieve either tick time or real time.

  • ALSASeq.Event.get_tick_time()
  • ALSASeq.Event.get_real_time()
  • ALSASeq.Event.get_tick_time_data()
  • ALSASeq.Event.get_real_time_data()
  • ALSASeq.EventDataQueue.get_tick_time_param()
  • ALSASeq.EventDataQueue.get_real_time_param()
  • ALSASeq.RemoveFilter.new_with_tick_time()
  • ALSASeq.RemoveFilter.new_with_real_time()

The word tstamp still remains in the enumerations and properties to affects both tick
and real time.

  • ALSASeq.EventTstampMode
  • ALSASeq.Event.get_tstamp_mode()
  • ALSASeq.PortInfo:tstamp-mode
  • ALSASeq.PortInfo:tstamp-overwrite
  • ALSASeq.SusbscribeData:has-tstamp
  • ALSASeq.SusbscribeData:tstamp-mode

Some properties are added to ALSASeq.SubscribeData to obsolete ALSASeq.PortSubscribeFlag.

  • ALSASeq.SubscribeData:is-exclusive
  • ALSASeq.SubscribeData:has-tstamp
  • ALSASeq.SubscribeData:tstamp-mode
  • ALSASeq.SubscribeData:queue-id

Rewrite setter method in ALSACtl.ElemValue

Below methods are rewritten to retrieve the pointer in internal storage instead of copying to given
buffer as fixed-sized array:

  • ALSACtl.ElemValue.get_bool
  • ALSACtl.ElemValue.get_int
  • ALSACtl.ElemValue.get_enum
  • ALSACtl.ElemValue.get_bytes
  • ALSACtl.ElemValue.get_iec60958_user_data
  • ALSACtl.ElemValue.get_iec60958_channel_status
  • ALSACtl.ElemValue.get_int64

Rewrite ALSASeq.RemoveFilter

ALSASeq.RemoveFilter is largely written so that it's GObject-derived object instead of boxed
structure for flexible configuration of filter condition.

Version 0.2.2 release

16 Mar 00:03
v0.2.2
Compare
Choose a tag to compare

This is a maintenance release to fix some bugs in v0.2.1.

ALSACtl.Card.get_elem_id_list() is programmed carelessly to evaluate
successful case as failure. This bug is fixed in the release.

v0.2.1: Version 0.2.1 release

29 Aug 10:17
Compare
Choose a tag to compare

This is a maintenance release to fix some bugs in v0.2.0.

ALSASeq.EventDataCtl.get_value() is programmed carelessly to return
the value in parameter field instead of value field. This bug is fixed
in the release.

alsa-gobject version 0.2.0 release

21 Nov 00:20
Compare
Choose a tag to compare

This is the second official release of alsa-gobject project.

It includes some enhancements and bug fixes.

  • Some implementations of GLib GQuark is exported as error domain and corresponding enumerations are added. This improves error reporting in each libraries. It closes issue #47[2].
  • Selection of substream in ALSARawmidi.StreamPair.open() now works well. This closes issue #53[3].
  • Prototypes of some methods in ALSACtl.Card object for data of TLV(Type-Length-Value) in ALSA control interface are changed without backward compatibility. Corresponding exported symbols are maintained by new symbol version. In detail, refer to #55[4].
  • Error handling is changed so that function call with invalid argument just returns with warnings instead of generating GError, according to convention for GLib application. Memory allocation failure is supposed to be unrecoverable error and aborts program, as well.
  • It's possible to build for older version Linux kernel, therefore build dependency is now Linux kernel v4.5 or later.

For the new release, documentations are also updated. They're auto-generated by gtk-doc[5] from function annotations:

The new release of Rust crates are available as well in repository. They're auto-generated by gtk-rs/gir[6]:

[1] https://github.com/alsa-project/alsa-gobject
[2] #47
[3] #53
[4] #55
[5] https://developer.gnome.org/gtk-doc-manual/
[6] https://github.com/gtk-rs/gir

Signed-off-by: Takashi Sakamoto [email protected]

alsa-gobject version 0.1.0 release

23 Jun 09:01
Compare
Choose a tag to compare

This is the first official release of alsa-gobject project, addressed in
Audio Mini Conference 2018[1]. The release includes below libraries to
operate corresponding character devices of Linux Sound subsystem
(=Advanced Linux Sound Architecture, a.k.a ALSA)[2]:

  • libalsactl0
  • libalsatimer0
  • libalsaseq0
  • libalsahwdep0
  • libalsarawmidi0

The libraries are also compatible with gobject-introspection (g-i)[3] to
produce gir files:

  • ALSACtl-0.0
  • ALSATimer-0.0
  • ALSASeq-0.0
  • ALSAHwdep-0.0
  • ALSARawmidi-0.0

Any language binding for g-i can handle the gir files to use the the
libraries. For example, PyGObject[4] is available as dynamic g-i loader in
Python 3 runtime, and some Python 3 sample scripts are available in
samples directory. Rust FFI/Safe API crates are provided in
alsa-gobject-rs[5] and its README includes code snippet.

Documentation is available in below URLs. They're auto-generated by
gtk-doc[6] with function annotations:

As a design note, the libraries provide API to execute system calls directly
to ALSA core implementation in kernel land. The libraries produce minimal set
of API, and delegate enhanced features to application side. They perform like
'glue' code between application and in-kernel functionalities. This makes it
easy to write test code for the in-kernel functionalities as well as to write
ehhanced features by each language.

The libraries have no dependency on alsa-lib[7]. The alsa-lib includes own
software features such as configuration space with plug-in system. Although
the plug-in system is useful to add sample operating feature into PCM
interface, it's not necessarily useful for the other interfaces. Furthermore
it's better design to implement enhanced software features in user library and
user application side, instead of common library side. For the above points,
alsa-gobject produces languag bindings different from the existent ones[8][9].

In the release, PCM interface is not supported because the 'glue' is already
provided by the other projects; GStreamer[10], PortAudio[11], SDL[12], and so
on. They mostly satisfy the demand, therefore the support is judged not to be
so urgent. It's planned to support PCM interfaces in future release as
'ALSAPcm-0.0'.

Compress-Offload interface is not supported as well because it's difficult to
buy free test device in market as of 2020.

[1] https://www.alsa-project.org/wiki/Miniconf_2018#GObject_introspection
[2] http://www.alsa-project.org/
[3] https://gi.readthedocs.io/
[4] https://pygobject.readthedocs.io/
[5] https://github.com/alsa-project/alsa-gobject-rs/
[6] https://developer.gnome.org/gtk-doc-manual/
[7] https://git.alsa-project.org/?p=alsa-lib.git;a=summary
[8] https://git.alsa-project.org/?p=alsa-python.git;a=summary
[9] https://github.com/diwic/alsa-rs/
[10] https://gstreamer.freedesktop.org/bindings/
[11] http://www.portaudio.com/
[12] https://www.libsdl.org/languages.php