Switch to SDL outputs with pulseaudio for linux
This commit is contained in:
parent
592cf11a79
commit
c475dbb5d5
4 changed files with 44 additions and 2 deletions
|
@ -5,7 +5,7 @@ os.putenv('SDL_AUDIODRIVER', 'pulseaudio')
|
|||
import pygame._sdl2 as sdl2
|
||||
import pygame
|
||||
from pygame import mixer
|
||||
#pygame.init()
|
||||
pygame.init()
|
||||
import time
|
||||
mixer.init(44100, -16, 2, 1024)
|
||||
is_capture = 0 # zero to request playback devices, non-zero to request recording devices
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
from typing import Any, Dict, List, Optional, Tuple
|
||||
import sounddevice as sd
|
||||
from helpers.os_environment import isLinux, isMacOS, isWindows
|
||||
import os
|
||||
|
||||
os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "hide"
|
||||
os.putenv('SDL_AUDIODRIVER', 'pulseaudio')
|
||||
import pygame._sdl2 as sdl2
|
||||
from pygame import mixer
|
||||
import glob
|
||||
|
||||
if isWindows():
|
||||
|
@ -53,6 +59,15 @@ class DeviceManager:
|
|||
|
||||
return host_apis
|
||||
|
||||
@classmethod
|
||||
def getAudioDevices(cls) -> List[str]:
|
||||
mixer.init(44100, -16, 2, 1024)
|
||||
is_capture = 0 # zero to request playback devices, non-zero to request recording devices
|
||||
num = sdl2.get_num_audio_devices(is_capture)
|
||||
names = [str(sdl2.get_audio_device_name(i, is_capture), encoding="utf-8") for i in range(num)]
|
||||
mixer.quit()
|
||||
return names
|
||||
|
||||
@classmethod
|
||||
def getSerialPorts(cls) -> List[Optional[str]]:
|
||||
"""Lists serial port names
|
||||
|
|
|
@ -33,6 +33,26 @@ Set for:
|
|||
Default Audio Output
|
||||
</code>
|
||||
</p>
|
||||
{% if data.sdl_direct %}
|
||||
Linux (Pulse Audio)
|
||||
<br>
|
||||
<code>
|
||||
{% for output in data.outputs %}
|
||||
Set for:
|
||||
{% for channel in data.channels %}
|
||||
{% if not channel %}
|
||||
Player {{loop.index0}}
|
||||
{% elif channel.output == output %}
|
||||
<strong>Player {{channel.channel}}</strong>
|
||||
{% else %}
|
||||
<a href="/player/{{channel.channel}}/output/{{output}}">Player {{channel.channel}}</a>
|
||||
{% endif %}
|
||||
/
|
||||
{% endfor %}
|
||||
{% if output %}{{output}}{% else %}System Default Output{% endif %}<br>
|
||||
{% endfor %}
|
||||
</code>
|
||||
{% else %}
|
||||
{% for host_api in data.outputs %}
|
||||
{{host_api.name}}
|
||||
<br>
|
||||
|
@ -54,4 +74,5 @@ Default Audio Output
|
|||
{% endfor %}
|
||||
</code>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
|
|
@ -17,6 +17,7 @@ import json
|
|||
import os
|
||||
|
||||
from helpers.os_environment import (
|
||||
isLinux,
|
||||
resolve_external_file_path,
|
||||
resolve_local_file_path,
|
||||
)
|
||||
|
@ -171,11 +172,16 @@ def ui_config_player(request):
|
|||
for i in range(server_state.get()["num_channels"]):
|
||||
channel_states.append(status(i))
|
||||
|
||||
outputs = DeviceManager.getAudioOutputs()
|
||||
outputs = None
|
||||
if isLinux():
|
||||
outputs = DeviceManager.getAudioDevices()
|
||||
else:
|
||||
outputs = DeviceManager.getAudioOutputs()
|
||||
|
||||
data = {
|
||||
"channels": channel_states,
|
||||
"outputs": outputs,
|
||||
"sdl_direct": isLinux(),
|
||||
"ui_page": "config",
|
||||
"ui_title": "Player Config",
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue