-
Notifications
You must be signed in to change notification settings - Fork 401
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Align start seconds for transcript segment #906
Conversation
WalkthroughThis update introduces enhancements to audio processing and memory creation. It adds a new field Changes
Uplevel your code reviews with Entelligence.AI ProEntelligence.AI ProIf you like this project, please support us by purchasing the Pro version. The Pro version has advanced context, superior noise reduction and several proprietary improvements compared to the open source version. Moreover, Entelligence.AI Pro is free for open source projects. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/routers/transcribe.py (3)
Review comments generated (2)
- Review: 1
- LGTM: 1
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
backend/routers/transcribe.py
Outdated
nonlocal segment_start | ||
|
||
if not segments or len(segments) == 0: | ||
return | ||
|
||
# Align the start, end segment | ||
if len(memory_transcript_segements) == 0 and len(segments) > 0: | ||
start = segments[0]["start"] | ||
if not segment_start or segment_start > start: | ||
segment_start = start | ||
for i, segment in enumerate(segments): | ||
segment["start"] -= segment_start | ||
segment["end"] -= segment_start | ||
segments[i] = segment | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for aligning the start and end of segments seems correct. However, it's important to note that this code modifies the input segments
list in-place. If the same list is used elsewhere after this function call, those uses will see the modified values. This could lead to unexpected behavior if not intended. Consider creating a new list with the adjusted segments if you want to avoid side effects.
- segments[i] = segment
+ aligned_segments = [segment.copy() for segment in segments]
+ aligned_segments[i] = segment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/routers/transcribe.py (4)
Review comments generated (4)
- Review: 3
- LGTM: 1
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/utils/processing_memories.py (1)
Review comments generated (1)
- Review: 1
- LGTM: 0
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
backend/utils/processing_memories.py
Outdated
segment_start = transcript_segments[0].start | ||
segment_end = transcript_segments[-1].end | ||
new_memory = CreateMemory( | ||
started_at=datetime.fromtimestamp(timer_start, timezone.utc), | ||
finished_at=datetime.fromtimestamp(timer_start + segment_end, timezone.utc), | ||
started_at=datetime.fromtimestamp(timer_start + segment_start, timezone.utc), | ||
finished_at=datetime.fromtimestamp(timer_start + segment_start + segment_end, timezone.utc), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The calculation of finished_at
seems incorrect. It should be the sum of timer_start
, segment_start
, and the duration of the last segment, not segment_end
. The segment_end
is the end time of the last segment, not its duration. You need to subtract segment_start
from segment_end
to get the duration.
- finished_at=datetime.fromtimestamp(timer_start + segment_start + segment_end, timezone.utc),
+ finished_at=datetime.fromtimestamp(timer_start + segment_start + (segment_end - segment_start), timezone.utc),
Also, it's important to handle the case where transcript_segments
is empty or None before accessing its elements at index 0 and -1. If it's empty or None, this will raise an IndexError or TypeError respectively. Consider adding a check for this at the beginning of your function.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/routers/transcribe.py (4)
Review comments generated (4)
- Review: 3
- LGTM: 1
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (3)
- backend/models/processing_memory.py (1)
- backend/routers/transcribe.py (10)
- backend/utils/processing_memories.py (1)
Files skipped from review due to trivial changes (1)
- backend/utils/processing_memories.py
Review comments generated (11)
- Review: 9
- LGTM: 2
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
@@ -343,6 +365,7 @@ async def _create_processing_memory(): | |||
id=str(uuid.uuid4()), | |||
created_at=datetime.now(timezone.utc), | |||
timer_start=timer_start, | |||
timer_segment_start=timer_start+segment_start, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
backend/routers/transcribe.py
Outdated
nonlocal segment_start | ||
nonlocal segment_end | ||
|
||
# Create wav | ||
processing_audio_frame_synced = len(processing_audio_frames) | ||
|
||
# Remove audio frames [start, end] | ||
left = 0 | ||
if segment_start: | ||
left = max(left, math.floor(segment_start * audio_frames_per_sec)) | ||
right = processing_audio_frame_synced | ||
if segment_end: | ||
right = min(math.ceil(segment_end * audio_frames_per_sec), right) | ||
|
||
file_path = f"_temp/{memory.id}_{uuid.uuid4()}_be" | ||
create_wav_from_bytes(file_path=file_path, frames=processing_audio_frames[:processing_audio_frame_synced], | ||
create_wav_from_bytes(file_path=file_path, frames=processing_audio_frames[left:right], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
backend/routers/transcribe.py
Outdated
now = time.time() | ||
should_create_memory_time = True | ||
if time_validate: | ||
should_create_memory_time = timer_start + segment_end + min_seconds_limit < now | ||
timer_segment_start = timer_start + segment_start | ||
should_create_memory_time = timer_segment_start + segment_end + min_seconds_limit < now |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
backend/routers/transcribe.py
Outdated
@@ -570,7 +601,7 @@ async def _try_flush_new_memory(time_validate: bool = True): | |||
|
|||
should_create_memory = should_create_memory_time and should_create_memory_time_words | |||
print( | |||
f"Should create memory {should_create_memory} - {timer_start} {segment_end} {min_seconds_limit} {now} - {time_validate}, session {session_id}") | |||
f"Should create memory {should_create_memory} - {timer_segment_start} {segment_end} {min_seconds_limit} {now} - {time_validate}, session {session_id}") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/utils/processing_memories.py (1)
Review comments generated (1)
- Review: 1
- LGTM: 0
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
…started at, finished at memory
d3d7147
to
8465de6
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (3)
- backend/models/processing_memory.py (1)
- backend/routers/transcribe.py (12)
- backend/utils/processing_memories.py (1)
Review comments generated (14)
- Review: 10
- LGTM: 4
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
@@ -14,6 +14,7 @@ class ProcessingMemory(BaseModel): | |||
audio_url: Optional[str] = None | |||
created_at: datetime | |||
timer_start: float | |||
timer_segment_start: Optional[float] = None |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The addition of timer_segment_start
as an optional field in the ProcessingMemory
class seems fine. However, it would be beneficial to add a comment explaining what this new field represents and how it differs from timer_start
. This will help other developers understand its purpose more easily.
- timer_segment_start: Optional[float] = None
+ timer_segment_start: Optional[float] = None # Start time for a specific transcript segment
timer_segment_start = processing_memory.timer_segment_start if processing_memory.timer_segment_start else processing_memory.timer_start | ||
segment_end = transcript_segments[-1].end | ||
new_memory = CreateMemory( | ||
started_at=datetime.fromtimestamp(timer_start, timezone.utc), | ||
finished_at=datetime.fromtimestamp(timer_start + segment_end, timezone.utc), | ||
started_at=datetime.fromtimestamp(timer_segment_start, timezone.utc), | ||
finished_at=datetime.fromtimestamp(timer_segment_start + segment_end, timezone.utc), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The changes made here are logical and seem to be in line with the PR's goal of aligning start seconds for transcript segments. However, there is a potential issue with error handling. If processing_memory.timer_segment_start
or processing_memory.timer_start
is None
, this code will throw an exception when trying to create a timestamp from None
. It would be better to handle this case explicitly.
- timer_segment_start = processing_memory.timer_segment_start if processing_memory.timer_segment_start else processing_memory.timer_start
+ timer_segment_start = processing_memory.timer_segment_start if processing_memory.timer_segment_start else processing_memory.timer_start
+ if timer_segment_start is None:
+ print("Timer segment start is invalid")
+ return
This way, we can avoid unexpected exceptions and provide a more informative error message.
backend/routers/transcribe.py
Outdated
now = time.time() | ||
should_create_memory_time = True | ||
timer_segment_start = timer_start + segment_start | ||
if time_validate: | ||
should_create_memory_time = timer_start + segment_end + min_seconds_limit < now | ||
should_create_memory_time = timer_segment_start + segment_end + min_seconds_limit < now |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for validating the transcript seems correct. However, there is no error handling or validation for the data within the segments. It would be beneficial to add checks to ensure that the "start" and "end" keys exist in each segment and that their values are numbers. This will prevent potential KeyError or TypeError exceptions.
Also, the check if time_validate:
on line 590 will fail if time_validate
is 0
, which is a valid value. You should explicitly check for None
instead.
Here's an example of how you could adjust this section:
now = time.time()
should_create_memory_time = True
timer_segment_start = timer_start + segment_start
if time_validate is not None:
should_create_memory_time = timer_segment_start + segment_end + min_seconds_limit < now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (1)
- backend/routers/transcribe.py (11)
Review comments generated (11)
- Review: 7
- LGTM: 4
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
nonlocal segment_start | ||
nonlocal segment_end | ||
|
||
# Create wav | ||
processing_audio_frame_synced = len(processing_audio_frames) | ||
|
||
# Remove audio frames [start, end] | ||
left = 0 | ||
if segment_start: | ||
left = max(left, math.floor(segment_start) * audio_frames_per_sec) | ||
right = processing_audio_frame_synced | ||
if segment_end: | ||
right = min(math.ceil(segment_end) * audio_frames_per_sec, right) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for creating a WAV file seems correct. However, there is no error handling or validation for the segment_start
and segment_end
variables. If these variables are not numbers, this will raise a TypeError. Consider adding error handling or validation to ensure the expected types.
if segment_start:
+ if not isinstance(segment_start, (int, float)):
+ raise TypeError("`segment_start` should be a number.")
left = max(left, math.floor(segment_start) * audio_frames_per_sec)
if segment_end:
+ if not isinstance(segment_end, (int, float)):
+ raise TypeError("`segment_end` should be a number.")
right = min(math.ceil(segment_end) * audio_frames_per_sec, right)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (2)
- backend/database/memories.py (1)
- backend/routers/transcribe.py (12)
Review comments generated (13)
- Review: 6
- LGTM: 7
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Files selected (2)
- backend/routers/transcribe.py (13)
- backend/utils/audio.py (1)
Review comments generated (14)
- Review: 10
- LGTM: 4
Tips
Chat with Entelligence.AI Bot (@Entelligence.AI
)
- Reply on review comments left by this bot to ask follow-up questions. A review comment is a comment on a diff or a file.
- Invite the bot into a review comment chain by tagging
@Entelligence.AI
in a reply.
Code suggestions
- The bot may make code suggestions, but please review them carefully before committing since the line number ranges may be misaligned.
- You can edit the comment made by the bot and manually tweak the suggestion if it is slightly off.
Pausing incremental reviews
- Add
@Entelligence.AI: ignore
anywhere in the PR description to pause further reviews from the bot.
def merge_wav_files(dest_file_path: str, source_files: [str], silent_seconds: [int]): | ||
if len(source_files) == 0 or not dest_file_path: | ||
return | ||
|
||
combined_sounds = AudioSegment.empty() | ||
for file_path in source_files: | ||
for i in range(len(source_files)): | ||
file_path = source_files[i] | ||
sound = AudioSegment.from_wav(file_path) | ||
combined_sounds = combined_sounds + sound | ||
silent_sec = silent_seconds[i] | ||
combined_sounds = combined_sounds + sound + AudioSegment.silent(duration=silent_sec) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new implementation of merge_wav_files
assumes that the lengths of source_files
and silent_seconds
are equal. However, there's no explicit check for this condition. If they aren't equal, it could lead to an IndexError
. To prevent this, you should add a check at the beginning of the function to ensure that the lengths of both lists are equal.
+ if len(source_files) != len(silent_seconds):
+ raise ValueError("source_files and silent_seconds must be of the same length")
Also, consider handling the case where silent_seconds[i]
is not a valid duration (e.g., negative values). You can add a check to ensure that all durations in silent_seconds
are non-negative.
+ if any(sec < 0 for sec in silent_seconds):
+ raise ValueError("All durations in silent_seconds must be non-negative")
Lastly, the current implementation will add a silent segment after the last audio file as well. If this is not intended, you might want to adjust the loop to skip adding silence after the last audio file.
- for i in range(len(source_files)):
+ for i in range(len(source_files) - 1):
file_path = source_files[i]
sound = AudioSegment.from_wav(file_path)
silent_sec = silent_seconds[i]
combined_sounds = combined_sounds + sound + AudioSegment.silent(duration=silent_sec)
+ combined_sounds += AudioSegment.from_wav(source_files[-1])
This way, silence is added only between audio files, not after the last one.
@@ -1,4 +1,5 @@ | |||
import threading | |||
import math |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nonlocal segment_start | ||
nonlocal segment_end | ||
|
||
if not segments or len(segments) == 0: | ||
return | ||
|
||
# Align the start, end segment | ||
if not segment_start: | ||
start = segments[0]["start"] | ||
segment_start = start | ||
|
||
# end | ||
end = segments[-1]["end"] | ||
if not segment_end or segment_end < end: | ||
segment_end = end | ||
|
||
for i, segment in enumerate(segments): | ||
segment["start"] -= segment_start | ||
segment["end"] -= segment_start | ||
segments[i] = segment | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for aligning the start and end of segments seems correct. However, there is no error handling or validation for the segments
data. It would be good to add some checks to ensure that each segment has a "start" and "end" field before trying to access them. This will prevent potential KeyError
exceptions.
# Align the start, end segment
if not segment_start:
start = segments[0].get("start")
if start is None:
raise ValueError("Each segment should have a 'start' field.")
segment_start = start
# end
end = segments[-1].get("end")
if end is None:
raise ValueError("Each segment should have an 'end' field.")
if not segment_end or segment_end < end:
segment_end = end
for i, segment in enumerate(segments):
if "start" not in segment or "end" not in segment:
raise ValueError("Each segment should have 'start' and 'end' fields.")
segment["start"] -= segment_start
segment["end"] -= segment_start
segments[i] = segment
raw_data = await websocket.receive_bytes() | ||
data = raw_data[:] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@@ -262,7 +284,7 @@ async def receive_audio(dg_socket1, dg_socket2, soniox_socket, speechmatics_sock | |||
dg_socket2.send(data) | |||
|
|||
# stream | |||
stream_audio(data) | |||
stream_audio(raw_data) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
last_segment_end = 0 | ||
for segment in last_processing_memory.transcript_segments: | ||
segment_end = max(segment_end, segment.end) | ||
if last_processing_memory.timer_start + segment_end + min_seconds_limit > time.time(): | ||
last_segment_end = max(last_segment_end, segment.end) | ||
timer_segment_start = last_processing_memory.timer_segment_start if last_processing_memory.timer_segment_start else last_processing_memory.timer_start | ||
if timer_segment_start + last_segment_end + min_seconds_limit > time.time(): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The variable name last_segment_end
is misleading because it suggests that it's the end time of the last segment, but it's actually the maximum end time across all segments. Consider renaming it to something like max_segment_end
for clarity.
- last_segment_end = 0
+ max_segment_end = 0
- for segment in last_processing_memory.transcript_segments:
- last_segment_end = max(last_segment_end, segment.end)
+ for segment in last_processing_memory.transcript_segments:
+ max_segment_end = max(max_segment_end, segment.end)
nonlocal segment_start | ||
nonlocal segment_end | ||
|
||
# Create wav | ||
processing_audio_frame_synced = len(processing_audio_frames) | ||
|
||
# Remove audio frames [start, end] | ||
left = 0 | ||
if segment_start: | ||
left = max(left, math.floor(segment_start) * audio_frames_per_sec) | ||
right = processing_audio_frame_synced | ||
if segment_end: | ||
right = min(math.ceil(segment_end) * audio_frames_per_sec, right) | ||
|
||
file_path = f"_temp/{memory.id}_{uuid.uuid4()}_be" | ||
create_wav_from_bytes(file_path=file_path, frames=processing_audio_frames[:processing_audio_frame_synced], | ||
create_wav_from_bytes(file_path=file_path, frames=processing_audio_frames[left:right], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logic for creating a WAV file from a subset of audio frames based on segment start and end times seems correct. However, there is no error handling or validation for the segment_start
and segment_end
variables. It would be good to add some checks to ensure that they are within valid bounds before using them to slice the processing_audio_frames
list. This will prevent potential IndexError
exceptions.
# Remove audio frames [start, end]
left = 0
if segment_start:
left = max(left, math.floor(segment_start) * audio_frames_per_sec)
right = processing_audio_frame_synced
if segment_end:
right = min(math.ceil(segment_end) * audio_frames_per_sec, right)
file_path = f"_temp/{memory.id}_{uuid.uuid4()}_be"
create_wav_from_bytes(file_path=file_path, frames=processing_audio_frames[left:right],
frame_rate=sample_rate, channels=channels, codec=codec, )
nearest_timer_start = processing_memory.timer_starts[-2] | ||
merge_wav_files(merge_file_path, [previous_file_path, file_path], [math.ceil(timer_start-nearest_timer_start), 0]) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The merge_wav_files
function now accepts an additional parameter silent_seconds
. Ensure that this change doesn't affect the functionality of merge_wav_files
, as it was previously called with only two parameters.
- merge_wav_files(merge_file_path, [previous_file_path, file_path])
+ merge_wav_files(merge_file_path, [previous_file_path, file_path], [math.ceil(timer_start-nearest_timer_start), 0])
if not segment_end: | ||
print("Not last segment or last segment invalid") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The validation for segment_end
seems to be incomplete. It checks if segment_end
is not None but does not handle the case when it is None. Consider adding appropriate error handling or logging for this case.
if not segment_end:
print("Not last segment or last segment invalid")
+ return
|
||
# Validate transcript | ||
# Longer 120s | ||
segment_end = last_segment.end | ||
now = time.time() | ||
should_create_memory_time = True | ||
if time_validate: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Issue: #863
Summary by Entelligence.AI
timer_segment_start
to theProcessingMemory
class for improved segment timing.update_memory_finished_at
to update the 'finished_at' field in a memory document, enhancing data accuracy.merge_wav_files
function to support inserting silent segments between audio files, providing better control over audio merging.