Solaris 10 и qemu: нет звука?

Вопрос или проблема

У меня есть виртуальная машина с Solaris 10 на qemu. Я устанавливаю opensoundsystem для звука. Рабочий стол видит карту (посмотрите на значок громкости).

введите описание изображения здесь

Отчет ossinfo: карта в порядке

ossinfo 
Version info: OSS 4.2 (b 2017/201702011242) (0x00040100) 
Platform: SunOS/i86pc 5.10 Generic_150401-55 (solaris10)

Number of audio devices:    1
Number of audio engines:    2
Number of MIDI devices:     0
Number of mixer devices:    1

Device objects
 0: osscore0 OSS common devices
 1: oss_sadasupport SADA compatibility layer
 2: oss_ich0 Intel ICH (2415) interrupts=5991 (11109)

MIDI devices (/dev/midi*)

Mixer devices
 0: ICH AC97 Mixer (STAC9700) (Mixer 0 of device object 2)

Audio devices
Intel ICH (2415)                  /dev/oss/oss_ich0/pcm0  (device index 0)

Nodes
  /dev/dsp -> /dev/oss/oss_ich0/pcm0
  /dev/dsp_in -> /dev/oss/oss_ich0/pcm0
  /dev/dsp_out -> /dev/oss/oss_ich0/pcm0
  /dev/dsp_ac3 -> /dev/oss/oss_ich0/pcm0
  /dev/dsp_multich -> /dev/oss/oss_ich0/pcm0
  /dev/mixer -> ../devices/pseudo/osscore@0:mixer
  /dev/sndstat -> ../devices/pseudo/osscore@0:sndstat

Но когда я пытаюсь послушать mp3, ничего не слышно, хотя программа, кажется, работает нормально

mplayer Ace\ of\ base-The\ sign.mp3 
MPlayer 1.1-4.8.2 (C) 2000-2012 команда MPlayer

Воспроизведение Ace of base-The sign.mp3.
libavformat версия 54.6.100 (внутренняя)
Обнаружен формат файла только с аудио.
Загрузить субтитры в ./
==========================================================================
Открытие аудио декодера: [mpg123] MPEG 1.0/2.0/2.5 уровни I, II, III
AUDIO: 48000 Hz, 2 ch, s16le, 320.0 кбит/20.83% (коэффициент: 40000->192000)
Выбран аудио кодек: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 уровни I, II, III)
==========================================================================
ao2: 48000 Hz  2 канала  s16le [0x9]

AO: [sun] 48000Hz 2ch s16le (2 байта на семпл)
Видео: нет видео
Начало воспроизведения...
A:   3.9 (03.9) из 198.0 (03:18.0)  0.8%    

Громкость вроде в порядке

введите описание изображения здесь

Есть идеи?

Пытаюсь подключить vmix, чтобы включить звук для нескольких приложений, отчет устройства занят

vmixctl attach /dev/oss/oss_ich0/pcm0 
/dev/oss/oss_ich0/pcm0: устройство занято

Даже после настройки драйвера с этой опцией, как предложено в вики Archlinux

vim /kernel/drv/osscore.conf

name="osscore" parent="pseudo" instance=0 ddi-no-autodetach=1 ddi-forceattach=1 vmix_no_autoattach=1

ИЗМЕНИТЬ 1: Я также подключил виртуальный микшер (пришлось временно отключить CDE). Но всё еще нет звука

введите описание изображения здесь

Решение найдено, конфигурация содержала

  <qemu:commandline>
    <qemu:arg value="pa,id=ac97,server=unix:/tmp/pulse-socket"/>
    <qemu:env name="QEMU_AUDIO_DRV" value="pa"/>
    <qemu:env name="QEMU_AUDIO_DAC_FIXED_FREQ" value="48000"/>
    <qemu:env name="QEMU_AUDIO_DAC_TRY_POLL" value="0"/>
    <qemu:env name="QEMU_AUDIO_ADC_FIXED_FREQ" value="48000"/>
    <qemu:env name="QEMU_AUDIO_ADC_TRY_POLL" value="0"/>
    <qemu:env name="QEMU_AUDIO_TIMER_PERIOD" value="1000"/>
    <qemu:env name="QEMU_PA_SERVER" value="/tmp/pulse-socket"/>
  </qemu:commandline>

Я добавил устройство

<qemu:commandline>
   <qemu:arg value="-device"/>
    <qemu:arg value="ac97,audiodev=ac97"/>
    <qemu:arg value="-audiodev"/>
        <qemu:arg value="pa,id=ac97,server=unix:/tmp/pulse-socket"/>
        <qemu:env name="QEMU_AUDIO_DRV" value="pa"/>
        <qemu:env name="QEMU_AUDIO_DAC_FIXED_FREQ" value="48000"/>
        <qemu:env name="QEMU_AUDIO_DAC_TRY_POLL" value="0"/>
        <qemu:env name="QEMU_AUDIO_ADC_FIXED_FREQ" value="48000"/>
        <qemu:env name="QEMU_AUDIO_ADC_TRY_POLL" value="0"/>
        <qemu:env name="QEMU_AUDIO_TIMER_PERIOD" value="1000"/>
        <qemu:env name="QEMU_PA_SERVER" value="/tmp/pulse-socket"/>
      </qemu:commandline>

Теперь работает, вероятно, также будет работать классическая конфигурация libvirt (без qemu:commandline), проверю в будущем.

Ответ или решение

Ваша проблема связана с отсутствием звука при использовании операционной системы Solaris 10 в виртуальной машине под управлением QEMU и использовании Open Sound System (OSS) для звука. Давайте подробно разберем возможные причины и решения этой проблемы.

Теория

Когда вы настраиваете виртуальную машину в QEMU с операционной системой Solaris 10 и хотите обеспечить звук, необходимо учитывать несколько факторов. Во-первых, QEMU предоставляет различные эмуляции аудиоустройств, которые требуют правильной конфигурации, чтобы они корректно работали с ОС. В случае Solaris 10 и использования OSS, вам нужно учитывать как системную конфигурацию, так и конфигурацию QEMU на хост-машине.

Одной из особенностей QEMU является поддержка различных аудиодрайверов, таких как ALSA, PulseAudio (pa), и звуковая карта AC97, которая часто используется в эмуляции для обеспечения совместимости с многими операционными системами.

Пример

В вашем случае вы используете звуковую карту Intel ICH (AC97), которая была распознана OSS под Solaris 10, что подтверждается выводом команды ossinfo. Однако при попытке воспроизвести аудио, звук отсутствовал.
Вы пробовали изменить конфигурацию, используя vmix, но получали сообщение об ошибке, что устройство занято (Device busy), что указывает на то, что аудиоустройство не было должным образом освобождено или используется другим процессом.

Ваша конфигурация QEMU изначально не была оптимально настроена для этой задачи. После внесения изменений в командную строку QEMU, добавив параметры, связанные с PulseAudio и конкретным управлением аудио в QEMU, ситуация изменилась.

Применение

Для обеспечения корректной работы звука в вашей конфигурации Solaris 10 на QEMU, выполните следующие шаги:

  1. Использование PulseAudio в QEMU: Убедитесь, что PulseAudio установлен и настроен на вашем хосте QEMU. Вы добавили конфигурацию, которая задает нужные параметры для аудиосервера, такие как pa,id=ac97,server=unix:/tmp/pulse-socket и переменные окружения для QEMU, что позволило корректно использовать аудиоустройство.

  2. Параметры QEMU для AC97: В вашей конфигурации QEMU добавьте аргументы командной строки для использования AC97 с PulseAudio:

    <qemu:commandline>
       <qemu:arg value="-device"/>
       <qemu:arg value="ac97,audiodev=ac97"/>
       <qemu:arg value="-audiodev"/>
       <qemu:arg value="pa,id=ac97,server=unix:/tmp/pulse-socket"/>
       <qemu:env name="QEMU_AUDIO_DRV" value="pa"/>
       <qemu:env name="QEMU_AUDIO_DAC_FIXED_FREQ" value="48000"/>
       <qemu:env name="QEMU_AUDIO_DAC_TRY_POLL" value="0"/>
       <qemu:env name="QEMU_AUDIO_ADC_FIXED_FREQ" value="48000"/>
       <qemu:env name="QEMU_AUDIO_ADC_TRY_POLL" value="0"/>
       <qemu:env name="QEMU_AUDIO_TIMER_PERIOD" value="1000"/>
       <qemu:env name="QEMU_PA_SERVER" value="/tmp/pulse-socket"/>
    </qemu:commandline>
  3. Настройка Open Sound System (OSS): Обязательно проверьте конфигурацию OSS в Solaris, чтобы убедиться, что она настроена на использование правильного устройства и совместима с QEMU.

  4. Диагностика и тестирование: После изменения конфигурации проверьте звук с помощью простых аудиоплееров или звуковых тестов, чтобы убедиться, что все установлено правильно.

  5. Рассмотрите libvirt для управления QEMU: Можно попытаться использовать libvirt для управления конфигурацией QEMU, что может предложить более удобные средства для конфигурации аудио и других устройств.

Решение проблемы со звуком в виртуальных машинах может потребовать итеративного подхода, так как требуется взаимодействие нескольких систем (QEMU, ОС гостя, и аудиосистемы хоста), чтобы всё работало согласованно. Ваши действия с настройкой и понимание используемых технологий свидетельствуют о профессиональном подходе к решению задачи.

Оцените материал
Добавить комментарий

Капча загружается...