Typos and fixes, runs in Blender
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
os.remove(self.intermediate_filename)
|
||||
self.intermediate_filename = 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
|
||||
|
||||
Reference in New Issue
Block a user