From: Andy W. <wi...@po...> - 2004-06-30 09:22:57
|
Hey, I wanted to answer questions about the current state of the jack elements, hopefully for the last time ;) Jack is a synchronous architecture. Writing a proper jack app means putting your app under the control of the jack server. What that means specifically is that jack should tell your pipeline to "iterate" (in gst terminology), instead of the app telling the pipeline to iterate. This is not the traditional way to write audio applications on unix. Most apps expect to have some sort of blocking read/write architecture. Gstreamer can be used either way, but most apps assume that the sink will handle the timekeeping for the pipeline, instead of the pipeline being handled by an external timekeeper. The jack elements now implement this kind of synchronous framework. I haven't used them for a while. I do plan on getting back to them sometime, but don't wait for me -- hack it up yourself if you want it. Back to your question. Most people want to magically choose something in some gconf key and expect to get jack input/output working. Unfortunately, this is not possible right now, because you'd have to put the whole app under a jackbin. However, it's not an unreasonable thing to ask, provided you're willing to cope with possibly higher latencies. Either write gstreamer elements for libjackasyn, or create an element like {jackbin queue ! audioconvert ! jacksink}. libjackasyn is probably better, because it does the deinterleaving/intfloat conversion for you already. Conclusion: somebody needs to write that code. It should be really damn easy: libjackoss.h has an identical API as OSS. I ain't gonna do it, though! -- Andy Wingo <wi...@po...> http://ambient.2y.net/wingo/ |