2024-09-28 18:47:04 +00:00
|
|
|
#encoding = utf8
|
|
|
|
|
|
|
|
from ctypes import *
|
|
|
|
import os
|
2024-10-04 08:16:36 +00:00
|
|
|
|
|
|
|
import numpy as np
|
|
|
|
|
2024-09-28 18:47:04 +00:00
|
|
|
current = os.path.dirname(__file__)
|
|
|
|
dynamic_path = os.path.join(current, 'AudioRender.dll')
|
|
|
|
|
|
|
|
|
|
|
|
def audio_render_log_callback(level, log, size):
|
|
|
|
print(f'level={level}, log={log}, len={size}')
|
|
|
|
|
|
|
|
|
|
|
|
class AudioRender:
|
|
|
|
def __init__(self):
|
|
|
|
self.__audio_render_obj = WinDLL(dynamic_path)
|
|
|
|
print(self.__audio_render_obj)
|
|
|
|
if self.__audio_render_obj is not None:
|
|
|
|
CALLBACK_TYPE = CFUNCTYPE(None, c_int, c_ubyte, c_uint)
|
|
|
|
c_callback = CALLBACK_TYPE(audio_render_log_callback)
|
|
|
|
self.__init = self.__audio_render_obj.Initialize(c_callback)
|
|
|
|
print('AudioRender init', self.__init)
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
print('AudioRender __del__')
|
|
|
|
if self.__audio_render_obj is None:
|
|
|
|
return
|
|
|
|
if self.__init:
|
|
|
|
self.__audio_render_obj.Uninitialize()
|
|
|
|
|
|
|
|
def write(self, data, size):
|
|
|
|
if not self.__init:
|
|
|
|
return False
|
|
|
|
|
2024-10-04 08:16:36 +00:00
|
|
|
self.__audio_render_obj.argtypes = (POINTER(c_uint8), c_uint)
|
|
|
|
byte_data = np.frombuffer(data, dtype=np.uint8)
|
|
|
|
return self.__audio_render_obj.Write(byte_data.ctypes.data_as(POINTER(c_uint8)), size)
|