Re: [Rhythmbox-devel] New plugin: Pitch/Speed Shifting



So..

when are you going to write our equalizer?  Sounds like you got some of the basics already? :)

sri

On Tue, Oct 27, 2009 at 7:42 AM, Sean McNamara <smcnam gmail com> wrote:
Hello,

I have started work on a new plugin for Rhythmbox. I have written it
in Vala, and developed it on / tested it against a Fedora 12 Beta
x86_64 system with Rhythmbox 0.12.5 and Vala 0.7.7.

The current project status is that it works on my system, and the
primary features I wanted are implemented and functional. There is no
tarball release; instead, use git:
http://tiyukquellmalz.org/cgit/rbpitch <--- CGit web ui.
git clone git://tiyukquellmalz.org/rbpitch <--- git command to check
out the source.

First, pictures are worth a thousand words. Here are some screenshots
-- I couldn't get window borders to show up, but each screenshot is of
a toplevel window.

Addition to Rhythmbox Shell is visible in a red box (the box is not
rendered in the GUI): http://tiyukquellmalz.org/rbpitch-icon.png

Clicking the icon in the rb shell pops up this window. First, with the
sliders in the default position:
http://tiyukquellmalz.org/rbpitch-ui-1.png
Second, with the sliders moved around a bit:
http://tiyukquellmalz.org/rbpitch-ui-2.png

Addition to Rhythmbox Plugin configuration page:
http://tiyukquellmalz.org/rbpitch-configure.png

***I am soliciting community feedback on this plugin!*** I personally
find it very useful, but eventually I'd like to have it become part of
Rhythmbox proper, as an official plugin bundled with the stable
release. This greatly simplifies the installation procedure, and
increases the chance that distros will pick it up. If any of the
Rhythmbox maintainers read this message, please carefully consider the
next two paragraphs before deciding whether to pick this up as an
official plugin.

Now that I am happy with the functionality of the plugin, my new goal
is to help it reach the largest audience possible. I have chosen the
most favorable license possible by using the same one as the Rhythmbox
core, and I offer my help and perpetual maintainership of this plugin.
The RB maintainers can choose to help me reach the largest audience
possible, or not -- either way, I am still happy using the plugin
myself. I do believe it is of some general use, and there is precedent
for other media players including this functionality by default.

As a completely separate issue, I observe that there is currently no
way to build an out-of-tree Rhythmbox plugin written in C or Vala. Has
anyone thought about making a rhythmbox-devel package (which, for the
rb sources, entails writing a pkgconfig file and shipping headers into
/usr/include/rhythmbox) so that plugins can be developed out-of-tree?
I know that API/ABI stability is not guaranteed, but this would
greatly simplify integration for plugins for which it is decided that
it will _not_ be bundled as an official plugin. In the case that the
RB maintainers evaluate my plugin and decide they definitely do not
want it in the official plugin set, I will have a need for an
out-of-tree plugin SDK (but I'll still have to work with individual
distros to get them to adopt my plugin and stick it in a separate
package, grr). If no one else has plans to make one, I may choose to
investigate doing it myself. The short term result would be the
aforementioned files installed when you `make install'; the long term
result would be a librhythmboxcore-dev or rhythmbox-devel package
becoming available in distros' package managers. I might work on this
external SDK even if my plugin is accepted as an official in-tree
plugin (hint: save me some effort and I might do you a favor in return
;))

Now I'm copying and pasting the readme file into this message, which
should answer any more questions you have:

rbpitch v0.1
Readme/FAQ Document
Last Modified: October 27, 2009
Sean McNamara <smcnam gmail com>

Q: Describe rbpitch in one sentence!
A: rbpitch is a plugin for Rhythmbox that lets you change the pitch, tempo, and
speed in real-time while playing a song.

Q: What are the main features of rbpitch?
A:
*Change the pitch and tempo of your music independently of each other.
*Change the "speed", which is pitch+tempo scaled together without aliasing.

Q: Are there other programs like rbpitch?
A: Yes, rbpitch closely resembles PaceMaker: http://surina.net/pacemaker/
J. River Media Jukebox 12 also contains similar functionality.
I am currently not familiar with any Free Software programs like rbpitch.

Q: What are the possible uses of rbpitch?
A: Borrowed from http://surina.net/pacemaker by Olli Parviainen (no
infringement intended):
*Slower music tempo eases practicing music
*Change the music key to match the singer's voice (karaoke, singing practice)
*Dancers can change the music tempo suitable for dancing
*Adjust music key instead of retuning instrument for each song
*Listen 78 RPM vinyl singles with a usual 33/45 RPM disc player
*Transcribe tunes
*Write down dictations

These are the uses of PaceMaker according to Olli Parviainen. However, since
rbpitch is almost identical in functionality and feature, I claim the same uses
apply to rbpitch.

Q: What are rbpitch's dependencies?
A:
For compiling:
*A Rhythmbox 0.12.5 or later source tree (links against librhythmboxcore)
*Gtk 2.16 or later
*Gstreamer core 0.10 or later
*Gstreamer-plugins-bad 0.10.4 or later with the optional `pitch' plugin enabled
*As a clarification of the above:
$(libdir)/gstreamer-0.10/libgstsoundtouch.so must exist.

Q: How do I compile rbpitch?
A: Almost like you do any other rhythmbox plugin written in C: in-tree. See
http://live.gnome.org/RhythmboxPlugins/WritingGuide

However, this is not an officially bundled plugin. For that reason, I have some
temporary measures available to assist the compilation and installation process.

I have included a helper script, local-install, that does the following things:
1. Builds the plugin.
2. Copies the required dist files to the system plugins folder, using the root
account. TODO: Change this to sudo on Debian systems.

Please edit the script and change the OUTDIR variable to correspond to your
libdir. For instance, you may want to change /usr/lib64 to /usr/lib.

Please also make sure that your rbpitch distribution is in the
plugins/ directory
of the Rhythmbox source tree. For example, if rhythmbox is unpacked to
"/tmp/rhythmbox-0.12.5", rbpitch is in "/tmp/rhythmbox-0.12.5/plugins/rbpitch".

Once you've done that, run this sequence of commands from the base directory of
a Rhythmbox 0.12.5 or later source tree:
./autogen.sh
./configure --prefix=/usr --enable-vala --enable-uninstalled-build
make -j2
cd plugins/rbpitch
./local-install

Q: What is the future / TODO for rbpitch?
A: In no particular order (some of these are external changes that would benefit
rbpitch immensely, so I may do them myself):
*Do what's necessary to get it integrated as an official Rhythmbox plugin.
*Refactor to use the (not-yet-existing) rhythmbox-devel out-of-tree plugin devel
headers.
*Improve the vala-rhythmbox bindings a lot more.
*Create a pkg-config file for rhythmbox.
*Include patches to configure.ac and plugins/Makefile.am so the plugin will
build using ./configure directly.
*Continue to maintain the program when Rhythmbox, Gtk or Gstreamer APIs change.
*Solicit user feedback to fix bugs and implement missing features.

Q: What is rbpitch's license?
A: All files in the rbpitch distribution are under the GNU GPL v2 or later, with
the Rhythmbox Exception. For details on what that means, open up a source file,
or read the file named COPYING that should be included in the documentation.
_______________________________________________
rhythmbox-devel mailing list
rhythmbox-devel gnome org
http://mail.gnome.org/mailman/listinfo/rhythmbox-devel



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]