Как играть, звук в Python, не прерывая музыку/другую звучит от проигрывания

Я работаю над таймером в Python, который звучит как звон, когда время ожидания закончено. Я использую следующий код:

from wave import open as wave_open
from ossaudiodev import open as oss_open

def _play_chime():
    """
    Play a sound file once.

    """
    sound_file = wave_open('chime.wav','rb')
    (nc,sw,fr,nf,comptype, compname) = sound_file.getparams( )
    dsp = oss_open('/dev/dsp','w')
    try:
      from ossaudiodev import AFMT_S16_NE
    except ImportError:
      if byteorder == "little":
        AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
      else:
        AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
    dsp.setparameters(AFMT_S16_NE, nc, fr)
    data = sound_file.readframes(nf)
    sound_file.close()
    dsp.write(data)
    dsp.close()

Это работает довольно хорошее, если любое другое устройство уже не является звуком вывода.

Как я мог сделать в основном то же (в соответствии с Linux), не имея предпосылки, что никакой звук не играется?

Если бы Вы думаете, что процесс потребовал бы, чтобы API гарантировал смешивание программного обеспечения, предложите метод :)

Спасибо за поддержку :)

7
задан Morlock 13 March 2010 в 21:37
поделиться

2 ответа

Легкий ответ - «переключиться с OSS в Pulseaudio». (Или установить ALSA для использования DMIX или получить звуковую карту с лучшими драйверами Linux ...)

Чем более сложный ответ, ваш код уже работает так, как вы хотите ... на некоторых звуковых картах. Драйверы OSS могут выставлять аппаратные смесители, чтобы вы могли иметь несколько звуковых потоков, воспроизводимых одновременно, или они могут выдержать один поток, который приводит к блокирующему звуку, которое вы видите в вашей системе. Единственное правильное решение здесь состоит в том, чтобы использовать API, обеспечивающий смешивание программного обеспечения.

8
ответ дан 7 December 2019 в 03:15
поделиться

Современное оборудование и драйверы поддерживают многопотоковую передачу. Так что, если вы не работаете со старым оборудованием или драйвером, он должен работать в любом случае.

Сказав это, ALSA может дать вам больше контроля, чем OSS. Большинство поставляемых в настоящее время ядер поддерживают и то, и другое.

1
ответ дан 7 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: