ports/184006: [patch] audio/alsa-lib: convert FLOAT samples automatically
Jan Beich
jbeich at tormail.org
Fri Nov 15 18:50:00 UTC 2013
>Number: 184006
>Category: ports
>Synopsis: [patch] audio/alsa-lib: convert FLOAT samples automatically
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Fri Nov 15 18:50:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Jan Beich
>Release:
>Organization:
>Environment:
https://bugzilla.mozilla.org/show_bug.cgi?id=780531
http://www.opensound.com/wiki/index.php/Tips_And_Tricks#ALSA_Emulation
>Description:
Some apps (e.g. linux-firefox with ports/169896) don't check with ALSA
which sample formats are supported and just feed whatever they like,
assuming the underlying device supports it.
While here also fix mixer device for OSS plugin. It should be /dev/dsp
according to 4Front OSS wiki. The only works with ARIFF_OSS enabled
but the volume is reset on close(). audio/oss doesn't work either way:
the new (OSSv4) way to control mixer is via SNDCTL_MIX_* ioctls.
>How-To-Repeat:
# audio/oss is too broken to care
$ mixer
$ amixer
ctl_oss: MIXER_CAPS error: Invalid argument
# without patch
$ amixer
ALSA lib simple_none.c:1549:(simple_add1) helem (MIXER,'Capture Volume',0,0,0) appears twice or more
amixer: Mixer default load error: Invalid argument
# with patch
$ amixer
Simple mixer control 'PCM',0
Capabilities: pvolume
Playback channels: Front Left - Front Right
Limits: Playback 0 - 100
Mono:
Front Left: Playback 45 [45%]
Front Right: Playback 45 [45%]
Simple mixer control 'Capture',0
Capabilities: cvolume
Capture channels: Front Left - Front Right
Limits: Capture 0 - 100
Front Left: Capture 45 [45%]
Front Right: Capture 45 [45%]
# ARIFF_OSS disable, without patch
$ aplay -v a.wav
Playing WAVE 'a.wav' : Float 32 bit Little Endian, Rate 48000 Hz, Stereo
aplay: set_params:1244: Sample format non available
Available formats:
- U8
- S16_LE
- S16_BE
- MU_LAW
# ARIFF_OSS disable, with patch
$ aplay -v a.wav
Playing WAVE 'a.wav' : Float 32 bit Little Endian, Rate 48000 Hz, Stereo
Plug PCM: Linear Integer <-> Linear Float conversion PCM (S16_LE)
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : FLOAT_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 32
buffer_size : 2097152
period_size : 524288
period_time : 10922666
tstamp_mode : NONE
period_step : 1
avail_min : 524288
period_event : 0
start_threshold : 2097152
stop_threshold : 2097152
silence_threshold: 0
silence_size : 0
boundary : 4611686018427387904
Slave: ALSA <-> OSS PCM I/O Plugin
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 2097152
period_size : 524288
period_time : 10922666
tstamp_mode : NONE
period_step : 1
avail_min : 524288
period_event : 0
start_threshold : 2097152
stop_threshold : 2097152
silence_threshold: 0
silence_size : 0
boundary : 4611686018427387904
^CAborted by signal Interrupt...
# ARIFF_OSS enabled, without patch
$ aplay -v a.wav
Playing WAVE 'a.wav' : Float 32 bit Little Endian, Rate 48000 Hz, Stereo
aplay: set_params:1244: Sample format non available
Available formats:
- S8
- U8
- S16_LE
- S16_BE
- U16_LE
- U16_BE
- S24_LE
- S24_BE
- U24_LE
- U24_BE
- S32_LE
- S32_BE
- U32_LE
- U32_BE
- MU_LAW
- A_LAW
- S24_3LE
- S24_3BE
- U24_3LE
- U24_3BE
- S20_3LE
- S20_3BE
- U20_3LE
- U20_3BE
- S18_3LE
- S18_3BE
- U18_3LE
- U18_3BE
# ARIFF_OSS enabled, with patch
$ aplay -v foo.wav
Playing WAVE 'foo.wav' : Float 32 bit Little Endian, Rate 48000 Hz, Stereo
Plug PCM: Linear Integer <-> Linear Float conversion PCM (S32_LE)
Its setup is:
stream : PLAYBACK
access : RW_INTERLEAVED
format : FLOAT_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 32
buffer_size : 16383
period_size : 4095
period_time : 85333
tstamp_mode : NONE
period_step : 1
avail_min : 4095
period_event : 0
start_threshold : 16383
stop_threshold : 16383
silence_threshold: 0
silence_size : 0
boundary : 9222809086901354496
Slave: ALSA <-> OSS PCM I/O Plugin
Its setup is:
stream : PLAYBACK
access : MMAP_INTERLEAVED
format : S32_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 32
buffer_size : 16383
period_size : 4095
period_time : 85333
tstamp_mode : NONE
period_step : 1
avail_min : 4095
period_event : 0
start_threshold : 16383
stop_threshold : 16383
silence_threshold: 0
silence_size : 0
boundary : 9222809086901354496
^CAborted by signal Interrupt...
>Fix:
--- convert_float.diff begins here ---
Index: audio/alsa-lib/files/asound.conf.sample
===================================================================
--- audio/alsa-lib/files/asound.conf.sample (revision 333423)
+++ audio/alsa-lib/files/asound.conf.sample (working copy)
@@ -1,14 +1,21 @@
#
# FreeBSD/OSS
#
+pcm_slave.oss {
+ pcm {
+ type oss
+ device /dev/dsp
+ }
+}
+
pcm.!default {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
ctl.!default {
type oss
- device /dev/mixer
+ device /dev/dsp
}
#
@@ -15,28 +22,28 @@ ctl.!default {
# Remap all possible surround stuffs.
#
pcm.!surround40 {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
pcm.!surround41 {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
pcm.!surround50 {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
pcm.!surround51 {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
pcm.!surround71 {
- type oss
- device /dev/dsp
+ type plug
+ slave pcm_slave.oss
}
#
--- convert_float.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list