Skip to content

Commit 598ed4e

Browse files
committed
request microphone permission, fix librosa parameters, add libsndfile1 system dependency, fix list itterator, handle collect_frames asyncio task cancelations
1 parent 4c33e26 commit 598ed4e

File tree

5 files changed

+17
-9
lines changed

5 files changed

+17
-9
lines changed

docker/Dockerfile.base

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -
66
wget \
77
nano \
88
socat \
9+
libsndfile1 \
910
build-essential llvm tk-dev \
1011
&& rm -rf /var/lib/apt/lists/*
1112

nodes/audio_utils/pitch_shift.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,6 @@ def IS_CHANGED(cls):
2727

2828
def execute(self, audio, sample_rate, pitch_shift):
2929
audio_float = audio.astype(np.float32) / 32768.0
30-
shifted_audio = librosa.effects.pitch_shift(audio_float, sample_rate, n_steps=pitch_shift)
30+
shifted_audio = librosa.effects.pitch_shift(y=audio_float, sr=sample_rate, n_steps=pitch_shift)
3131
shifted_int16 = np.clip(shifted_audio * 32768.0, -32768, 32767).astype(np.int16)
3232
return shifted_int16, sample_rate

server/app.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
logger = logging.getLogger(__name__)
2323
logging.getLogger('aiortc.rtcrtpsender').setLevel(logging.WARNING)
2424
logging.getLogger('aiortc.rtcrtpreceiver').setLevel(logging.WARNING)
25+
logging.getLogger('numba').setLevel(logging.WARNING)
2526

2627

2728
MAX_BITRATE = 2000000
@@ -37,9 +38,12 @@ def __init__(self, track: MediaStreamTrack, pipeline):
3738
asyncio.create_task(self.collect_frames())
3839

3940
async def collect_frames(self):
40-
while True:
41-
frame = await self.track.recv()
42-
await self.pipeline.put_video_frame(frame)
41+
try:
42+
while True:
43+
frame = await self.track.recv()
44+
await self.pipeline.put_video_frame(frame)
45+
except asyncio.CancelledError:
46+
logger.info("Audio frame collection cancelled")
4347

4448
async def recv(self):
4549
return await self.pipeline.get_processed_video_frame()
@@ -54,9 +58,12 @@ def __init__(self, track: MediaStreamTrack, pipeline):
5458
asyncio.create_task(self.collect_frames())
5559

5660
async def collect_frames(self):
57-
while True:
58-
frame = await self.track.recv()
59-
await self.pipeline.put_audio_frame(frame)
61+
try:
62+
while True:
63+
frame = await self.track.recv()
64+
await self.pipeline.put_audio_frame(frame)
65+
except asyncio.CancelledError:
66+
logger.info("Audio frame collection cancelled")
6067

6168
async def recv(self):
6269
return await self.pipeline.get_processed_audio_frame()

src/comfystream/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def __init__(self, max_workers: int = 1, **kwargs):
2222

2323
async def set_prompts(self, prompts: List[PromptDictInput]):
2424
self.current_prompts = [convert_prompt(prompt) for prompt in prompts]
25-
for idx in range(self.current_prompts):
25+
for idx in range(len(self.current_prompts)):
2626
task = asyncio.create_task(self.run_prompt(idx))
2727
self.running_prompts[idx] = task
2828

ui/src/components/settings.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ function ConfigForm({ config, onSubmit }: ConfigFormProps) {
146146

147147
const getVideoDevices = useCallback(async () => {
148148
try {
149-
await navigator.mediaDevices.getUserMedia({ video: true });
149+
await navigator.mediaDevices.getUserMedia({ video: true, audio: true });
150150

151151
const devices = await navigator.mediaDevices.enumerateDevices();
152152
const videoDevices = [

0 commit comments

Comments
 (0)