mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
459e39daea
..and some other changes to the gui so its compatible again with the latest socket commands. The rx buffer has now a unique id, and new structure. Also all messages and files will be saved to the same buffer. All commands which will be sent to the tnc or dameon are now written in lowercase
69 lines
No EOL
2.2 KiB
Python
69 lines
No EOL
2.2 KiB
Python
|
|
import json
|
|
|
|
####################################################
|
|
# https://stackoverflow.com/questions/7088672/pyaudio-working-but-spits-out-error-messages-each-time
|
|
# https://github.com/DJ2LS/FreeDATA/issues/22
|
|
# we need to have a look at this if we want to run this on Windows and MacOS !
|
|
# Currently it seems, this is a Linux-only problem
|
|
|
|
from ctypes import *
|
|
from contextlib import contextmanager
|
|
import pyaudio
|
|
|
|
ERROR_HANDLER_FUNC = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p)
|
|
|
|
def py_error_handler(filename, line, function, err, fmt):
|
|
pass
|
|
|
|
c_error_handler = ERROR_HANDLER_FUNC(py_error_handler)
|
|
|
|
@contextmanager
|
|
def noalsaerr():
|
|
asound = cdll.LoadLibrary('libasound.so')
|
|
asound.snd_lib_error_set_handler(c_error_handler)
|
|
yield
|
|
asound.snd_lib_error_set_handler(None)
|
|
|
|
# with noalsaerr():
|
|
# p = pyaudio.PyAudio()
|
|
######################################################
|
|
|
|
def get_input_devices():
|
|
# UPDATE LIST OF AUDIO DEVICES
|
|
try:
|
|
# we need to "try" this, because sometimes libasound.so isn't in the default place
|
|
# try to supress error messages
|
|
with noalsaerr(): # https://github.com/DJ2LS/FreeDATA/issues/22
|
|
p = pyaudio.PyAudio()
|
|
# else do it the default way
|
|
except Exception as e:
|
|
p = pyaudio.PyAudio()
|
|
|
|
input_devices = []
|
|
output_devices = []
|
|
|
|
for i in range(0, p.get_device_count()):
|
|
# we need to do a try exception, beacuse for windows theres now audio device range
|
|
try:
|
|
maxInputChannels = p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')
|
|
maxOutputChannels = p.get_device_info_by_host_api_device_index(0, i).get('maxOutputChannels')
|
|
name = p.get_device_info_by_host_api_device_index(0, i).get('name')
|
|
except:
|
|
maxInputChannels = 0
|
|
maxOutputChannels = 0
|
|
name = ''
|
|
|
|
if maxInputChannels > 0:
|
|
input_devices.append({"id": i, "name": str(name)})
|
|
if maxOutputChannels > 0:
|
|
output_devices.append({"id": i, "name": str(name)})
|
|
|
|
p.terminate()
|
|
|
|
return [input_devices, output_devices]
|
|
|
|
|
|
|
|
def get_output_devices():
|
|
pass |