mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-27 13:52:20 +00:00
qemu: wire up support for backend specific audio settings
Reviewed-by: Michal Privoznik <mprivozn@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
3e97d81a81
commit
16634feb1d
@ -7615,6 +7615,40 @@ qemuBuildAudioCommonArg(virBufferPtr buf,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioALSAArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
virDomainAudioIOALSAPtr def)
|
||||
{
|
||||
if (def->dev)
|
||||
virBufferAsprintf(buf, ",%s.dev=%s", prefix, def->dev);
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioCoreAudioArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
virDomainAudioIOCoreAudioPtr def)
|
||||
{
|
||||
if (def->bufferCount)
|
||||
virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioJackArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
virDomainAudioIOJackPtr def)
|
||||
{
|
||||
if (def->serverName)
|
||||
virBufferAsprintf(buf, ",%s.server-name=%s", prefix, def->serverName);
|
||||
if (def->clientName)
|
||||
virBufferAsprintf(buf, ",%s.client-name=%s", prefix, def->clientName);
|
||||
if (def->connectPorts)
|
||||
virBufferAsprintf(buf, ",%s.connect-ports=%s", prefix, def->connectPorts);
|
||||
if (def->exactName)
|
||||
virBufferAsprintf(buf, ",%s.exact-name=%s", prefix,
|
||||
virTristateSwitchTypeToString(def->exactName));
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioOSSArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
@ -7622,6 +7656,33 @@ qemuBuildAudioOSSArg(virBufferPtr buf,
|
||||
{
|
||||
if (def->dev)
|
||||
virBufferAsprintf(buf, ",%s.dev=%s", prefix, def->dev);
|
||||
if (def->bufferCount)
|
||||
virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
|
||||
if (def->tryPoll)
|
||||
virBufferAsprintf(buf, ",%s.try-poll=%s", prefix,
|
||||
virTristateSwitchTypeToString(def->tryPoll));
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioPulseAudioArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
virDomainAudioIOPulseAudioPtr def)
|
||||
{
|
||||
if (def->name)
|
||||
virBufferAsprintf(buf, ",%s.name=%s", prefix, def->name);
|
||||
if (def->streamName)
|
||||
virBufferAsprintf(buf, ",%s.stream-name=%s", prefix, def->streamName);
|
||||
if (def->latency)
|
||||
virBufferAsprintf(buf, ",%s.latency=%u", prefix, def->latency);
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioSDLArg(virBufferPtr buf,
|
||||
const char *prefix,
|
||||
virDomainAudioIOSDLPtr def)
|
||||
{
|
||||
if (def->bufferCount)
|
||||
virBufferAsprintf(buf, ",%s.buffer-count=%u", prefix, def->bufferCount);
|
||||
}
|
||||
|
||||
static int
|
||||
@ -7644,23 +7705,46 @@ qemuBuildAudioCommandLineArg(virCommandPtr cmd,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_ALSA:
|
||||
qemuBuildAudioALSAArg(&buf, "in", &def->backend.alsa.input);
|
||||
qemuBuildAudioALSAArg(&buf, "out", &def->backend.alsa.output);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_COREAUDIO:
|
||||
qemuBuildAudioCoreAudioArg(&buf, "in", &def->backend.coreaudio.input);
|
||||
qemuBuildAudioCoreAudioArg(&buf, "out", &def->backend.coreaudio.output);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_JACK:
|
||||
qemuBuildAudioJackArg(&buf, "in", &def->backend.jack.input);
|
||||
qemuBuildAudioJackArg(&buf, "out", &def->backend.jack.output);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_OSS:
|
||||
qemuBuildAudioOSSArg(&buf, "in", &def->backend.oss.input);
|
||||
qemuBuildAudioOSSArg(&buf, "out", &def->backend.oss.output);
|
||||
|
||||
if (def->backend.oss.tryMMap)
|
||||
virBufferAsprintf(&buf, ",try-mmap=%s",
|
||||
virTristateSwitchTypeToString(def->backend.oss.tryMMap));
|
||||
if (def->backend.oss.exclusive)
|
||||
virBufferAsprintf(&buf, ",exclusive=%s",
|
||||
virTristateSwitchTypeToString(def->backend.oss.exclusive));
|
||||
if (def->backend.oss.dspPolicySet)
|
||||
virBufferAsprintf(&buf, ",dsp-policy=%d", def->backend.oss.dspPolicy);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
|
||||
qemuBuildAudioPulseAudioArg(&buf, "in", &def->backend.pulseaudio.input);
|
||||
qemuBuildAudioPulseAudioArg(&buf, "out", &def->backend.pulseaudio.output);
|
||||
|
||||
if (def->backend.pulseaudio.serverName)
|
||||
virBufferAsprintf(&buf, ",server=%s", def->backend.pulseaudio.serverName);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_SDL:
|
||||
qemuBuildAudioSDLArg(&buf, "in", &def->backend.sdl.input);
|
||||
qemuBuildAudioSDLArg(&buf, "out", &def->backend.sdl.output);
|
||||
|
||||
if (def->backend.sdl.driver) {
|
||||
/*
|
||||
* Some SDL audio driver names are different on SDL 1.2
|
||||
@ -7679,6 +7763,8 @@ qemuBuildAudioCommandLineArg(virCommandPtr cmd,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_FILE:
|
||||
if (def->backend.file.path)
|
||||
virBufferEscapeString(&buf, ",path=%s", def->backend.file.path);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_LAST:
|
||||
@ -7732,15 +7818,62 @@ qemuBuildAudioCommonEnv(virCommandPtr cmd,
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioOSSEnv(virCommandPtr cmd,
|
||||
qemuBuildAudioALSAEnv(virCommandPtr cmd,
|
||||
const char *prefix,
|
||||
virDomainAudioIOOSSPtr def)
|
||||
virDomainAudioIOALSAPtr def)
|
||||
{
|
||||
if (def->dev)
|
||||
virCommandAddEnvFormat(cmd, "%sDEV=%s",
|
||||
prefix, def->dev);
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioCoreAudioEnv(virCommandPtr cmd,
|
||||
virDomainAudioDefPtr def)
|
||||
{
|
||||
if (def->backend.coreaudio.output.bufferCount)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_COREAUDIO_BUFFER_COUNT=%u",
|
||||
def->backend.coreaudio.output.bufferCount);
|
||||
if (def->output.bufferLength)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_COREAUDIO_BUFFER_SIZE=%u",
|
||||
def->output.bufferLength);
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioOSSEnv(virCommandPtr cmd,
|
||||
const char *prefix,
|
||||
const char *prefix2,
|
||||
virDomainAudioIOOSSPtr def)
|
||||
{
|
||||
if (def->dev)
|
||||
virCommandAddEnvFormat(cmd, "%sDEV=%s",
|
||||
prefix, def->dev);
|
||||
if (def->tryPoll)
|
||||
virCommandAddEnvFormat(cmd, "%sTRY_POLL=%s", prefix2,
|
||||
virTristateSwitchTypeToString(def->tryPoll));
|
||||
}
|
||||
|
||||
static void
|
||||
qemuBuildAudioPulseAudioEnv(virCommandPtr cmd,
|
||||
virDomainAudioDefPtr def)
|
||||
{
|
||||
if (def->backend.pulseaudio.input.name)
|
||||
virCommandAddEnvPair(cmd, "QEMU_PA_SOURCE",
|
||||
def->backend.pulseaudio.input.name);
|
||||
if (def->backend.pulseaudio.output.name)
|
||||
virCommandAddEnvPair(cmd, "QEMU_PA_SINK",
|
||||
def->backend.pulseaudio.output.name);
|
||||
|
||||
if (def->input.bufferLength)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_PA_SAMPLES=%u",
|
||||
def->input.bufferLength);
|
||||
|
||||
if (def->backend.pulseaudio.serverName)
|
||||
virCommandAddEnvPair(cmd, "QEMU_PA_SERVER=%s",
|
||||
def->backend.pulseaudio.serverName);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
|
||||
virDomainDefPtr def)
|
||||
@ -7761,23 +7894,47 @@ qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_ALSA:
|
||||
qemuBuildAudioALSAEnv(cmd, "QEMU_AUDIO_ADC_", &audio->backend.alsa.input);
|
||||
qemuBuildAudioALSAEnv(cmd, "QEMU_AUDIO_DAC_", &audio->backend.alsa.output);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_COREAUDIO:
|
||||
qemuBuildAudioCoreAudioEnv(cmd, audio);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_JACK:
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_OSS:
|
||||
qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_ADC_", &audio->backend.oss.input);
|
||||
qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_DAC_", &audio->backend.oss.output);
|
||||
qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_ADC_", "QEMU_AUDIO_ADC_",
|
||||
&audio->backend.oss.input);
|
||||
qemuBuildAudioOSSEnv(cmd, "QEMU_OSS_DAC_", "QEMU_AUDIO_DAC_",
|
||||
&audio->backend.oss.output);
|
||||
|
||||
if (audio->backend.oss.input.bufferCount)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_OSS_NFRAGS=%u",
|
||||
audio->backend.oss.input.bufferCount);
|
||||
|
||||
if (audio->backend.oss.tryMMap)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_OSS_MMAP=%s",
|
||||
virTristateSwitchTypeToString(audio->backend.oss.tryMMap));
|
||||
if (audio->backend.oss.exclusive)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_OSS_EXCLUSIVE=%s",
|
||||
virTristateSwitchTypeToString(audio->backend.oss.exclusive));
|
||||
if (audio->backend.oss.dspPolicySet)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_OSS_POLICY=%d",
|
||||
audio->backend.oss.dspPolicy);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
|
||||
qemuBuildAudioPulseAudioEnv(cmd, audio);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_SDL:
|
||||
if (audio->output.bufferLength)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_SDL_SAMPLES=%u",
|
||||
audio->output.bufferLength);
|
||||
|
||||
if (audio->backend.sdl.driver) {
|
||||
/*
|
||||
* Some SDL audio driver names are different on SDL 1.2
|
||||
@ -7796,6 +7953,9 @@ qemuBuildAudioCommandLineEnv(virCommandPtr cmd,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_FILE:
|
||||
if (audio->backend.file.path)
|
||||
virCommandAddEnvFormat(cmd, "QEMU_WAV_PATH=%s",
|
||||
audio->backend.file.path);
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_LAST:
|
||||
|
@ -4209,6 +4209,11 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
|
||||
_("setting audio buffer length is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
if (audio->backend.coreaudio.input.bufferCount) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio buffer count is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@ -4221,10 +4226,32 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_OSS:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AUDIODEV)) {
|
||||
if (audio->backend.oss.input.bufferCount !=
|
||||
audio->backend.oss.output.bufferCount) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio buffer count is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case VIR_DOMAIN_AUDIO_TYPE_PULSEAUDIO:
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_AUDIODEV)) {
|
||||
if (audio->backend.pulseaudio.input.streamName ||
|
||||
audio->backend.pulseaudio.output.streamName) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio stream name is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (audio->backend.pulseaudio.input.latency ||
|
||||
audio->backend.pulseaudio.output.latency) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio latency is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (audio->input.bufferLength != audio->output.bufferLength) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio buffer length is not supported with this QEMU"));
|
||||
@ -4240,6 +4267,13 @@ qemuValidateDomainDeviceDefAudio(virDomainAudioDefPtr audio,
|
||||
_("setting audio buffer length is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (audio->backend.sdl.input.bufferCount ||
|
||||
audio->backend.sdl.output.bufferCount) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("setting audio buffer count is not supported with this QEMU"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -17,6 +17,8 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_AUDIO_ADC_DEV=/dev/dsp0 \
|
||||
QEMU_AUDIO_DAC_DEV=/dev/dsp1 \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
|
@ -36,7 +36,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=alsa,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
out.channels=4,out.format=f32,in.dev=/dev/dsp0,out.dev=/dev/dsp1 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='alsa'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' dev='/dev/dsp0'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' dev='/dev/dsp1'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=alsa,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.dev=/dev/dsp0,out.dev=/dev/dsp1 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='alsa'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' dev='/dev/dsp0'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' dev='/dev/dsp1'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -17,6 +17,8 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_COREAUDIO_BUFFER_COUNT=42 \
|
||||
QEMU_COREAUDIO_BUFFER_SIZE=200 \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
|
@ -35,8 +35,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
|
||||
-audiodev id=audio1,driver=coreaudio,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.buffer-length=200,\
|
||||
out.frequency=22050,out.channels=4,out.format=f32,out.buffer-count=42 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -34,7 +34,7 @@
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='42'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=coreaudio,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.buffer-count=50,out.buffer-count=42 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='coreaudio'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' bufferCount='50'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='42'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -17,6 +17,7 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_WAV_PATH=audio.wav \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
|
@ -36,7 +36,7 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=wav,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
out.channels=4,out.format=f32,path=audio.wav \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -30,7 +30,7 @@
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='file'>
|
||||
<audio id='1' type='file' path='audio.wav'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
|
@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=wav,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
path=audio.wav \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -30,7 +30,7 @@
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='file'>
|
||||
<audio id='1' type='file' path='audio.wav'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
|
@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=jack,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.server-name=fish,in.client-name=food,in.connect-ports=yum,\
|
||||
out.server-name=fish,out.client-name=food,out.connect-ports=yum \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='jack'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' serverName='fish' clientName='food' connectPorts='yum'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' serverName='fish' clientName='food' connectPorts='yum'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -17,6 +17,11 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_OSS_ADC_DEV=/dev/dsp0 \
|
||||
QEMU_AUDIO_ADC_TRY_POLL=on \
|
||||
QEMU_OSS_DAC_DEV=/dev/dsp1 \
|
||||
QEMU_AUDIO_DAC_TRY_POLL=off \
|
||||
QEMU_OSS_NFRAGS=30 \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
|
@ -36,7 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=oss,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
out.channels=4,out.format=f32,in.dev=/dev/dsp0,in.buffer-count=30,\
|
||||
in.try-poll=on,out.dev=/dev/dsp1,out.buffer-count=30,out.try-poll=off \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='oss'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' dev='/dev/dsp0' bufferCount='30' tryPoll='yes'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' dev='/dev/dsp1' bufferCount='30' tryPoll='no'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=oss,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.dev=/dev/dsp0,in.buffer-count=50,in.try-poll=on,out.dev=/dev/dsp1,\
|
||||
out.buffer-count=30,out.try-poll=off,try-mmap=on,exclusive=on,dsp-policy=3 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -30,11 +30,11 @@
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='oss'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<audio id='1' type='oss' tryMMap='yes' exclusive='yes' dspPolicy='3'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' dev='/dev/dsp0' bufferCount='50' tryPoll='yes'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' dev='/dev/dsp1' bufferCount='30' tryPoll='no'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -17,6 +17,10 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_PA_SOURCE=fish \
|
||||
QEMU_PA_SINK=fish \
|
||||
QEMU_PA_SAMPLES=200 \
|
||||
QEMU_PA_SERVER=%s=acme.example.org \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
-S \
|
||||
|
@ -34,9 +34,10 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
"file":"libvirt-1-storage"}' \
|
||||
-device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
|
||||
-audiodev id=audio1,driver=pa,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
in.voices=1,in.buffer-length=200,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.name=fish,out.name=fish,server=acme.example.org \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -30,11 +30,11 @@
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='pulseaudio'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<audio id='1' type='pulseaudio' serverName='acme.example.org'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='200' name='fish'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' name='fish'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -1 +1 @@
|
||||
unsupported configuration: setting audio buffer length is not supported with this QEMU
|
||||
unsupported configuration: setting audio stream name is not supported with this QEMU
|
||||
|
@ -36,7 +36,9 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=pa,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.name=fish,in.stream-name=food,in.latency=100,out.name=fish,\
|
||||
out.stream-name=food,out.latency=200,server=acme.example.org \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -30,11 +30,11 @@
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='pulseaudio'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<audio id='1' type='pulseaudio' serverName='acme.example.org'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' name='fish' streamName='food' latency='100'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' name='fish' streamName='food' latency='200'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -17,6 +17,7 @@ QEMU_AUDIO_DAC_VOICES=2 \
|
||||
QEMU_AUDIO_DAC_FIXED_FREQ=22050 \
|
||||
QEMU_AUDIO_DAC_FIXED_CHANNELS=4 \
|
||||
QEMU_AUDIO_DAC_FIXED_FMT=f32 \
|
||||
QEMU_SDL_SAMPLES=200 \
|
||||
SDL_AUDIODRIVER=pulseaudio \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name QEMUGuest1 \
|
||||
|
@ -36,8 +36,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-device ide-cd,bus=ide.1,unit=0,drive=libvirt-1-format,id=ide0-1-0,bootindex=1 \
|
||||
-audiodev id=audio1,driver=sdl,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.frequency=44100,in.channels=2,in.format=s16,\
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.frequency=22050,\
|
||||
out.channels=4,out.format=f32 \
|
||||
out.mixing-engine=on,out.fixed-settings=on,out.voices=2,out.buffer-length=200,\
|
||||
out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -34,7 +34,7 @@
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
@ -37,7 +37,8 @@ file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-audiodev id=audio1,driver=sdl,in.mixing-engine=on,in.fixed-settings=on,\
|
||||
in.voices=1,in.buffer-length=100,in.frequency=44100,in.channels=2,\
|
||||
in.format=s16,out.mixing-engine=on,out.fixed-settings=on,out.voices=2,\
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32 \
|
||||
out.buffer-length=200,out.frequency=22050,out.channels=4,out.format=f32,\
|
||||
in.buffer-count=40,out.buffer-count=50 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
||||
|
@ -31,10 +31,10 @@
|
||||
<input type='mouse' bus='ps2'/>
|
||||
<input type='keyboard' bus='ps2'/>
|
||||
<audio id='1' type='sdl' driver='pulseaudio'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100'>
|
||||
<input mixingEngine='yes' fixedSettings='yes' voices='1' bufferLength='100' bufferCount='40'>
|
||||
<settings frequency='44100' channels='2' format='s16'/>
|
||||
</input>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200'>
|
||||
<output mixingEngine='yes' fixedSettings='yes' voices='2' bufferLength='200' bufferCount='50'>
|
||||
<settings frequency='22050' channels='4' format='f32'/>
|
||||
</output>
|
||||
</audio>
|
||||
|
Loading…
x
Reference in New Issue
Block a user