以下の小さな vala プログラムを書きましたが、GLib.Value 型を操作する方法がわかりません。以下のコードを参照してください。
Gstを使用。
void application_message(Gst.Bus bus, Gst.Message msg) {
var s = msg.get_structure();
if(s == null)
戻る;
文字列 msgtype = s.get_name();
if(msgtype != "レベル")
戻る;
GLib.Value rms = s.get_value("rms");
GLib.Value st = s.get_value("ストリーム時間");
// ここのドキュメントによると : http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-level.html
// "rms" は明らかに "gdouble の GValueArray" です
// と
// 「st」は「typedef guint64 GstClockTime」である GstClockTime です。
// 2 つの文字列表現を作成したい、例:
// 72374237490234, [0.234234,0,424234234,0.423423423,0.5345345, ...]
// そして、変換や型キャストを行う方法がわかりません...
}
ボイドメイン(文字列[]引数){
Gst.init (参照引数);
試す {
var パイプライン = Gst.parse_launch(
"pulsesrc device=\"alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\" ! " +
"レベル名=wavelevel interval=10000000 ! " +
「wavenc ! ファイルシンクの場所 = audiooz.wav」
);
var バス = パイプライン.get_bus();
bus.add_signal_watch();
bus.message.connect(application_message);
// パイプラインの状態を PLAYING に設定します
pipeline.set_state (State.PLAYING);
// GLib メインループの作成と開始
new MainLoop ().run ();
}
キャッチ(エラーe){
print("%s\n", e.message);
}
}
アップデート :
GLib.Value のドキュメントはこちら: http://www.valadoc.org/#!api=gobject-2.0/GLib.Value
strdup_contents() を呼び出すと多少は満足ですが、配列を rms で操作したいのですが、
printl(rms.type().name()) はそれが GstValueList であることを教えてくれるので、これにキャストする必要があります: http://www.valadoc.org/#!api=gstreamer-1.0/ Gst.ValueList です が、vala は Gst.ValueList 型について何も知らないようです...