[Bf-blender-cvs] [89106a695af] master: VSE: Display sound sample rate and channels

Marcos Perez noreply at git.blender.org
Thu May 19 21:08:51 CEST 2022


Commit: 89106a695afbba3d94b70645b4caaa22c2b58bc3
Author: Marcos Perez
Date:   Thu May 19 20:58:55 2022 +0200
Branches: master
https://developer.blender.org/rB89106a695afbba3d94b70645b4caaa22c2b58bc3

VSE: Display sound sample rate and channels

Display information about sound media in "Source" category in side panel
similar to movie resolution and framerate.

The specs are stored in the `Sequence` struct, and are extracted at
the moment of struct creation. If the "source file" is changed,
the specs change also.

Reviewed By: ISS

Differential Revision: https://developer.blender.org/D14565

===================================================================

M	release/scripts/startup/bl_ui/space_sequencer.py
M	source/blender/blenkernel/BKE_sound.h
M	source/blender/blenkernel/intern/sound.c
M	source/blender/makesdna/DNA_sound_types.h
M	source/blender/makesrna/intern/rna_sound.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 94bad5459c9..3c10f393503 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1642,6 +1642,24 @@ class SEQUENCER_PT_source(SequencerButtonsPanel, Panel):
                     split.operator("sound.pack", icon='UGLYPACKAGE', text="")
 
                 layout.prop(sound, "use_memory_cache")
+
+                col = layout.box()
+                col = col.column(align=True)
+                split = col.split(factor=0.5, align=False)
+                split.alignment = 'RIGHT'
+                split.label(text="Samplerate")
+                split.alignment = 'LEFT'
+                if sound.samplerate <= 0:
+                    split.label(text="Unknown")
+                else:
+                    split.label(text="%d Hz." % sound.samplerate, translate=False)
+
+                split = col.split(factor=0.5, align=False)
+                split.alignment = 'RIGHT'
+                split.label(text="Channels")
+                split.alignment = 'LEFT'
+                txt_channels = sound.bl_rna.properties["channels"].enum_items[sound.bl_rna.properties["channels"].enum_items.find(sound.channels)].name
+                split.label(text=txt_channels)
         else:
             if strip_type == 'IMAGE':
                 col = layout.column()
diff --git a/source/blender/blenkernel/BKE_sound.h b/source/blender/blenkernel/BKE_sound.h
index 8931418e49c..edb301f06bf 100644
--- a/source/blender/blenkernel/BKE_sound.h
+++ b/source/blender/blenkernel/BKE_sound.h
@@ -20,6 +20,7 @@ struct Depsgraph;
 struct Main;
 struct Sequence;
 struct bSound;
+struct SoundInfo;
 
 typedef struct SoundWaveform {
   int length;
@@ -78,6 +79,7 @@ typedef enum eSoundChannels {
 typedef struct SoundInfo {
   struct {
     eSoundChannels channels;
+    int samplerate;
   } specs;
   float length;
 } SoundInfo;
diff --git a/source/blender/blenkernel/intern/sound.c b/source/blender/blenkernel/intern/sound.c
index 864a4f3281b..de5589cf5dc 100644
--- a/source/blender/blenkernel/intern/sound.c
+++ b/source/blender/blenkernel/intern/sound.c
@@ -264,6 +264,14 @@ bSound *BKE_sound_new_file(Main *bmain, const char *filepath)
   BLI_strncpy(sound->filepath, filepath, FILE_MAX);
   /* sound->type = SOUND_TYPE_FILE; */ /* XXX unused currently */
 
+  /* Extract sound specs for bSound */
+  SoundInfo info;
+  bool success = BKE_sound_info_get(bmain, sound, &info);
+  if (success) {
+    sound->samplerate = info.specs.samplerate;
+    sound->audio_channels = info.specs.channels;
+  }
+
   sound->spinlock = MEM_mallocN(sizeof(SpinLock), "sound_spinlock");
   BLI_spin_init(sound->spinlock);
 
@@ -1202,6 +1210,7 @@ static bool sound_info_from_playback_handle(void *playback_handle, SoundInfo *so
   AUD_SoundInfo info = AUD_getInfo(playback_handle);
   sound_info->specs.channels = (eSoundChannels)info.specs.channels;
   sound_info->length = info.length;
+  sound_info->specs.samplerate = info.specs.rate;
   return true;
 }
 
diff --git a/source/blender/makesdna/DNA_sound_types.h b/source/blender/makesdna/DNA_sound_types.h
index df59dd84662..ba926f0f4fa 100644
--- a/source/blender/makesdna/DNA_sound_types.h
+++ b/source/blender/makesdna/DNA_sound_types.h
@@ -77,6 +77,12 @@ typedef struct bSound {
   void *spinlock;
   /* XXX unused currently (SOUND_TYPE_LIMITER) */
   /* float start, end; */
+
+  /* Description of Audio channels, as of eSoundChannels*/
+  int audio_channels;
+
+  int samplerate;
+
 } bSound;
 
 /* XXX unused currently */
diff --git a/source/blender/makesrna/intern/rna_sound.c b/source/blender/makesrna/intern/rna_sound.c
index 3d51f80adde..2714b4157fd 100644
--- a/source/blender/makesrna/intern/rna_sound.c
+++ b/source/blender/makesrna/intern/rna_sound.c
@@ -12,6 +12,22 @@
 
 #include "DNA_sound_types.h"
 
+#include "BKE_sound.h"
+
+/* Enumeration for Audio Channels, compatible with eSoundChannels */
+const EnumPropertyItem rna_enum_audio_channels_items[] = {
+    {SOUND_CHANNELS_INVALID, "INVALID", ICON_NONE, "Invalid", "Invalid"},
+    {SOUND_CHANNELS_MONO, "MONO", ICON_NONE, "Mono", "Mono"},
+    {SOUND_CHANNELS_STEREO, "STEREO", ICON_NONE, "Stereo", "Stereo"},
+    {SOUND_CHANNELS_STEREO_LFE, "STEREO_LFE", ICON_NONE, "Stereo LFE", "Stereo FX"},
+    {SOUND_CHANNELS_SURROUND4, "CHANNELS_4", ICON_NONE, "4 Channels", "4 Channels"},
+    {SOUND_CHANNELS_SURROUND5, "CHANNELS_5", ICON_NONE, "5 Channels", "5 Channels"},
+    {SOUND_CHANNELS_SURROUND51, "SURROUND_51", ICON_NONE, "5.1 Surround", "5.1 Surround"},
+    {SOUND_CHANNELS_SURROUND61, "SURROUND_61", ICON_NONE, "6.1 Surround", "6.1 Surround"},
+    {SOUND_CHANNELS_SURROUND71, "SURROUND_71", ICON_NONE, "7.1 Surround", "7.1 Surround"},
+    {0, NULL, 0, NULL, NULL},
+};
+
 #ifdef RNA_RUNTIME
 
 #  include "BKE_context.h"
@@ -70,6 +86,18 @@ static void rna_def_sound(BlenderRNA *brna)
       "If the file contains multiple audio channels they are rendered to a single one");
   RNA_def_property_update(prop, 0, "rna_Sound_update");
 
+  prop = RNA_def_property(srna, "samplerate", PROP_INT, PROP_NONE);
+  RNA_def_property_int_sdna(prop, NULL, "samplerate");
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+  RNA_def_property_ui_text(prop, "Samplerate", "Samplerate of the audio in Hz");
+
+  prop = RNA_def_property(srna, "channels", PROP_ENUM, PROP_NONE);
+  RNA_def_property_enum_sdna(prop, NULL, "audio_channels");
+  RNA_def_property_enum_items(prop, rna_enum_audio_channels_items);
+  RNA_def_property_enum_default(prop, SOUND_CHANNELS_INVALID);
+  RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+  RNA_def_property_ui_text(prop, "Audio channels", "Definition of audio channels");
+
   RNA_api_sound(srna);
 }



More information about the Bf-blender-cvs mailing list