Cleaning some things out

This commit is contained in:
2025-11-05 21:12:55 -08:00
parent ab25c69b59
commit dc064cba29
2 changed files with 27 additions and 63 deletions

View File

@@ -4,12 +4,14 @@ from contextlib import contextmanager
from fractions import Fraction from fractions import Fraction
from typing import List from typing import List
from ear.fileio.adm.elements import (ObjectCartesianPosition, JumpPosition, import wave
AudioBlockFormatObjects)
from ear.fileio.bw64 import Bw64Reader
from .geom_utils import (speaker_active_time_range, compute_relative_vector, # from ear.fileio.adm.elements import (ObjectCartesianPosition, JumpPosition,
room_norm_vector) # AudioBlockFormatObjects)
# from ear.fileio.bw64 import Bw64Reader
# from .geom_utils import (speaker_active_time_range, compute_relative_vector,
# room_norm_vector)
from .speaker_utils import solo_speakers, unmute_all_speakers from .speaker_utils import solo_speakers, unmute_all_speakers
@@ -51,33 +53,25 @@ class ObjectMix:
return self.scene.frame_end return self.scene.frame_end
@property @property
def sample_rate(self): def sample_rate(self) -> int | None:
return self.mixdown_reader.sampleRate if self.intermediate_filename:
with wave.open(self.intermediate_filename, "rb") as f:
return f.getframerate()
else:
return None
@property @property
def bits_per_sample(self): def bits_per_sample(self) -> int | None:
return self.mixdown_reader.bitdepth with wave.open(self.mixdown_filename, "rb") as f:
return f.getsampwidth() * 8
@property @property
def mixdown_reader(self) -> Bw64Reader: def mixdown_filename(self) -> str:
if self._mixdown_reader is None:
self._mixdown_reader = Bw64Reader(self.mixdown_file_handle)
return self._mixdown_reader
@property
def mixdown_file_handle(self):
assert self.mixdown_filename
if self._mixdown_file_handle is None:
self._mixdown_file_handle = open(self.mixdown_filename, 'rb')
return self._mixdown_file_handle
@property
def mixdown_filename(self):
if self.intermediate_filename is None: if self.intermediate_filename is None:
self.mixdown() self.mixdown()
assert self.intermediate_filename
return self.intermediate_filename return self.intermediate_filename
@property @property
@@ -102,43 +96,6 @@ class ObjectMix:
unmute_all_speakers(scene) unmute_all_speakers(scene)
def adm_block_formats(self, room_size=1.):
fps = self.scene.render.fps
block_formats = []
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):
assert self.scene.camera
self.scene.frame_set(frame)
relative_vector = compute_relative_vector(
camera=self.scene.camera,
target=speaker_obj)
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)
if len(block_formats) == 0 or pos != block_formats[-1].position:
jp = JumpPosition(
flag=True, interpolationLength=Fraction(1, fps * 2))
block = AudioBlockFormatObjects(position=pos,
rtime=Fraction(frame, fps),
duration=Fraction(1, fps),
cartesian=True,
jumpPosition=jp)
block_formats.append(block)
else:
block_formats[-1].duration = block_formats[-1].duration + \
Fraction(1, fps)
return block_formats
def rm_mixdown(self): def rm_mixdown(self):
if self._mixdown_reader is not None: if self._mixdown_reader is not None:
self._mixdown_reader = None self._mixdown_reader = None

View File

@@ -5,6 +5,10 @@ def all_speakers(scene: bpy.types.Scene) -> list[bpy.types.Object]:
def solo_speakers(scene: bpy.types.Scene, solo_group: list[bpy.types.Object]): def solo_speakers(scene: bpy.types.Scene, solo_group: list[bpy.types.Object]):
"""
Mutes all Objects not in `solo_group` and ensures all objects in this group
are not muted.
"""
for speaker in all_speakers(scene): for speaker in all_speakers(scene):
assert type(speaker.data) is bpy.types.Speaker assert type(speaker.data) is bpy.types.Speaker
if speaker in solo_group: if speaker in solo_group:
@@ -16,6 +20,9 @@ def solo_speakers(scene: bpy.types.Scene, solo_group: list[bpy.types.Object]):
def unmute_all_speakers(scene): def unmute_all_speakers(scene):
"""
Unmutes all speakers.
"""
for speaker in all_speakers(scene): for speaker in all_speakers(scene):
assert type(speaker.data) is bpy.types.Speaker assert type(speaker.data) is bpy.types.Speaker
speaker.data.muted = False speaker.data.muted = False