mirror of
https://github.com/DJ2LS/FreeDATA
synced 2024-05-14 08:04:33 +00:00
added thread locking to audio buffer to fix corner case
This commit is contained in:
parent
342dd29747
commit
8a0caf7f43
|
@ -8,7 +8,7 @@ import pathlib
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import numpy as np
|
import numpy as np
|
||||||
#print("loading codec2 module", file=sys.stderr)
|
#print("loading codec2 module", file=sys.stderr)
|
||||||
|
from threading import Lock
|
||||||
|
|
||||||
# Enum for codec2 modes
|
# Enum for codec2 modes
|
||||||
class FREEDV_MODE(Enum):
|
class FREEDV_MODE(Enum):
|
||||||
|
@ -135,17 +135,22 @@ class audio_buffer:
|
||||||
self.size = size
|
self.size = size
|
||||||
self.buffer = np.zeros(size, dtype=np.int16)
|
self.buffer = np.zeros(size, dtype=np.int16)
|
||||||
self.nbuffer = 0
|
self.nbuffer = 0
|
||||||
|
self.mutex = Lock()
|
||||||
def push(self,samples):
|
def push(self,samples):
|
||||||
|
self.mutex.acquire()
|
||||||
# add samples at the end of the buffer
|
# add samples at the end of the buffer
|
||||||
assert self.nbuffer+len(samples) <= self.size
|
assert self.nbuffer+len(samples) <= self.size
|
||||||
self.buffer[self.nbuffer:self.nbuffer+len(samples)] = samples
|
self.buffer[self.nbuffer:self.nbuffer+len(samples)] = samples
|
||||||
self.nbuffer += len(samples)
|
self.nbuffer += len(samples)
|
||||||
|
self.mutex.release()
|
||||||
def pop(self,size):
|
def pop(self,size):
|
||||||
|
self.mutex.acquire()
|
||||||
# remove samples from the start of the buffer
|
# remove samples from the start of the buffer
|
||||||
self.nbuffer -= size;
|
self.nbuffer -= size;
|
||||||
self.buffer[:self.nbuffer] = self.buffer[size:size+self.nbuffer]
|
self.buffer[:self.nbuffer] = self.buffer[size:size+self.nbuffer]
|
||||||
assert self.nbuffer >= 0
|
assert self.nbuffer >= 0
|
||||||
|
self.mutex.release()
|
||||||
|
|
||||||
# resampler ---------------------------------------------------------
|
# resampler ---------------------------------------------------------
|
||||||
|
|
||||||
api.FDMDV_OS_48 = int(6) # oversampling rate
|
api.FDMDV_OS_48 = int(6) # oversampling rate
|
||||||
|
|
Loading…
Reference in a new issue