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
This commit is contained in:
committed by
Richard Antalik
parent
9e9895b055
commit
89106a695a
@@ -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()
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user