Typos and fixes, runs in Blender

This commit is contained in:
Jamie Hardt
2020-09-20 20:54:53 -07:00
parent 0e471e3efd
commit df55519ea9
3 changed files with 45 additions and 37 deletions

View File

@@ -6,6 +6,7 @@ import lxml
import uuid
from fractions import Fraction
import struct
from os.path import dirname
import numpy
@@ -22,33 +23,15 @@ from ear.fileio.adm.xml import adm_to_xml
from ear.fileio.adm.builder import (ADMBuilder)
from ear.fileio.adm.generate_ids import generate_ids
from sound_objects.intern.geom_utils import (speaker_active_time_range,
from .geom_utils import (speaker_active_time_range,
speakers_by_min_distance,
speakers_by_start_time)
from sound_objects.intern.object_mix import (ObjectMix, ObjectMixPool)
from .object_mix import (ObjectMix, ObjectMixPool, object_mixes_from_source_groups)
from sound_objects.intern.speaker_utils import (all_speakers)
from .speaker_utils import (all_speakers)
@contextmanager
def adm_object_rendering_context(scene: bpy.types.Scene):
old_ff = scene.render.image_settings.file_format
old_codec = scene.render.ffmpeg.audio_codec
old_chans = scene.render.ffmpeg.audio_channels
scene = bpy.context.scene
scene.render.image_settings.file_format = 'FFMPEG'
scene.render.ffmpeg.audio_codec = 'PCM'
scene.render.ffmpeg.audio_channels = 'MONO'
yield scene
scene.render.image_settings.file_format = old_ff
scene.render.ffmpeg.audio_codec = old_codec
scene.render.ffmpeg.audio_channels = old_chans
def group_speakers(speakers, scene) -> List[List[bpy.types.Object]]:
def list_can_accept_speaker(speaker_list, speaker_to_test):
@@ -218,7 +201,10 @@ def generate_adm(context: bpy.types.Context, filepath: str, room_size: float, ma
if len(object_groups) == 0:
return {'FINISHED'}
with ObjectMixPool.pool_from_source_groups(object_groups) as pool:
mix_groups = object_mixes_from_source_groups(object_groups,
scene=scene, base_dir=dirname(filepath))
with ObjectMixPool(object_mixes=mix_groups) as pool:
mux_adm_from_object_mix_pool(scene, mix_pool=pool,
output_filename=filepath,
room_size=room_size)

View File

@@ -1,9 +1,12 @@
import sys
from math import sqrt
import bpy
import numpy
from numpy.linalg import norm
from mathutils import Vector, Quaternion
class FrameInterval:
def __init__(self, start_frame, end_frame):

View File

@@ -7,9 +7,27 @@ from typing import List
from ear.fileio.adm.elements import ObjectCartesianPosition, JumpPosition, AudioBlockFormatObjects
from ear.fileio.bw64 import Bw64Reader
from sound_objects.intern.generate_adm import adm_object_rendering_context
from sound_objects.intern.geom_utils import speaker_active_time_range, compute_relative_vector, room_norm_vector
from sound_objects.intern.speaker_utils import solo_speakers, unmute_all_speakers
from .geom_utils import speaker_active_time_range, compute_relative_vector, room_norm_vector
from .speaker_utils import solo_speakers, unmute_all_speakers
@contextmanager
def adm_object_rendering_context(scene: bpy.types.Scene):
old_ff = scene.render.image_settings.file_format
old_codec = scene.render.ffmpeg.audio_codec
old_chans = scene.render.ffmpeg.audio_channels
scene = bpy.context.scene
scene.render.image_settings.file_format = 'FFMPEG'
scene.render.ffmpeg.audio_codec = 'PCM'
scene.render.ffmpeg.audio_channels = 'MONO'
yield scene
scene.render.image_settings.file_format = old_ff
scene.render.ffmpeg.audio_codec = old_codec
scene.render.ffmpeg.audio_channels = old_chans
class ObjectMix:
@@ -115,21 +133,14 @@ class ObjectMix:
self._mixdown_file_handle.close()
self._mixdown_file_handle = None
if self.intermediate_filename is not None:
os.remove(self.intermediate_filename)
self.intermediate_filename = None
@contextmanager
#@contextmanager
class ObjectMixPool:
@classmethod
def pool_from_source_groups(cls, groups: List[List[bpy.types.Speaker]]):
mixes = []
for group in groups:
mixes.append(ObjectMix(sources=group))
return ObjectMixPool(object_mixes=mixes)
def __init__(self, object_mixes: List[ObjectMix]):
self.object_mixes = object_mixes
@@ -142,5 +153,13 @@ class ObjectMixPool:
@property
def shortest_file_length(self):
lengths = map(lambda f: len(f.mixdown_reader))
lengths = map(lambda f: len(f.mixdown_reader), self.object_mixes)
return min(lengths)
def object_mixes_from_source_groups(groups: List[List[bpy.types.Speaker]], scene, base_dir):
mixes = []
for group in groups:
mixes.append(ObjectMix(sources=group, scene=scene, base_dir=base_dir))
return mixes