Index: Slim/Player/Squeezebox.pm =================================================================== --- Slim/Player/Squeezebox.pm (revision 24487) +++ Slim/Player/Squeezebox.pm (working copy) @@ -190,6 +190,8 @@ @@ -611,7 +613,7 @@ $format ||= 'mp3'; - if ($format eq 'wav') { + if ($format eq 'pcm') { $formatbyte = 'p'; $pcmsamplesize = 1; Index: Slim/Player/Protocols/File.pm =================================================================== --- Slim/Player/Protocols/File.pm (revision 24487) +++ Slim/Player/Protocols/File.pm (working copy) @@ -141,6 +141,8 @@ # and WAV header ${*$sock}{'initialAudioBlockRemaining'} = 0; + ${*$sock}{'streamFormat'} = $args->{'transcoder'}->{'streamformat'}; + if ( $seekoffset ) { my $streamClass = _streamClassForFormat($format); Index: strings.txt =================================================================== --- strings.txt (revision 24487) +++ strings.txt (working copy) @@ -10712,6 +10712,19 @@ NO FLAC SV FLAC +PCM + DA PCM + DE PCM + EN PCM + ES PCM + FI PCM + FR PCM + HE PCM + IT PCM + NL PCM + NO PCM + SV PCM + FEC DA FLAC med indlejret CUEsheet DE FLAC mit eingebettetem CUE-Sheet Index: Slim/Player/Squeezebox2.pm =================================================================== --- Slim/Player/Squeezebox2.pm (revision 24487) +++ Slim/Player/Squeezebox2.pm (working copy) @@ -96,7 +96,7 @@ sub formats { my $client = shift; - return qw(wma ogg flc aif wav mp3); + return qw(wma ogg flc aif pcm mp3); } sub statHandler { Index: types.conf =================================================================== --- types.conf (revision 24487) +++ types.conf (working copy) @@ -35,6 +35,7 @@ mp3 mp2,mp3 audio/mpeg,audio/mp3,audio/mp3s,audio/x-mpeg audio mpc mpc,mp+ audio/x-musepack audio ogg ogg,oga audio/x-ogg,application/ogg,audio/ogg,application/x-ogg audio +pcm pcm audio/x-pcm audio pdf pdf application/pdf - pls pls audio/scpls,audio/x-scpls playlist pod - application/rss+xml - Index: convert.conf =================================================================== --- convert.conf (revision 24487) +++ convert.conf (working copy) @@ -19,7 +19,7 @@ # possibly aif or others depending on the types # your player supports. SliMP3 supports only # MP3. Squeezebox currently supports mp3, aif -# and wav. Squeezebox2 adds support for Flac and WMA. +# and pcm. Squeezebox2 adds support for Flac and WMA. # : currently slimp3, squeezebox, or *. # The * is a wildcard that matches all device # types. @@ -120,10 +120,10 @@ aif aif * * - -wav wav * * +wav pcm * * - -flc wav * * +flc pcm * * # FT:{START=--skip=%t}U:{END=--until=%v} [flac] -dcs --force-raw-format --endian=little --sign=signed $START$ $END$ -- $FILE$ @@ -133,15 +133,15 @@ ogg aif * * [sox] -q -t ogg $FILE$ -t raw -r 44100 -c 2 -w -s $-x$ - -wma wav * * +wma pcm * * # F:{PATH=%f}R:{PATH=%F} [wmadec] -r 44100 -b 16 -n 2 $PATH$ -mpc wav * * +mpc pcm * * # IR [mppdec] --raw-le --silent --prev --gain 2 - - -ape wav * * +ape pcm * * # F [mac] $FILE$ - -d @@ -149,11 +149,11 @@ # IR [mppdec] --raw-be --silent --prev --gain 2 - - -alc wav * * +alc pcm * * # F [alac] -r $FILE$ -wvp wav * * +wvp pcm * * # FT:{START=--skip=%t}U:{END=--until=%v} [wvunpack] $FILE$ -rq $START$ $END$ -o - Index: Slim/Player/Squeezebox1.pm =================================================================== --- Slim/Player/Squeezebox1.pm (revision 24487) +++ Slim/Player/Squeezebox1.pm (working copy) @@ -258,7 +258,7 @@ sub formats { my $client = shift; - return qw(aif wav mp3); + return qw(aif pcm mp3); } # periodic screen refresh Index: Slim/Player/Song.pm =================================================================== --- Slim/Player/Song.pm (revision 24487) +++ Slim/Player/Song.pm (working copy) @@ -543,7 +543,7 @@ # Also used when rebuffering, etc. if ($format eq 'mp3') { return ($maxRate || 320) * 1000; - } elsif ($format eq 'wav' || $format eq 'aif') { + } elsif ($format =~ /wav|aif|pcm/) { # Just assume standard rate return 44_100 * 16 * 2; } elsif ($format eq 'flc') { Index: Slim/Player/SoftSqueeze.pm =================================================================== --- Slim/Player/SoftSqueeze.pm (revision 24487) +++ Slim/Player/SoftSqueeze.pm (working copy) @@ -43,10 +43,10 @@ my $client = shift; if ($client->revision() == 2) { - return qw(ogg flc aif wav mp3); + return qw(ogg flc aif pcm mp3); } else { - return qw(flc aif wav mp3); + return qw(flc aif pcm mp3); } } Index: Slim/Player/Player.pm =================================================================== --- Slim/Player/Player.pm (revision 24487) +++ Slim/Player/Player.pm (working copy) @@ -985,7 +985,7 @@ if ( $format eq 'mp3' ) { $timePlayed = Slim::Player::Source::findTimeForOffset($client, $bytesPlayed) or return; } - elsif ( $format eq 'wav' ) { + elsif ( $format =~ /wav|aif|pcm/ ) { $timePlayed = $bytesPlayed * 8 / ($client->streamingSong()->streambitrate() or return); } else { Index: Slim/Formats/Wav.pm =================================================================== --- Slim/Formats/Wav.pm (revision 24487) +++ Slim/Formats/Wav.pm (working copy) @@ -84,22 +84,28 @@ return $tags; } -# bug 10012; disable so that WAV/PCM confusion does not cause bad audio -#sub getInitialAudioBlock { -# my ($class, $fh, $track) = @_; -# my $length = $track->audio_offset() || return undef; -# -# open(my $localFh, '<&=', $fh); -# -# seek($localFh, 0, 0); -# logger('player.source')->debug("Reading initial audio block: length $length"); -# read ($localFh, my $buffer, $length); -# seek($localFh, 0, 0); -# close($localFh); -# -# return $buffer; -#} -# -#sub canSeek {1} +sub getInitialAudioBlock { + my ($class, $fh, $track) = @_; + + # bug 10026: do not provide header when streaming as PCM + print(${*$fh}{'streamFormat'}, "\n"); + if (${*$fh}{'streamFormat'} eq 'pcm') { + return ''; + } + + my $length = $track->audio_offset() || return undef; + + open(my $localFh, '<&=', $fh); + + seek($localFh, 0, 0); + logger('player.source')->debug("Reading initial audio block: length $length"); + read ($localFh, my $buffer, $length); + seek($localFh, 0, 0); + close($localFh); + + return $buffer; +} + +sub canSeek {1} 1;