我写了下面的小vala程序,我不知道如何操作GLib.Value类型,请看下面的代码:
使用消费税; 无效应用程序消息(Gst.Bus 总线,Gst.Message 消息){ var s = msg.get_structure(); 如果(s == null) 返回; 字符串 msgtype = s.get_name(); 如果(msgtype!=“级别”) 返回; GLib.Value rms = s.get_value("rms"); GLib.Value st = s.get_value("stream-time"); //根据这里的文档:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-good-plugins/html/gst-plugins-good-plugins-level.html // "rms" 显然是 "gdouble 的 GValueArray" // 和 // "st" 是一个 GstClockTime,它是一个 "typedef guint64 GstClockTime" // 我想创建两者的字符串表示,例如: // 72374237490234, [0.234234,0,424234234,0.423423423,0.5345345, ...] // 而且我对如何进行转换或类型转换一无所知... } 无效的主要(字符串[] args){ Gst.init(参考参数); 尝试 { var pipeline = Gst.parse_launch( “pulsesrc 设备=\”alsa_input.usb-046d_08c9_674634A4-02-U0x46d0x8c9.analog-mono\“!”+ "级别名称=wavelevel 间隔=10000000 !" + “wavenc!文件接收器位置=audioz.wav” ); var bus = pipeline.get_bus(); bus.add_signal_watch(); bus.message.connect(application_message); // 设置管道状态为 PLAYING pipeline.set_state (State.PLAYING); // 创建并启动 GLib 主循环 新的 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 类型一无所知......