Cleanup and modernization

This commit is contained in:
2025-11-05 20:52:22 -08:00
parent 5e4fae092a
commit a85d796f07
2 changed files with 45 additions and 28 deletions

View File

@@ -4,10 +4,12 @@ from contextlib import contextmanager
from fractions import Fraction
from typing import List
from ear.fileio.adm.elements import ObjectCartesianPosition, JumpPosition, AudioBlockFormatObjects
from ear.fileio.adm.elements import (ObjectCartesianPosition, JumpPosition,
AudioBlockFormatObjects)
from ear.fileio.bw64 import Bw64Reader
from .geom_utils import speaker_active_time_range, compute_relative_vector, room_norm_vector
from .geom_utils import (speaker_active_time_range, compute_relative_vector,
room_norm_vector)
from .speaker_utils import solo_speakers, unmute_all_speakers
@@ -89,12 +91,14 @@ class ObjectMix:
scene_name = bpy.path.clean_name(scene.name)
speaker_name = bpy.path.clean_name(self.object_name)
self.intermediate_filename = os.path.join(self.base_dir, "%s_%s.wav" % (scene_name, speaker_name))
self.intermediate_filename = os.path.join(
self.base_dir, "%s_%s.wav" % (scene_name, speaker_name))
bpy.ops.sound.mixdown(filepath=self.intermediate_filename,
container='WAV', codec='PCM', format='S24')
print("Created mixdown named {}".format(self.intermediate_filename))
print("Created mixdown named {}"
.format(self.intermediate_filename))
unmute_all_speakers(scene)
@@ -104,16 +108,24 @@ class ObjectMix:
for speaker_obj in self.sources:
speaker_interval = speaker_active_time_range(speaker_obj)
for frame in range(speaker_interval.start_frame, speaker_interval.end_frame + 1):
for frame in range(speaker_interval.start_frame,
speaker_interval.end_frame + 1):
assert self.scene.camera
self.scene.frame_set(frame)
relative_vector = compute_relative_vector(camera=self.scene.camera, target=speaker_obj)
relative_vector = compute_relative_vector(
camera=self.scene.camera,
target=speaker_obj)
norm_vec = room_norm_vector(relative_vector, room_size=room_size)
norm_vec = room_norm_vector(
relative_vector, room_size=room_size)
pos = ObjectCartesianPosition(X=norm_vec.x, Y=norm_vec.y, Z=norm_vec.z)
pos = ObjectCartesianPosition(X=norm_vec.x, Y=norm_vec.y,
Z=norm_vec.z)
if len(block_formats) == 0 or pos != block_formats[-1].position:
jp = JumpPosition(flag=True, interpolationLength=Fraction(1, fps * 2))
jp = JumpPosition(
flag=True, interpolationLength=Fraction(1, fps * 2))
block = AudioBlockFormatObjects(position=pos,
rtime=Fraction(frame, fps),
duration=Fraction(1, fps),
@@ -122,7 +134,8 @@ class ObjectMix:
block_formats.append(block)
else:
block_formats[-1].duration = block_formats[-1].duration + Fraction(1, fps)
block_formats[-1].duration = block_formats[-1].duration + \
Fraction(1, fps)
return block_formats
@@ -157,7 +170,7 @@ class ObjectMixPool:
return min(lengths)
def object_mixes_from_source_groups(groups: List[List[bpy.types.Object]],
def object_mixes_from_source_groups(groups: List[List[bpy.types.Object]],
scene: bpy.types.Scene, base_dir: str):
mixes = []
for group in groups: