Author
Topic: implement new audio plugin (Read 30673 times)

Thanks, Seems it was my own fault, as I was mixing current source with a running release.  I pulled down the release source tree and rebuilt.  Seems to be running fine.  The next step is to actually run my added function and see what happens. 

Good news, my plugin is working.  I sucsessfully tries to spawn off the jack server.  Now for the bad news, jack does not work.  Jack needs a library in the libasound2-plugins package.  This would not be a big deal except that libasound2 is at a higher rev than libasound2-plugins can use.  libasound2-plugins is at version 1.0.8-3 and libasound2 is at version 1.0.12-1pluto1 I would be more than comfortable building a new libasound2-plugins package, but I am unable to find a source package for this version of libasound2 in the pluto repositories.  I am also unable to find this version in the regular debian repositories.  Could someone from plutohome either point me to the place to look for a source package or just update the libasound2-plugins package? 

The parent device will be the core/dcerouter.  This piece of the puzzles' only job is to start jackd.  Yes, my plan is to distribute audio from the core to multiple zones throughout the house.  Jackd is the audio router that allows for this to happen with synced audio in multiple zones.  When the plugin is done, there will be options for number of audio channels, what alsa device to use and whether to run with realtime priority (depending on kernel support).  If anyone wants more jack options added, let me know.  The next step in the plan is to either write a plugin for mplayer or write a new audio plugin that uses the mplayer library.  The mplayer plugin should be controllable from an orbiter just like any other media player.  Currently the jack plugin is working ie spawning off a jackd process (no variable settings yet), but jackd itself is having difficulty running in multichannel mode on my core.  I now believe this is a config issue and not a missing library issue.  I've fixed the problem on another machine (rhel4) and hopefully I can get my core working in a similar way.  I'm developing this with an SBLive 5.1 card which presents some obstacles for jackd to use more than two channels.  It is my understanding that an RME or M-Audio card would not have a problem.  When I have a working solution I'll try to incorporate it into the plugin (if it's config related) But the first iteration may require some file editing and/or software install. 

Finally an update.  After a good while of not looking at the code, I now have a working plugin for jack.  Jack is correctly spawned and tested to be working with the six channels on my audio card.  The plugin currently only has three parameters setable from the plutohome admin interface.  I can add more later, but first I'd like some kind folks who know c++ better than me (which is just about anyone) to give the code a look over and maybe do some clean up or rearranging.  I borrowed the thread portion from the motion wrapper and added all the parameter setting functions myself.  The only compiler complaints I get are about unused variables.  Just let me know where I can send it.  Maybe next week I can start working on a media player plugin to use the jack server. 

Finally an update.  After a good while of not looking at the code, I now have a working plugin for jack.  Jack is correctly spawned and tested to be working with the six channels on my audio card.  The plugin currently only has three parameters setable from the plutohome admin interface.  I can add more later, but first I'd like some kind folks who know c++ better than me (which is just about anyone) to give the code a look over and maybe do some clean up or rearranging.  I borrowed the thread portion from the motion wrapper and added all the parameter setting functions myself.  The only compiler complaints I get are about unused variables.  Just let me know where I can send it.  Maybe next week I can start working on a media player plugin to use the jack server. 

Hi,

I'm really interested in your work and would kindly ask if you can open page on Wiki, where we can follow you.  I was doing something similar with Xine - Audio only player that outputs only to certain channel on multichannel card (like whole house audio source with 4 stereo channels on Core) - but got stuck with Pluto not supporting any 3rd party players other than squeezeboxes and built in Xine players, so I'm afraid that similar problem waits for you also...

How do you plan to add support for your player under Pluto (so Pluto will be able to recognize it, assign room to it, etc..)?  At the time I did this I used simple workaround - created dummy MD, so all media scenarios are created and then steal Xine player ID to run my Audio-only xine.  Maybe this still works....

tiana, Thanks for your interest.  Let me know where the best place to start putting pages would be and I'll get started.  I plan on either writing a wrapper for mplayer, or if that is not feasible I'll write something from scratch using the mplayer library and the jack library.  I envision having a device instance for each zone much like adding squeezeboxes.  I think this is doable unless I'm missing something in my understanding of how things work in pluto.  If I'm correct, my device will work with pluto's media infrastructure and just happen to run on the core rather than on a remote device (though in theory jacks architecture allows for that sort of thing).  Setting up zones is simply a matter of assigning jack output channels to an arbitrary zone number/room.  The back end would then connect the output of the mplayer plugin to whatever jack channels are assigned to where you want to here music, including being able to connect all channels to have the same thing playing throughout the house in sync.  That's the plan. 

tiana, Thanks for your interest.  Let me know where the best place to start putting pages would be and I'll get started.  I plan on either writing a wrapper for mplayer, or if that is not feasible I'll write something from scratch using the mplayer library and the jack library.  I envision having a device instance for each zone much like adding squeezeboxes.  I think this is doable unless I'm missing something in my understanding of how things work in pluto.  If I'm correct, my device will work with pluto's media infrastructure and just happen to run on the core rather than on a remote device (though in theory jacks architecture allows for that sort of thing).  Setting up zones is simply a matter of assigning jack output channels to an arbitrary zone number/room.  The back end would then connect the output of the mplayer plugin to whatever jack channels are assigned to where you want to here music, including being able to connect all channels to have the same thing playing throughout the house in sync.  That's the plan. 

Any help, ideas and or testing would be greatly appreciated. 

Thanks,Jason

Hi,

I see that you're doing something similar that I also tried to.  Also you're dealing with problems of distributing audio to several zones.  That's exactly what my idea is also. 

But I more think in a way to add Audio only functionality ot existing Xine player (since a lot of efforts will be put into its development). 

AFAIK, Pluto guys (specially Kiril) are working on one to many sync and streaming feature of Xine Pluto wrapper, so I guess this is similar thing, except you do it with Jack (unfortunately I don't know it well - but have always thought about having one audio switcher/mixer for whole house audio implemented in SW and I think your work is pretty close to that). 

I hope that I'll be able to work further with Kiril on this feature after 0.43 release. 

But for both (me and you), problem of support for 3rd party media players is major pain - it's currently non existant and on lower priority on task lists.  So maybe we can join our forces and try to do something useful....