This is just for fun - and just because ffmpeg allows us to do it.

At the moment it's a very simple visualization engine. But the more recent ffmpeg releases allows more sophisticated solutions by combining several modes into one visual 'show'. I will include more of these when we get there, but for now, a basic coding-structure is in place.

The visualization presets found in the menu is defined in the file /usr/local/pmusic/txt_visualization, and contains 2 columns: Name and Command.

Wave 1|amovie=/root/.pmusic/tmp/pmusic.sdp, asplit [a][out1]; [a] showwaves [out0] 

Wave 2|amovie=/root/.pmusic/tmp/pmusic.sdp, asplit [a][out1]; [a] showwaves=mode=line [out0]
Waves 1|amovie=/root/.pmusic/tmp/pmusic.sdp, asplit [a][out1]; [a] showwaves=mode=p2p:split_channels=1 [out0]
Waves 2|amovie=/root/.pmusic/tmp/pmusic.sdp, asplit [a][out1]; [a] showwaves=mode=cline:split_channels=1 [out0]
It maybe looks complex, but a closer look shows that only the last part of the command is unique. For line 2 that is; showwaves=mode=line

Note!
This will NOT make pMusic depend on a newer ffmpeg as extended visualization is optional. I plan to stick with 1.2. But, ffmpeg is evolving fast, so we have to keep an eye of what we 'need' in the future.

see also:
ffmpeg - the multimedia hub
pMusic - FFmpeg monitor


Posted on 10 Jun 2016, 18:07 by zigbert - Categories: Development
Edit - Delete

No comments posted yet.

Fonte dell'articolo


Some time ago mister_electronico on the Puppy forum started the discussion of using knobs in gtkdialog code. I gave some feedback but the code never entered a final state. I have now revisited the code, and plan to use it myself.

So, here is a simple test-script to show how it works. All in all, it's just a svg that rotates the dot to show the changing value. Atm, the knob rotates when dragging mouse up/down on the knob. Maybe this should be extended to left/right actions as well. Please check out the code; it should be easy to understand with some basic bash/gtkdialog/svg knowledge.

The code:

#!/bin/bash 

export KNOB_WIDTH=120
export KNOB_COLOR="#A5E8B1"
export CARD_NR=0 #'aplay -l' shows your cards
export SPEAKER=Master

#initial audio level
TMP="`amixer -c $CARD_NR get "$SPEAKER" | grep -m1 'Left:' | cut -d '%' -f 1 | cut -d '[' -f 2`" #volume level
ANGLE=$(($TMP*250/100)) #convert from % to angle (0-250)
echo $ANGLE > /tmp/knob_angle

draw_knob (){ #$1=angle/value, $2=width, $3=color, $4=dot-color
echo '
<svg width="'${2}'" height="'${2}'">
<defs>
<radialGradient
cx="'$((${2}*30/100))'" cy="'$((${2}*30/100))'" fx="'$((${2}*30/100))'" fy="'$((${2}*30/100))'" r="'$((${2}*45/100))'"
gradientUnits="userSpaceOnUse">
<stop offset="1"/>
<stop offset="0"/>
</radialGradient>
</defs>
<circle cx="'$(((${2}/2)+(${2}*4/100)))'" cy="'$(((${2}/2)+(${2}*4/100)))'" r="'$((${2}*46/100))'"/>
<circle cx="'$((${2}/2))'" cy="'$((${2}/2))'" r="'$((${2}*46/100))'"/>
<circle cx="'$((${2}/2))'" cy="'$((${2}/2))'" r="'$((${2}*39/100))'"/>
<circle cx="'$((${2}*28/100))'" cy="'$((${2}*74/100))'" r="'$((${2}*4/100))'" transform="rotate('${1}' '$((${2}/2))' '$((${2}/2))')"/>
</svg>'
}

update (){ #get current, relative position of cursor
read ANGLE < /tmp/knob_angle
Y="`getcurpos | awk '{print $2}'`"
read Y2 < /tmp/cursor_y
ANGLE=$(($ANGLE+(($Y2-$Y)*2))) #the knob's value range is equal to moving mouse up/down 125 px.
[ $ANGLE -lt 1 ] && ANGLE=0; [ $ANGLE -gt 250 ] && ANGLE=250 #keep value inside range
echo $Y > /tmp/cursor_y
echo $ANGLE > /tmp/knob_angle
draw_knob $ANGLE $KNOB_WIDTH "$KNOB_COLOR" "#eee" > /tmp/knob.svg
amixer -c $CARD_NR set "$SPEAKER" $(($ANGLE*100/250))%
}

export -f draw_knob update
draw_knob $ANGLE $KNOB_WIDTH "$KNOB_COLOR" "#eee" > /tmp/knob.svg

echo '
<vbox margin="20">
<timer visible="false" milliseconds="true" interval="100" sensitive="false">
<variable>TIMER</variable>
<action>update</action>
<action>refresh:KNOB</action>
</timer>
<eventbox>
<pixmap>
<variable>KNOB</variable>
<input file>/tmp/knob.svg</input>
</pixmap>
<action signal="button-press-event">getcurpos | awk '"'"'{print $2}'"'"' > /tmp/cursor_y</action>
<action signal="button-press-event">enable:TIMER</action>
<action signal="button-release-event">disable:TIMER</action>
</eventbox>
<text><label>Volume</label></text>
</vbox>' | gtkdialog -s

Be aware that this knob depends on the getcurpos command. This is included in all recent Puppies. But I doubt that you'll find getcurpos in most other distros, so I see this as Puppy-code. You should probably avoid this code if you plan to offer your gui outside the kennel.

This info is added to the Tips and tricks post

Posted on 10 May 2016, 04:09 by zigbert - Categories: Development
Edit - Delete

No comments posted yet.

Fonte dell'articolo


Did you know about the gtkdialog lib?

Puppies built from Woof-CE uses /usr/lib/gtkdialog/ to unify the look of builtin GUIs. Together with the new vector icon set (in /usr/share/pixmaps/puppy), the gtkdialog lib made it possible to give Puppy a facelift without adding any bloat to the core.

The lib is simple and small. It is meant to reduce the code for repeating requests (as message-boxes), and unify the look for graphical widgets (as scalegrips and svgs). A complete guide how to use the different snippets are found inside each file (open in text-editor). It contains 3 different categories:


1. BOX
These return running gtkdialog boxes with requested info. Gtkdialog is not complex at all, but dead simple boxes often used by Puppy, can be set up with a oneliner. This is not meant as a replacement for Xdialog.

There are atm 4 different types of boxes:
box_help
box_ok
box_splash
box_yesno

Example:

/usr/lib/gtkdialog/box_ok Title error "This is an error"


2. XML
While the box-code produces a running gui, the xml-code is gtkdialog code meant to be embedded inside the parent gui. These are used to unify the look, and is cooperating with pTheme to follow the global theming.

There are 4 xml-snippets available:
xml_button_icon
xml_info
xml_pixmap
xml_scalegrip

Example: - Note the 'xml_info gtk' that activates the gtkdialog-theme set by pTheme.

export GUI=' 

<vbox space-expand="true" space-fill="true">
'"`/usr/lib/gtkdialog/xml_info fixed puppy_config.svg 60 "This is the header used in Puppy these days. It handles <b>markups</b>."`"'
<button ok></button>
</vbox>'
. /usr/lib/gtkdialog/xml_info gtk #build bg_pixmap for gtk-theme
gtkdialog -p GUI


3. SVG
The svg category returns svg-code to embed in the gtkdialog code. Today, there are 3, but the knob shown in previous post should probably be added here. As expected, the svg bars and text follows the global theming set by pTheme.
svg_analogclock
svg_bar
svg_text

Example:

echo ' 

<vbox>
<timer visible="false">
<action>/usr/lib/gtkdialog/svg_analogclock 300 > /tmp/clock.svg</action>
<action>refresh:CLOCK</action>
</timer>
<pixmap space-expand="false" space-fill="false">
<variable>CLOCK</variable>
<input file>/tmp/clock.svg</input>
</pixmap>
</vbox>' | gtkdialog -s

Posted on 19 May 2016, 20:19 by zigbert - Categories: Development
Edit - Delete

No comments posted yet.

Fonte dell'articolo


LxPupSc-17.04.1T with kernel 4.10.8 is available.

See this blog entry for more description of LxPupSc

Posted on 22 Apr 2017, 04:34 by peebee - Categories: PuppyWoof-CERelease
Edit - Delete

No comments posted yet.

Fonte dell'articolo


This describes a very specific challenge.
How to upload a package of files to Woof-CE at github via the web interface.

The web interface is suited for doing simple things, and has many limitations over the CLI interface. An advanced user of git would probably laugh at us using the simple variant. But when rarely using git, and most of the time just editing existing files, it is just perfect to do the stuff in the web-browser.

The challenge is when we want to upload packages containing lots of files and directories. How do we do this...

1. Create new files and directories

- Go to the source directory - in this example /woof-code/rootfs-packages/.
- Press the Create new file button.


- Write the name of first directory in the textbox - here frisbee.
- Enter / to create the path. The textbox moves right, and are ready for new input.
- When reached target directory, add filename in textbox, and add file content in the editor.
- Add pull request by pressing the Propose file change / Commit changes button.


2. Upload files to existing directory

- Go to the source directory - here /woof-code/rootfs-packages/frisbee/etc/.
- Press the Upload files button.


- Add files by dragging them from your file-browser.
- You'll see your files get added at bottom (marked red).
- Add pull request by pressing the Propose file change / Commit changes button.


Posted on 27 May 2016, 01:35 by zigbert - Categories: Woof-CE
Edit - Delete

Posted on 26 May 2016, 19:59 by 01micko
"Excellent resource"
Thanks zigbert!

I have linked to this from the Woof-CE Needs You topic on the forum. Hopefully many people read it and gain some inspiration.
Delete

Fonte dell'articolo

Cerca nel sito

Dal blog internazionale

ScPup is available

Based on Slackware Current - both 32-bit and 64-bit versions....See:ScPup on forum...

Leggi

UPupCC (UPup Cosmic Cuttlefish)

Is available - see:UPupCC on Forumn.b. Ubuntu support for Cosmic Cuttlefish 18.10 will end in July 2019...

Leggi

Iscriviti alla newsletter

Ricevi le notizie più importanti direttamente nella tua casella email (premi invio dopo l'indirizzo)

IRC #puppylinux (popup)

irc

Entra in chat