Typos and fixes, runs in Blender
This commit is contained in:
@@ -6,6 +6,7 @@ import lxml
|
|||||||
import uuid
|
import uuid
|
||||||
from fractions import Fraction
|
from fractions import Fraction
|
||||||
import struct
|
import struct
|
||||||
|
from os.path import dirname
|
||||||
|
|
||||||
import numpy
|
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.builder import (ADMBuilder)
|
||||||
from ear.fileio.adm.generate_ids import generate_ids
|
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_min_distance,
|
||||||
speakers_by_start_time)
|
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 group_speakers(speakers, scene) -> List[List[bpy.types.Object]]:
|
||||||
def list_can_accept_speaker(speaker_list, speaker_to_test):
|
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:
|
if len(object_groups) == 0:
|
||||||
return {'FINISHED'}
|
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,
|
mux_adm_from_object_mix_pool(scene, mix_pool=pool,
|
||||||
output_filename=filepath,
|
output_filename=filepath,
|
||||||
room_size=room_size)
|
room_size=room_size)
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
import sys
|
import sys
|
||||||
from math import sqrt
|
from math import sqrt
|
||||||
|
|
||||||
|
import bpy
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
from numpy.linalg import norm
|
from numpy.linalg import norm
|
||||||
|
|
||||||
|
from mathutils import Vector, Quaternion
|
||||||
|
|
||||||
class FrameInterval:
|
class FrameInterval:
|
||||||
def __init__(self, start_frame, end_frame):
|
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.adm.elements import ObjectCartesianPosition, JumpPosition, AudioBlockFormatObjects
|
||||||
from ear.fileio.bw64 import Bw64Reader
|
from ear.fileio.bw64 import Bw64Reader
|
||||||
|
|
||||||
from sound_objects.intern.generate_adm import adm_object_rendering_context
|
from .geom_utils import speaker_active_time_range, compute_relative_vector, room_norm_vector
|
||||||
from sound_objects.intern.geom_utils import speaker_active_time_range, compute_relative_vector, room_norm_vector
|
from .speaker_utils import solo_speakers, unmute_all_speakers
|
||||||
from sound_objects.intern.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:
|
class ObjectMix:
|
||||||
@@ -115,21 +133,14 @@ class ObjectMix:
|
|||||||
self._mixdown_file_handle.close()
|
self._mixdown_file_handle.close()
|
||||||
self._mixdown_file_handle = None
|
self._mixdown_file_handle = None
|
||||||
|
|
||||||
|
if self.intermediate_filename is not None:
|
||||||
os.remove(self.intermediate_filename)
|
os.remove(self.intermediate_filename)
|
||||||
self.intermediate_filename = None
|
self.intermediate_filename = None
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
#@contextmanager
|
||||||
class ObjectMixPool:
|
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]):
|
def __init__(self, object_mixes: List[ObjectMix]):
|
||||||
self.object_mixes = object_mixes
|
self.object_mixes = object_mixes
|
||||||
|
|
||||||
@@ -142,5 +153,13 @@ class ObjectMixPool:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def shortest_file_length(self):
|
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)
|
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