コンテンツにスキップ

「Libcanberra」の版間の差分

提供: ArchWiki
削除された内容 追加された内容
文字列「Tips and tricks」を「ヒントとテクニック」に置換
Kgx (トーク | 投稿記録)
インストール: リンクを修正
 
(3人の利用者による、間の5版が非表示)
5行目: 5行目:
{{Related|デスクトップ通知}}
{{Related|デスクトップ通知}}
{{Related articles end}}
{{Related articles end}}
'''Libcanberra''' はイベントサウンドを再生するためのシンプルな抽象インターフェイスです。GNOME などのフリーなデスクトップでイベントサウンドを流すための [http://freedesktop.org/wiki/Specifications/sound-theme-spec XDG Sound Theme and Naming Specifications] を実装しています。詳しい説明は [http://0pointer.de/lennart/projects/libcanberra/ こちら]
[http://0pointer.de/lennart/projects/libcanberra/ Libcanberra] はイベントサウンドを再生するためのシンプルな抽象インターフェイスです。GNOME などのフリーなデスクトップでイベントサウンドを流すための [https://freedesktop.org/wiki/Specifications/sound-theme-spec XDG Sound Theme and Naming Specifications] を実装しています。


==インストール==
==インストール==


Libcanberra は[[公式リポジトリ]]の {{Pkg|libcanberra}} パッケージでインストールできます。パッケージにはライブラリと GTK+ モジュールが含まれていす。
Libcanberra は[[公式リポジトリ]]の {{Pkg|libcanberra}} パッケージでインストールできます。libcanberra では、ALSA, pulseaudio, または gstreamer のバックエンドは必要なくなりました。これらは {{Pkg|libcanberra}} パッケージに組み込まれているためです。


サウンドを再生するためのバックエンドを選択してください:
イベントサウンドを聞くためにはサウンドテーマインストールする必要があります:
*[[ALSA]] バックエンドは {{Pkg|libcanberra}} パッケージに入っています。
*[[GStreamer]] バックエンドは[[公式リポジトリ]]の {{Pkg|libcanberra-gstreamer}} パッケージでインストールできます。
*[[PulseAudio]] バックエンドは[[公式リポジトリ]]の {{Pkg|libcanberra-pulse}} パッケージでインストールできます。


また、イベントサウンドを聞くためにはサウンドテーマをインストールする必要があります:
*デフォルトのサウンドテーマは 'freedesktop' で、[[公式リポジトリ]]の {{Pkg|sound-theme-freedesktop}} パッケージでインストールできます。
*デフォルトのサウンドテーマは 'freedesktop' で、[[公式リポジトリ]]の {{Pkg|sound-theme-freedesktop}} パッケージでインストールできます。
*もしくは、[[Arch User Repository]] から {{AUR|ubuntu-sounds}}インストールすることも可能です
* もしくは、[[公式リポジトリ]]や [[Arch User Repository]] "sound-theme"検索してください


==設定==
==設定==
26行目: 22行目:
gtk-sound-theme-name=freedesktop</nowiki>}}
gtk-sound-theme-name=freedesktop</nowiki>}}


GNOME では、以上の設定は gnome-settings-daemon によって管理されており、GSettings の org.gnome.desktop.sound スキーマで設定を変更できます。
GNOME では、以上の設定は gnome-settings-daemon によって管理されており、GSettings の {{ic|org.gnome.desktop.sound}} スキーマで設定を変更できます。


==Systemd==
==Systemd==
canberra を使って起動・シャットダウン・再起動サウンドを有効にするには、実行:
canberra を使って起動・シャットダウン・再起動サウンドを有効にするには、{{ic|canberra-system-bootup.service}} [[有効化]]します。


==canberra アプリの書き方==
{{ic|<nowiki># systemctl enable canberra-system-bootup.service</nowiki>}}
libcanberra のサウンドイベントは、[https://gi.readthedocs.io/en/latest/ GObject-Introspection] を介して [https://wiki.gnome.org/Projects/GSound GSound] を使い様々なプログラミング言語で簡単に書くことができます。また、[[bash]] からも簡単に呼び出せます。


=== Bash ===
==ヒントとテクニック==

===canberra アプリの書き方===
libcanberra のサウンドイベントは様々なプログラミング言語で簡単に書くことができます。

'''Bash'''


*依存パッケージ: {{Pkg|libcanberra}}
*依存パッケージ: {{Pkg|libcanberra}}
{{hc|hello_world.sh|<nowiki>#!/bin/bash
{{hc|hello_world.sh|2=
#!/bin/bash
canberra-gtk-play -i phone-incoming-call -d "hello world"</nowiki>}}
canberra-gtk-play -i phone-incoming-call -d "hello world"
}}


=== C ===
'''C'''


*依存パッケージ: {{Pkg|libcanberra}}
*依存パッケージ: {{Pkg|libcanberra}}
*ビルド: {{ic|gcc hello_world.c -o hello_world `pkg-config --cflags --libs glib-2.0 libcanberra`}}
*ビルド: {{ic|gcc hello_world.c -o hello_world `pkg-config --cflags --libs glib-2.0 libcanberra`}}
{{hc|hello_world.c|<nowiki>#include <glib.h>
{{hc|hello_world.c|<nowiki>
#include <glib.h>
#include <canberra.h>
#include <canberra.h>
void main () {
void main () {
58行目: 53行目:
NULL);
NULL);
g_usleep (2000000);
g_usleep (2000000);
return 0;
}</nowiki>}}
}</nowiki>}}


*依存パッケージ: {{Pkg|gsound}}
'''Genie'''
*ビルド: {{ic|gcc -o hello_world `pkg-config --cflags --libs glib-2.0 gsound` hello_world.c}}
{{hc|hello_world.c|2=
#include <glib.h>
#include <gsound.h>
int main () {
GSoundContext *hello = gsound_context_new(NULL, NULL);
gsound_context_play_simple(hello, NULL, NULL,
GSOUND_ATTR_EVENT_ID, "phone-incoming-call",
GSOUND_ATTR_EVENT_DESCRIPTION, "hello world",
NULL);
g_usleep (2000000);
return 0;
}
}}

=== Genie ===


*依存パッケージ: {{Pkg|libcanberra}}
*依存パッケージ: {{Pkg|libcanberra}}
75行目: 87行目:
Thread.usleep (2000000)</nowiki>}}
Thread.usleep (2000000)</nowiki>}}


*依存パッケージ: {{Pkg|gsound}}
'''Vala'''
*ビルド依存パッケージ: {{Pkg|vala}}
*ビルド: {{ic|valac --pkg gsound hello_world.gs}}
{{hc|hello_world.gs|2=
uses
GSound
init
var hello = new GSound.Context
hello.init()
hello.play_simple(null,
GSound.Attribute.EVENT_ID, "phone-incoming-call",
GSound.Attribute.EVENT_DESCRIPTION, "hello world")
Thread.usleep (2000000)
}}
=== JavaScript ===

* 依存パッケージ: {{Pkg|gsound}}, {{Pkg|gjs}}

{{hc|hello_world.js|2=
#!/usr/bin/gjs
const GLib = imports.gi.GLib;
const GSound = imports.gi.GSound;

let hello = new GSound.Context();
hello.init(null);
hello.play_simple({ "event.id" : "phone-incoming-call",
"event.description" : "hello world" }, null);
GLib.usleep (2000000);
}}

=== Lua ===

* 依存パッケージ: {{Pkg|gsound}}, {{Pkg|lua-lgi}}

{{hc|hello_world.lua|2=
#!/usr/bin/lua
lgi = require 'lgi'
GLib = lgi.require('GLib')
GSound = lgi.require('GSound')

hello = GSound.Context()
hello:play_simple({ [GSound.ATTR_EVENT_ID] = "phone-incoming-call",
[GSound.ATTR_EVENT_DESCRIPTION] = "hello world" })
GLib.usleep (2000000)
}}

=== Perl ===

* 依存パッケージ: {{Pkg|gsound}}, {{Pkg|perl-glib-object-introspection}}
{{hc|hello_world.pl|2=
#!/usr/bin/perl
use Glib::Object::Introspection;
Glib::Object::Introspection->setup (
basename => 'GSound',
version => '1.0',
package => 'GSound');
my $hello = GSound::Context->new;
$hello->play_simple({ "event.id" => "phone-incoming-call",
"event.description" => "hello world" });
sleep (2);
}}

=== Python ===

* 依存パッケージ: {{Pkg|gsound}}, {{Pkg|python-gobject}}

{{hc|hello_world.py|2=
#!/usr/bin/python
import gi
gi.require_version('GSound', '1.0')
from gi.repository import GLib, GSound

hello = GSound.Context()
hello.init()
hello.play_simple({GSound.ATTR_EVENT_ID: "phone-incoming-call",
GSound.ATTR_EVENT_DESCRIPTION: "hello world"})
GLib.usleep(2000000)
}}

=== Ruby ===

* 依存パッケージ: {{Pkg|gsound}}, {{AUR|ruby-gir_ffi}}

{{hc|hello_world.rb|2=
#!/usr/bin/ruby
require 'gir_ffi'
GirFFI.setup :GSound
Hello = GSound::Context.new
Hello.play_simple("event.id" => "phone-incoming-call",
"event.description" => "hello world")
sleep (2)
}}

=== Vala ===


*依存パッケージ: {{Pkg|libcanberra}}
*依存パッケージ: {{Pkg|libcanberra}}
94行目: 199行目:
==参照==
==参照==
*[http://0pointer.de/lennart/projects/libcanberra/gtkdoc/ Libcanberra リファレンスマニュアル]
*[http://0pointer.de/lennart/projects/libcanberra/gtkdoc/ Libcanberra リファレンスマニュアル]
*[https://developer.gnome.org/gsound/ GSound リファレンスマニュアル]

2025年1月24日 (金) 02:20時点における最新版

Libcanberra はイベントサウンドを再生するためのシンプルな抽象インターフェイスです。GNOME などのフリーなデスクトップでイベントサウンドを流すための XDG Sound Theme and Naming Specifications を実装しています。

インストール

Libcanberra は公式リポジトリlibcanberra パッケージでインストールできます。libcanberra では、ALSA, pulseaudio, または gstreamer のバックエンドは必要なくなりました。これらは libcanberra パッケージに組み込まれているためです。

イベントサウンドを聞くためにはサウンドテーマをインストールする必要があります:

設定

デフォルトでは、GTK+ アプリケーションが起動した時に GTK+ モジュールが自動的にロードされます。ユーザーの Gtk 設定ファイルでデフォルトの設定を上書きすることができます:

$HOME/.gtkrc-2.0 and $XDG_CONFIG_HOME/gtk-3.0/settings.ini
gtk-enable-event-sounds=true
gtk-enable-input-feedback-sounds=true
gtk-sound-theme-name=freedesktop

GNOME では、以上の設定は gnome-settings-daemon によって管理されており、GSettings の org.gnome.desktop.sound スキーマで設定を変更できます。

Systemd

canberra を使って起動・シャットダウン・再起動サウンドを有効にするには、canberra-system-bootup.service有効化します。

canberra アプリの書き方

libcanberra のサウンドイベントは、GObject-Introspection を介して GSound を使い様々なプログラミング言語で簡単に書くことができます。また、bash からも簡単に呼び出せます。

Bash

hello_world.sh
#!/bin/bash
canberra-gtk-play -i phone-incoming-call -d "hello world"

C

  • 依存パッケージ: libcanberra
  • ビルド: gcc hello_world.c -o hello_world `pkg-config --cflags --libs glib-2.0 libcanberra`
hello_world.c
#include <glib.h>
#include <canberra.h>
void main () {
	ca_context * hello;
	ca_context_create (&hello);
	ca_context_play (hello, 0,
		CA_PROP_EVENT_ID, "phone-incoming-call",
		CA_PROP_EVENT_DESCRIPTION, "hello world",
		NULL);
	g_usleep (2000000);
	return 0;
}
  • 依存パッケージ: gsound
  • ビルド: gcc -o hello_world `pkg-config --cflags --libs glib-2.0 gsound` hello_world.c
hello_world.c
#include <glib.h>
#include <gsound.h>
int main () {
	GSoundContext *hello = gsound_context_new(NULL, NULL);
	gsound_context_play_simple(hello, NULL, NULL,
		GSOUND_ATTR_EVENT_ID, "phone-incoming-call",
		GSOUND_ATTR_EVENT_DESCRIPTION, "hello world",
		NULL);
	g_usleep (2000000);
	return 0;
}

Genie

  • 依存パッケージ: libcanberra
  • ビルド依存パッケージ: vala
  • ビルド: valac --pkg libcanberra hello_world.gs
hello_world.gs
uses
	Canberra
init
	hello: Context
	Context.create(out hello)
	hello.play (0,
		PROP_EVENT_ID, "phone-incoming-call",
		PROP_EVENT_DESCRIPTION, "hello world")
	Thread.usleep (2000000)
  • 依存パッケージ: gsound
  • ビルド依存パッケージ: vala
  • ビルド: valac --pkg gsound hello_world.gs
hello_world.gs
uses
	GSound
init
	var hello = new GSound.Context
	hello.init()
	hello.play_simple(null,
		GSound.Attribute.EVENT_ID, "phone-incoming-call",
		GSound.Attribute.EVENT_DESCRIPTION, "hello world")
	Thread.usleep (2000000)

JavaScript

hello_world.js
#!/usr/bin/gjs
const GLib = imports.gi.GLib;
const GSound = imports.gi.GSound;

let hello = new GSound.Context();
hello.init(null);
hello.play_simple({ "event.id" : "phone-incoming-call", 
                    "event.description" : "hello world" }, null);
GLib.usleep (2000000);

Lua

hello_world.lua
#!/usr/bin/lua
lgi = require 'lgi'
GLib = lgi.require('GLib')
GSound = lgi.require('GSound')

hello = GSound.Context()
hello:play_simple({ [GSound.ATTR_EVENT_ID] = "phone-incoming-call",
                    [GSound.ATTR_EVENT_DESCRIPTION] = "hello world" })
GLib.usleep (2000000)

Perl

hello_world.pl
#!/usr/bin/perl
use Glib::Object::Introspection;
Glib::Object::Introspection->setup (
	basename => 'GSound',
	version => '1.0',
	package => 'GSound');
my $hello = GSound::Context->new;
$hello->play_simple({ "event.id" => "phone-incoming-call",
                      "event.description" => "hello world" });
sleep (2);

Python

hello_world.py
#!/usr/bin/python
import gi
gi.require_version('GSound', '1.0')
from gi.repository import GLib, GSound

hello = GSound.Context()
hello.init()
hello.play_simple({GSound.ATTR_EVENT_ID: "phone-incoming-call",
                   GSound.ATTR_EVENT_DESCRIPTION: "hello world"})
GLib.usleep(2000000)

Ruby

hello_world.rb
#!/usr/bin/ruby
require 'gir_ffi'
GirFFI.setup :GSound
Hello = GSound::Context.new
Hello.play_simple("event.id" => "phone-incoming-call", 
                  "event.description" => "hello world")
sleep (2)

Vala

  • 依存パッケージ: libcanberra
  • ビルド依存パッケージ: vala
  • ビルド: valac --pkg libcanberra hello_world.vala
hello_world.vala
using Canberra;
public class HelloWorld {
	static void main () {
	Context hello;
	Context.create(out hello);
	hello.play (0,
		PROP_EVENT_ID, "phone-incoming-call",
		PROP_EVENT_DESCRIPTION, "hello world");
	Thread.usleep (2000000);
	}
}

参照