.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "DTAS-PLAYER 1" .TH DTAS-PLAYER 1 "1994-10-02" "dtas 0.14.2.13.g9152" "dtas user manual" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" dtas\-player \- playback process for dtas .SH "SYNOPSYS" .IX Header "SYNOPSYS" dtas-player .SH "DESCRIPTION" .IX Header "DESCRIPTION" dtas-player is intended as a music player, but implemented as Unix process and pipeline manager, so it may run arbitrary commands and route data to just about any process. .PP dtas-player is currently only queue-based, enqueued tracks are played only once. It only runs in a foreground console, so usage with \&\fIscreen\fR\|(1) or \fItmux\fR\|(1) is recommended. .PP By default, dtas-player uses the \fIsox\fR\|(1) command to decode audio, and pipes the data to a \fIplay\fR\|(1) process (also distributed with sox). It may be configured to output to multiple/arbitrary processes, and may invoke arbitrary commands for outputting audio (or any other data). .PP dtas-player is controlled by a Unix socket, see \fIdtas\-player_protocol\fR\|(7) for details. Given the power of dtas-player to run arbitrary commands, this socket is created with restricted permissions and is only accessible by the user who invoked dtas-player. .PP dtas-player maintains state across restarts with a state file. .SH "EXAMPLE" .IX Header "EXAMPLE" Starting dtas-player is easy, it takes no arguments: .PP .Vb 1 \& $ dtas\-player .Ve .PP In a different terminal, enqueue your favorite track for playback: .PP .Vb 1 \& $ dtas\-enq /path/to/your/favorite/music.flac .Ve .PP In the terminal running dtas-player, some diagnostic information should be printed, as will any errors which occur. .PP To see information about the currently playing track in \s-1YAML:\s0 .PP .Vb 1 \& $ dtas\-ctl current .Ve .PP As you should be able to see, a \*(L"default\*(R" sink is automatically created and playing the audio. .SH "TROUBLESHOOTING" .IX Header "TROUBLESHOOTING" .SS "Audio playback does not start" .IX Subsection "Audio playback does not start" The most common problem with dtas-player is the \fIplay\fR\|(1) command (distributed with SoX) not using the correct audio device/driver. Ensuring the \fIplay\fR\|(1) command works with dtas-player is important. Consult SoX documentation and mailing lists for getting \fIplay\fR\|(1) to work, first. .PP Once you find the correct \s-1AUDIODEV/AUDIODRIVER\s0 environment variables, you may set them via \fIdtas\-ctl\fR\|(1): .PP To play audio on my favorite \s-1USB DAC\s0 directly to \s-1ALSA, I\s0 use: .PP .Vb 1 \& $ dtas\-ctl sink ed default env.AUDIODEV=hw:DAC env.AUDIODRIVER=alsa .Ve .SS "Seeking/playing audio from large video containers (e.g. \s-1VOB\s0) fails" .IX Subsection "Seeking/playing audio from large video containers (e.g. VOB) fails" This is a problem with large VOBs. We recommend breaking up the \&\s-1VOB\s0 into smaller files or using \fIavconv\fR\|(1) or \fIffmpeg\fR\|(1) to extract the desired audio stream. .PP .Vb 2 \& avconv \-analyzeduration 2G \-probesize 2G \e \& \-i input.vob \-vn \-sn \-c:a copy \-map 0:$STREAM_NR output.ext .Ve .SH "ADVANCED EXAMPLES" .IX Header "ADVANCED EXAMPLES" See \fIdtas_player\-sink_examples\fR\|(7) for more sink examples. .SH "ENVIRONMENT" .IX Header "ENVIRONMENT" \&\s-1DTAS_PLAYER_SOCK \-\s0 the path to the dtas-player listen socket. This defaults to ~/.dtas/player.sock .PP \&\s-1DTAS_PLAYER_STATE \-\s0 the state file of the dtas-player This defaults to ~/.dtas/player_state.yml .PP dtas-player will automatically populate \f(CW$SOXFMT\fR and \f(CW$ECAFMT\fR when invoking sink and source commands. .PP ReplayGain values are also exported to the source command if they exist in the source file: .PP .Vb 4 \& * REPLAYGAIN_TRACK_GAIN \& * REPLAYGAIN_ALBUM_GAIN \& * REPLAYGAIN_ALBUM_PEAK \& * REPLAYGAIN_TRACK_PEAK .Ve .SH "FILES" .IX Header "FILES" ~/.dtas/player_state.yml is a human-readable \s-1YAML\s0 file used to preserve state across restarts of dtas-player. .SH "CONTACT" .IX Header "CONTACT" All feedback welcome via plain-text mail to: .PP Mailing list archives available at and .PP No subscription is necessary to post to the mailing list. .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright 2013\-2016 all contributors .PP License: \s-1GPL\-3.0+ \s0 .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIdtas\-player_protocol\fR\|(7), \fIdtas\-ctl\fR\|(1), \fIdtas\-enq\fR\|(1), \&\fIdtas\-sourceedit\fR\|(1), \fIdtas\-sinkedit\fR\|(1), \fIsox\fR\|(1), \fIplay\fR\|(1), \&\fIavconv\fR\|(1), \fIffmpeg\fR\|(1), \fIscreen\fR\|(1), \fItmux\fR\|(1)