以下の小さな 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 型について何も知らないようです...