Forum Polskiego Kursu Blendera

Kurs Blendera dla wszystkich Polaków!

Pozycja dźwięku 3d

Autor Wątek: Pozycja dźwięku 3d  (Przeczytany 159 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline JarJarBinks

  • Przybysz
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
  • Misa zrobił dwa tycie małe wypadeczki.
    • Zobacz profil
Pozycja dźwięku 3d
« dnia: 20181106, 11:48:17 »
Witam jestem tu nowy i robie se animację w Blenderku, dzięki święntym tutką z PKB. Jednak mam pewien problem, w którym proszę o pomoc:
można dźwięk dodać w Video Sequenceditorze lub obiektem speaker
Ten drugi jest lepszy bo dodaje dźwięk do pozycji 3d, ale tylko jeden.
Czy ma ktoś pomysł jak dodać do Speakera więcej niż jeden dźwięk i je kluczować?
Jeśli nie to może można by połączyć sound strip z VSE z pozycją 3d jakiegoś obiektu?
Nie widzę żadnej takiej opcji w przyciskach, ma ktoś z szanownych forumowiczów jakiegoś pomysła?

Pozdrawiam niecierpliwie czekając na Blendera 2.8   8)

Offline Zyzio

  • Aktywny użytkownik
  • *
  • Wiadomości: 505
  • Reputacja +43/-0
  • Płeć: Mężczyzna
    • Zobacz profil
Odp: Pozycja dźwięku 3d
« Odpowiedź #1 dnia: 20181106, 19:06:43 »
Jeśli speaker ma się poruszać i zawierać kilka ścieżek dźwiękowych to chyba trzeba będzie kilka takich speakerów na raz i np zaparentować do innego obiektu, który będzie animowany a wszystkie głośniki będą poruszać się razem z nim zachowując możliwość indywidualnego miksowania ścieżek audio.

Offline JarJarBinks

  • Przybysz
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
  • Misa zrobił dwa tycie małe wypadeczki.
    • Zobacz profil
Odp: Pozycja dźwięku 3d
« Odpowiedź #2 dnia: 20181107, 19:00:30 »
Faktycznie, chyba trza będzie dać speakerów wiele, dzięki za odp. Tylko trochę niezbyt to wygodne, jeśli ma być dużo różnych krótkich dźwięków typu krok, strzał, stuknięcie...

W przyszłych wersjach Blendera przydały by się też jakieś lepsze możliwości udźwiękawiania animacji.

A może jakiś dodatek istnieje?
Znalazłem takie coś: https://blenderartists.org/t/addon-sound-drivers-formerly-speaker-tools/524569
Ale to chyba nie to...

Offline Zyzio

  • Aktywny użytkownik
  • *
  • Wiadomości: 505
  • Reputacja +43/-0
  • Płeć: Mężczyzna
    • Zobacz profil
Odp: Pozycja dźwięku 3d
« Odpowiedź #3 dnia: 20181108, 20:36:05 »
Jeśli masz jakiś konkretny pomysł, to tutaj możesz zarzucić:
https://blender.community/c/rightclickselect/

Offline JarJarBinks

  • Przybysz
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
  • Misa zrobił dwa tycie małe wypadeczki.
    • Zobacz profil
Odp: Pozycja dźwięku 3d
« Odpowiedź #4 dnia: 20181109, 12:58:09 »
Może nad tym pomyślę.
Ale na razie dzięki przeziębieniu mam czas by posiedzieć przy kompie.  :D
Więc poczytałem trochę o robieniu addonów do Blendera w Pytonie
Na szybko (w sumie ok. 7h) z szablonu i przykładów na necie udało mi się zrobić coś takiego:
#import dzwieku jako speaker
import bpy

def read_some_data(context, filepath,use_some_setting,use_some_setting2):
        #wczytanie pliku i jego nazwy
    parentobj = bpy.context.active_object #aktywny obiekt jako parent
    bpy.data.sounds.load(filepath, check_existing=True) #sciezka
    filename = filepath.split('\\')[-1].split('/')[-1] #nazwa pliku
    objname = filename.split('.')[0] #nazwa bez rozszerzenia
   
    ob=bpy.ops.object.speaker_add() #dodanie obiektu speaker
    ob = bpy.context.scene.objects.active #i zrobienie go aktywnym
    dat = ob.data #jego data
        #Nadanie nazwy obiektowi...
    if use_some_setting == True:
        if parentobj:
            ob.name = parentobj.name+"."+objname
        else:
            ob.name = "Speaker."+objname
    else:
        ob.name = objname
       #... i jego dacie
    if use_some_setting2 == True:
        if parentobj:
            dat.name = parentobj.name+"."+objname
        else:
            dat.name = "Speaker."+objname
    else:
        dat.name = objname

    dat.sound = bpy.data.sounds[filename] #ustawienie dzwieku
    ob.location=(0,0,0) #wyzerowanie lokacji
    ob.parent = parentobj #spaparentowanie


    bpy.context.scene.objects.active  = parentobj
    print("file: "+filepath+" improted as "+filename)
    if parentobj:
        print("speaker: "+ob.name+" created and parented to: "+parentobj.name)
    else:
        print("speaker: "+ob.name+" created and no parented")
       
    return {'FINISHED'}


# ImportHelper is a helper class, defines filename and
# invoke() function which calls the file selector.
from bpy_extras.io_utils import ImportHelper
from bpy.props import StringProperty, BoolProperty, EnumProperty
from bpy.types import Operator


class ImportSomeData(Operator, ImportHelper):
    """Create speaker(s) from audio files and parent to selected obiect"""
    bl_idname = "import_sound.as_speaker"  # important since its how bpy.ops.import_test.some_data is constructed
    bl_label = "Import Sounds as speaker"

    # ImportHelper mixin class uses this
    filename_ext = "*.mp3;*.wav"

    filter_glob = StringProperty(
            default="*.mp3;*.wav",
            options={'HIDDEN'},
            maxlen=255,  # Max internal buffer length, longer would be clamped.
            )
    use_setting = BoolProperty(
            name="Rename object to parent",
            description="Rename speaker name with prefix of parent obiect name. if no parent, prefix will be 'Speaker'",
            default=True,
            )
    use_setting2 = BoolProperty(
            name="Rename data to parent",
            description="Rename speaker data name with prefix of parent obiect name. if no parent, prefix will be 'Speaker'",
            default=True,
            )           

    # List of operator properties, the attributes will be assigned
    # to the class instance from the operator settings before calling.

    def execute(self, context):
        return read_some_data(context, self.filepath, self.use_setting,self.use_setting2)


# Only needed if you want to add into a dynamic menu
def menu_func_import(self, context):
    self.layout.operator(ImportSomeData.bl_idname, text="import sounds as speaker")


def register():
    bpy.utils.register_class(ImportSomeData)
    bpy.types.INFO_MT_file_import.append(menu_func_import)


def unregister():
    bpy.utils.unregister_class(ImportSomeData)
    bpy.types.INFO_MT_file_import.remove(menu_func_import)


if __name__ == "__main__":
    register()
   
    # test call
    bpy.ops.import_sound.as_speaker('INVOKE_DEFAULT')

Nie jestem programistą i połowy z tego nie rozumiem ale może się komu przyda, bo o dziwo działa.
tylko że gdy zaznaczam kilka plików to tylko jeden się importuje i można to uruchamiać tylko z edytora tekstu, bo gdy instaluje jako addon to wywala błędy.

Offline Arek

  • Ekspert
  • *
  • Wiadomości: 3496
  • Reputacja +446/-3
  • Płeć: Mężczyzna
    • Zobacz profil
  • Gadu Gadu: 49396350
Odp: Pozycja dźwięku 3d
« Odpowiedź #5 dnia: 20181109, 15:41:49 »
Cytuj
...można to uruchamiać tylko z edytora tekstu, bo gdy instaluje jako addon to wywala błędy.
Musisz umieścić w pliku nagłówek zawierający informacje o dodatku, np coś takiego jak niżej. Dodatkowo dla  czystości kodu importowane moduły mogą być w jednym miejscu.bl_info = {
    "name": "Import Dzwieku Jako Speaker",
    "author": "JarJarBinks",
    "version": (0, 0, 1),
    "blender": (2, 7, 9),
    "location": "",
    "description": "Importuje plik dzwiekowy jako speaker",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "category": "Import-Export"
}

import bpy
from bpy_extras.io_utils import ImportHelper
from bpy.props import StringProperty, BoolProperty, EnumProperty
from bpy.types import Operator



Offline JarJarBinks

  • Przybysz
  • *
  • Wiadomości: 4
  • Reputacja +0/-0
  • Misa zrobił dwa tycie małe wypadeczki.
    • Zobacz profil
Odp: Pozycja dźwięku 3d
« Odpowiedź #6 dnia: 20181109, 21:10:19 »
Dzięki, poprawiłem. Chyba gotowe mój pierwszy addon. Dodałem też możliwość importu wielu plików na raz (wzięte stąd:https://gist.github.com/batFINGER/2c0604be3620def01c4eeaff6ceb22f4)
Czasami działa, a czasami wywala błąd (obrazek w załzał.)

Oto jest import-sounds-as-speaker.py:
bl_info = {
"name": "Import Dzwieku Jako Speaker (import sound as speaker)",
"author": "JarJarBinks",
"version": (0, 0, 1),
"blender": (2, 7, 9),
"location": "File > Import > import sound as_speaker",
"description": "Importuje plik dzwiekowy jako speaker (import sound as speaker)",
"warning": "To katastrofa! Gdy to wlaczysz twoj pecet wybuchnie a ty zmienisz sie w gunganina! ( It's a catastrophe! When you enable it, your PC will explode, and you turn into Gungan.)",
"wiki_url": "http://www.ossus.pl/images/0/0a/JarJarBinks1.jpg",
"tracker_url": "",
"category": "Import-Export"
}

import bpy
import os
from bpy_extras.io_utils import ImportHelper
from bpy.props import StringProperty, CollectionProperty, BoolProperty, EnumProperty
from bpy.types import Operator, OperatorFileListElement

def read_some_data(context, directory, files, use_some_setting,use_some_setting2):
parentobj = bpy.context.active_object #aktywny obiekt jako parent
if parentobj:
if not bpy.context.object.mode == "OBJECT":
bpy.ops.object.mode_set ( mode = "OBJECT" )
for file in files:
#wczytanie pliku i jego nazwy
path = os.path.join(directory, file.name)
bpy.data.sounds.load(path, check_existing=True) #sciezka
objname = file.name.split('.')[0] #nazwa bez rozszerzenia
ob=bpy.ops.object.speaker_add() #dodanie obiektu speaker
ob = bpy.context.scene.objects.active #i zrobienie go aktywnym
dat = ob.data #jego data
#Nadanie nazwy obiektowi...
if use_some_setting == True:
if parentobj:
ob.name = parentobj.name+"."+objname
else:
ob.name = "Speaker."+objname
else:
ob.name = objname
   #... i jego dacie
if use_some_setting2 == True:
if parentobj:
dat.name = parentobj.name+"."+objname
else:
dat.name = "Speaker."+objname
else:
dat.name = objname
dat.sound = bpy.data.sounds[file.name] #ustawienie dzwieku
ob.location=(0,0,0) #wyzerowanie lokacji
ob.parent = parentobj #spaparentowanie
print("file: "+path+" improted as "+file.name)
if parentobj:
print("speaker: "+ob.name+" created and parented to: "+parentobj.name)
else:
print("speaker: "+ob.name+" created and no parented")
bpy.context.scene.objects.active  = parentobj
return {'FINISHED'}
class ImportSomeData(Operator, ImportHelper):
"""Create speaker(s) from audio files and parent to selected obiect"""
bl_idname = "import_sound.as_speaker"  # important since its how bpy.ops.import_test.some_data is constructed
bl_label = "Import Sounds as speaker"
# ImportHelper mixin class uses this
filename_ext = "*.mp3;*.wav;*.ogg;*.ac3;*.aac"
filter_glob = StringProperty(
default="*.mp3;*.wav;*.ogg;*.ac3;*.aac",
options={'HIDDEN'},
maxlen=255,  # Max internal buffer length, longer would be clamped.
)
files = CollectionProperty(
name="BVH files",
type=OperatorFileListElement,
)
directory = StringProperty(subtype='DIR_PATH')
use_setting = BoolProperty(
name="Rename object to parent",
description="Rename speaker name with prefix of parent obiect name. if no parent, prefix will be 'Speaker'",
default=True,
)
use_setting2 = BoolProperty(
name="Rename data to parent",
description="Rename speaker data name with prefix of parent obiect name. if no parent, prefix will be 'Speaker'",
default=True,
)   
# List of operator properties, the attributes will be assigned
# to the class instance from the operator settings before calling.
def execute(self, context):
return read_some_data(context, self.directory, self.files, self.use_setting,self.use_setting2)

# Only needed if you want to add into a dynamic menu
def menu_func_import(self, context):
self.layout.operator(ImportSomeData.bl_idname, text="import sounds as speaker")
def register():
bpy.utils.register_class(ImportSomeData)
bpy.types.INFO_MT_file_import.append(menu_func_import)
def unregister():
bpy.utils.unregister_class(ImportSomeData)
bpy.types.INFO_MT_file_import.remove(menu_func_import)
if __name__ == "__main__":
register()
# test call
bpy.ops.import_sound.as_speaker('INVOKE_DEFAULT')

Tags:
 

© Polski Kurs Blendera, CC-BY, 2014