Cleaning some things out
This commit is contained in:
@@ -4,12 +4,14 @@ from contextlib import contextmanager
|
||||
from fractions import Fraction
|
||||
from typing import List
|
||||
|
||||
from ear.fileio.adm.elements import (ObjectCartesianPosition, JumpPosition,
|
||||
AudioBlockFormatObjects)
|
||||
from ear.fileio.bw64 import Bw64Reader
|
||||
import wave
|
||||
|
||||
from .geom_utils import (speaker_active_time_range, compute_relative_vector,
|
||||
room_norm_vector)
|
||||
# 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 .speaker_utils import solo_speakers, unmute_all_speakers
|
||||
|
||||
|
||||
@@ -50,33 +52,25 @@ class ObjectMix:
|
||||
def frame_end(self):
|
||||
return self.scene.frame_end
|
||||
|
||||
@property
|
||||
def sample_rate(self):
|
||||
return self.mixdown_reader.sampleRate
|
||||
@property
|
||||
def sample_rate(self) -> int | None:
|
||||
if self.intermediate_filename:
|
||||
with wave.open(self.intermediate_filename, "rb") as f:
|
||||
return f.getframerate()
|
||||
else:
|
||||
return None
|
||||
|
||||
@property
|
||||
def bits_per_sample(self):
|
||||
return self.mixdown_reader.bitdepth
|
||||
def bits_per_sample(self) -> int | None:
|
||||
with wave.open(self.mixdown_filename, "rb") as f:
|
||||
return f.getsampwidth() * 8
|
||||
|
||||
@property
|
||||
def mixdown_reader(self) -> Bw64Reader:
|
||||
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):
|
||||
def mixdown_filename(self) -> str:
|
||||
if self.intermediate_filename is None:
|
||||
self.mixdown()
|
||||
|
||||
assert self.intermediate_filename
|
||||
|
||||
return self.intermediate_filename
|
||||
|
||||
@@ -102,43 +96,6 @@ class ObjectMix:
|
||||
|
||||
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):
|
||||
if self._mixdown_reader is not None:
|
||||
self._mixdown_reader = None
|
||||
|
||||
@@ -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]):
|
||||
"""
|
||||
Mutes all Objects not in `solo_group` and ensures all objects in this group
|
||||
are not muted.
|
||||
"""
|
||||
for speaker in all_speakers(scene):
|
||||
assert type(speaker.data) is bpy.types.Speaker
|
||||
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):
|
||||
"""
|
||||
Unmutes all speakers.
|
||||
"""
|
||||
for speaker in all_speakers(scene):
|
||||
assert type(speaker.data) is bpy.types.Speaker
|
||||
speaker.data.muted = False
|
||||
|
||||
Reference in New Issue
Block a user