ref: 9e1e20f6b9552189fef5111638f84d944fd6451b
dir: /pplay.man/
.TH PPLAY 1 .SH NAME pplay \- visual PCM audio player and editor .SH SYNOPSIS .B audio/pplay [ .B -bc ] [ .B pcmfiles.. ] .SH DESCRIPTION .I Pplay is a PCM audio player displaying a time-domain graphical plot of the data and allowing for some simple editing operations or piping to/from external programs. It operates on raw PCM audio, the same format used by the audio device (see .IR audio (3)). .PP All input is fully loaded into memory, either from one or more input files .BR pcmfiles , or from standard in if run without arguments. It loops through the entire buffer or a selected portion forever, writing samples to .B /dev/audio unless .B -c is specified. .SS "Command line parameters" .TF "-b" .TP .B -b Use inverted colors (dark background) .TP .B -c Write audio to standard out instead of .B /dev/audio .PD .SS "Keyboard and mouse commands" Key commands: .TF "Esc" .TP .B q Quit .TP .B D Toggle drawing cut/insert positions in the buffer .TP .B S Toggle stereo display (default left channel only) .TP .B ␣ Toggle play/pause .TP .B b Jump to loop start .TP .B Esc Reset selection .TP .B = Zoom in .TP .B - Zoom out .TP .B + Fine zoom in .TP .B _ Fine zoom out .TP .B ↵ Zoom into the entire dot .TP .B z Reset zoom to entire buffer .TP .B ← Pan left by screenful .TP .B → Pan right by screenful .PD .PP Mouse buttons: .TF "1 " .TP .B 1 Set cursor .TP .B 2 Set left or right dot bound .TP .B 3 Pan view horizontally .PD .SS "Dot and cursor position" .I Pplay loops indefinitely an interval referred to as the .IR dot . The dot is simply the start (left) and end (right) loop points, by default the data's beginning and end. The current playback position within it is refered to as the .IR cursor . The dot is set using the middle mouse button and with respect to the cursor: if clicking to its left, the left loop point is set, if to the right, the right loop point is set. The cursor is set with the left mouse button and may never escape the dot. The last left mouse click is referred to as the .I anchor point. Dot, cursor and anchor are indicated by distinctly colored vertical lines. .SS "Display" The graphical plot displays on the y axis the maximal and minimal signed value among all samples packed in each pixel column for one audio channel. .PP The x axis is time in number of samples, and is described in a text bar on the bottom left (mono) or in the middle (stereo) of the graphical view. The first value is the .IR period , or number of samples per vertical pixel column. The next fields are offsets from the beginning of the data given in the form .IR [hh:mm:ss.tt]\ (samples) , where the first part is in time format (see .IR tmdate (2), and the second in number of samples. The first field is for the current position. If set, either the dot or only the anchor follow it. .SS "Editing" Commands: .TF "L sample" .TP .BI <\ cmd Pipe output of a shell command into dot .TP .BI ^\ cmd Pipe dot to a shell command and read back its output into dot .TP .BI |\ cmd Pipe dot to a shell command .TP .BI L\ sample Set left bound/loop point to .I sample .TP .BI R\ sample Set right bound/loop point to .I sample .TP .B U Redo an edit and restore dot .TP .B c Set snarf buffer to the contents of the dot .TP .B d Cut dot, replacing snarf buffer .TP .BI j\ sample Jump and set current position to .I sample .TP .B p Paste snarf buffer into dot or insert at the cursor .TP .BI r\ file Read .I file into dot or at the cursor .TP .B s Replicate dot by piping it to a new .IR pplay (1) instance .TP .B u Undo an edit and dot change .TP .BI w\ file Write dot to .I file .TP .B x Crop to dot (exclusive cut); does .B not touch the snarf buffer .PD .PP Upon typing a key not part of the set of keyboard shortcuts, a text entry appears to enter commands in. Commands are single character codes, and all following text is used as an arguments list. .PP Editing is performed upon a range or at a position: the dot's range if the left or right bound is set, else at the anchor if it exists, else on the entire data. .PP Behavior depends on the dot. If a left or right bound is set, inserts replace the range and deletions delete it. Otherwise, if an anchor point exists, insertion inserts a buffer at its position while deletion is disallowed. If nothing is set, insertion replaces the entire buffer, and deletion is also disallowed. .PP .BR < , .BR r\ (read), and .BR p\ (paste) insert data from an external command or the copy buffer, following the rules above. .PP The .BR u\ (undo) command reverts a single indel and restores the dot as it were before, and .BR U\ (redo) similarly replays the last action that was undone. Undo is infinite. .PP Commands .BR < ,\ ^\ and\ | require a valid .IR rc (1) expression, passed uninterpreted (quoting is unnecessary). In other words, expressions such as: .IP .EX | stretch -r1.2 | norm -f 2 | audio/wavenc > seymourbutz.wav .EE .PP are passed as a single string and then evaluated in a subshell, with the dot written to its standard in. .I Pplay does not handle any subprocess' abnormal exits in any way. .PP File i/o commands .BR r\ and\ w prompt for a pathname which is also uninterpreted. Consequently, commands and i/o may fail once actually executed; in case .I pplay was reading from a file or pipe, the partial content already loaded will not be discarded. External commands launched from within .I pplay .B are not interrupted on exit, causing it to appear stuck. Multiple commands may run concurrently. .SS Memory management No data loaded into memory is ever freed unless it can be guaranteed to never be used again. While refcounting is already being done, currently no attempt to keep guarantees is made and nothing is ever freed. However, memory is never duplicated. Therefore, it is dangerous to load large amounts of data, but once loaded, memory usage will not grow much. The maximum size of a single buffer is bound by the limits of .IR malloc (2). .SH EXAMPLES Use .IR play (1) to decode any known audio format: .IP .EX ; play -o /fd/1 file | audio/pplay .EE .SH "SEE ALSO" .IR audio (1), .IR play (1), .IR rc (1), .IR audio (3) .SH HISTORY .I Pplay first spawned on 9front (October, 2017), beyond the environment. .SH BUGS Undo may irreversibly duplicate buffer contents, and there are still some issues with what is used as a dot when replacing content. Trust, but save often. .PP An external command that never exits will freeze .I pplay forever on exit due to the reliance on .BR thread (2). .PP Any unintended interruption in playback due to scheduling, or slower than instaneous redraws, are considered bugs, and drawing ones are still there -- crawling, slithering, glistening in the dark, poisoning my dreams and turning them into nightmares.