Added audio device settings. You can even switch them while playing!
This commit is contained in:
@@ -75,32 +75,37 @@ int AUD_init(AUD_DeviceType device, AUD_Specs specs, int buffersize)
|
||||
#ifdef WITH_FFMPEG
|
||||
av_register_all();
|
||||
#endif
|
||||
AUD_IDevice* dev = NULL;
|
||||
|
||||
try
|
||||
{
|
||||
switch(device)
|
||||
{
|
||||
case AUD_NULL_DEVICE:
|
||||
AUD_device = new AUD_NULLDevice();
|
||||
dev = new AUD_NULLDevice();
|
||||
break;
|
||||
#ifdef WITH_SDL
|
||||
case AUD_SDL_DEVICE:
|
||||
{
|
||||
AUD_device = new AUD_SDLDevice(specs, buffersize);
|
||||
dev = new AUD_SDLDevice(specs, buffersize);
|
||||
AUD_FloatMixer* mixer = new AUD_FloatMixer();
|
||||
((AUD_SDLDevice*)AUD_device)->setMixer(mixer);
|
||||
((AUD_SDLDevice*)dev)->setMixer(mixer);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifdef WITH_OPENAL
|
||||
case AUD_OPENAL_DEVICE:
|
||||
AUD_device = new AUD_OpenALDevice(specs, buffersize);
|
||||
dev = new AUD_OpenALDevice(specs, buffersize);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
if(AUD_device)
|
||||
AUD_exit();
|
||||
|
||||
AUD_device = dev;
|
||||
if(AUD_device->checkCapability(AUD_CAPS_3D_DEVICE))
|
||||
AUD_3ddevice = dynamic_cast<AUD_I3DDevice*>(AUD_device);
|
||||
|
||||
|
@@ -54,6 +54,8 @@ void sound_free_sound(struct bSound* sound);*/
|
||||
// AUD_XXX
|
||||
void sound_init();
|
||||
|
||||
void sound_reinit(struct bContext *C);
|
||||
|
||||
void sound_exit();
|
||||
|
||||
struct bSound* sound_new_file(struct bContext *C, char* filename);
|
||||
|
@@ -15,6 +15,7 @@
|
||||
#include "DNA_sound_types.h"
|
||||
#include "DNA_packedFile_types.h"
|
||||
#include "DNA_screen_types.h"
|
||||
#include "DNA_userdef_types.h"
|
||||
|
||||
// AUD_XXX
|
||||
#include "AUD_C-API.h"
|
||||
@@ -161,11 +162,38 @@ void sound_init()
|
||||
specs.format = AUD_FORMAT_S16;
|
||||
specs.rate = AUD_RATE_44100;
|
||||
|
||||
if(!AUD_init(AUD_OPENAL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE*4))
|
||||
if(!AUD_init(AUD_SDL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE))
|
||||
if(!AUD_init(AUD_SDL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE))
|
||||
if(!AUD_init(AUD_OPENAL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE*4))
|
||||
AUD_init(AUD_NULL_DEVICE, specs, AUD_DEFAULT_BUFFER_SIZE);
|
||||
}
|
||||
|
||||
void sound_reinit(struct bContext *C)
|
||||
{
|
||||
AUD_Specs specs;
|
||||
int device, buffersize;
|
||||
|
||||
device = U.audiodevice;
|
||||
buffersize = U.mixbufsize;
|
||||
specs.channels = U.audiochannels;
|
||||
specs.format = U.audioformat;
|
||||
specs.rate = U.audiorate;
|
||||
|
||||
if(buffersize < 128)
|
||||
buffersize = AUD_DEFAULT_BUFFER_SIZE;
|
||||
|
||||
if(specs.rate < AUD_RATE_8000)
|
||||
specs.rate = AUD_RATE_44100;
|
||||
|
||||
if(specs.format <= AUD_FORMAT_INVALID)
|
||||
specs.format = AUD_FORMAT_S16;
|
||||
|
||||
if(specs.channels <= AUD_CHANNELS_INVALID)
|
||||
specs.channels = AUD_CHANNELS_STEREO;
|
||||
|
||||
if(!AUD_init(device, specs, buffersize))
|
||||
AUD_init(AUD_NULL_DEVICE, specs, buffersize);
|
||||
}
|
||||
|
||||
void sound_exit()
|
||||
{
|
||||
AUD_exit();
|
||||
|
@@ -3986,10 +3986,13 @@ static void lib_link_scene(FileData *fd, Main *main)
|
||||
if(seq->ipo) seq->ipo= newlibadr_us(fd, sce->id.lib, seq->ipo);
|
||||
if(seq->scene) seq->scene= newlibadr(fd, sce->id.lib, seq->scene);
|
||||
if(seq->sound) {
|
||||
printf("old sound: %d\n", seq->sound);
|
||||
seq->sound= newlibadr(fd, sce->id.lib, seq->sound);
|
||||
printf("new sound: %d\n", seq->sound);
|
||||
if (seq->sound) {
|
||||
seq->sound->id.us++;
|
||||
seq->sound->flags |= SOUND_FLAGS_SEQUENCE;
|
||||
seq->sound_handle= sound_new_handle(sce, seq->sound, seq->startdisp, seq->enddisp, seq->startofs);
|
||||
}
|
||||
}
|
||||
seq->anim= 0;
|
||||
@@ -4037,6 +4040,7 @@ static void direct_link_scene(FileData *fd, Scene *sce)
|
||||
sce->theDag = NULL;
|
||||
sce->dagisvalid = 0;
|
||||
sce->obedit= NULL;
|
||||
memset(&sce->sound_handles, 0, sizeof(sce->sound_handles));
|
||||
|
||||
/* set users to one by default, not in lib-link, this will increase it for compo nodes */
|
||||
sce->id.us= 1;
|
||||
|
@@ -293,6 +293,11 @@ typedef struct UserDef {
|
||||
short userpref, viewzoom;
|
||||
|
||||
int mixbufsize;
|
||||
int audiodevice;
|
||||
int audiorate;
|
||||
int audioformat;
|
||||
int audiochannels;
|
||||
|
||||
int scrollback; /* console scrollback limit */
|
||||
int dpi; /* range 48-128? */
|
||||
short encoding;
|
||||
|
@@ -37,6 +37,9 @@
|
||||
|
||||
#include "BKE_utildefines.h"
|
||||
|
||||
// AUD_XXX
|
||||
#include "BKE_sound.h"
|
||||
|
||||
#ifdef RNA_RUNTIME
|
||||
|
||||
static void rna_userdef_lmb_select_set(struct PointerRNA *ptr,int value)
|
||||
@@ -116,6 +119,12 @@ static PointerRNA rna_UserDef_system_get(PointerRNA *ptr)
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_UserPreferencesSystem, ptr->data);
|
||||
}
|
||||
|
||||
// AUD_XXX
|
||||
static void rna_UserDef_audio_update(bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
sound_reinit(C);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna)
|
||||
@@ -1977,6 +1986,46 @@ static void rna_def_userdef_system(BlenderRNA *brna)
|
||||
{512, "AUDIO_SAMPLES_512", 0, "512", "Set audio mixing buffer size to 512 samples"},
|
||||
{1024, "AUDIO_SAMPLES_1024", 0, "1024", "Set audio mixing buffer size to 1024 samples"},
|
||||
{2048, "AUDIO_SAMPLES_2048", 0, "2048", "Set audio mixing buffer size to 2048 samples"},
|
||||
{4096, "AUDIO_SAMPLES_4096", 0, "4096", "Set audio mixing buffer size to 4096 samples"},
|
||||
{8192, "AUDIO_SAMPLES_8192", 0, "8192", "Set audio mixing buffer size to 8192 samples"},
|
||||
{16384, "AUDIO_SAMPLES_16384", 0, "16384", "Set audio mixing buffer size to 16384 samples"},
|
||||
{32768, "AUDIO_SAMPLES_32768", 0, "32768", "Set audio mixing buffer size to 32768 samples"},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem audio_device_items[] = {
|
||||
{0, "AUDIO_DEVICE_NULL", 0, "No Audio", "Null device - there will be no audio output."},
|
||||
{1, "AUDIO_DEVICE_SDL", 0, "SDL", "SDL device - simple direct media layer, recommended for sequencer usage."},
|
||||
{2, "AUDIO_DEVICE_OPENAL", 0, "OpenAL", "OpenAL device - supports 3D audio, recommended for game engine usage."},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem audio_rate_items[] = {
|
||||
// {8000, "AUDIO_RATE_8000", 0, "8 kHz", "Set audio sampling rate to 8000 samples per second."},
|
||||
// {11025, "AUDIO_RATE_11025", 0, "11.025 kHz", "Set audio sampling rate to 11025 samples per second."},
|
||||
// {16000, "AUDIO_RATE_16000", 0, "16 kHz", "Set audio sampling rate to 16000 samples per second."},
|
||||
// {22050, "AUDIO_RATE_22050", 0, "22.05 kHz", "Set audio sampling rate to 22050 samples per second."},
|
||||
// {32000, "AUDIO_RATE_32000", 0, "32 kHz", "Set audio sampling rate to 32000 samples per second."},
|
||||
{44100, "AUDIO_RATE_44100", 0, "44.1 kHz", "Set audio sampling rate to 44100 samples per second."},
|
||||
{48000, "AUDIO_RATE_48000", 0, "48 kHz", "Set audio sampling rate to 48000 samples per second."},
|
||||
// {88200, "AUDIO_RATE_88200", 0, "88.2 kHz", "Set audio sampling rate to 88200 samples per second."},
|
||||
{96000, "AUDIO_RATE_96000", 0, "96 kHz", "Set audio sampling rate to 96000 samples per second."},
|
||||
{192000, "AUDIO_RATE_192000", 0, "192 kHz", "Set audio sampling rate to 192000 samples per second."},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem audio_format_items[] = {
|
||||
{0x01, "AUDIO_FORMAT_U8", 0, "8-bit Unsigned", "Set audio sample format to 8 bit unsigned integer."},
|
||||
{0x12, "AUDIO_FORMAT_S16", 0, "16-bit Signed", "Set audio sample format to 16 bit signed integer."},
|
||||
{0x13, "AUDIO_FORMAT_S24", 0, "24-bit Signed", "Set audio sample format to 24 bit signed integer."},
|
||||
{0x14, "AUDIO_FORMAT_S32", 0, "32-bit Signed", "Set audio sample format to 32 bit signed integer."},
|
||||
{0x24, "AUDIO_FORMAT_FLOAT", 0, "32-bit Float", "Set audio sample format to 32 bit float."},
|
||||
{0x28, "AUDIO_FORMAT_DOUBLE", 0, "64-bit Float", "Set audio sample format to 64 bit float."},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem audio_channel_items[] = {
|
||||
{1, "AUDIO_CHANNELS_MONO", 0, "Mono", "Set audio channels to mono."},
|
||||
{2, "AUDIO_CHANNELS_STEREO", 0, "Stereo", "Set audio channels to stereo."},
|
||||
{4, "AUDIO_CHANNELS_SURROUND4", 0, "4 Channels", "Set audio channels to 4 channels."},
|
||||
{6, "AUDIO_CHANNELS_SURROUND51", 0, "5.1 Surround", "Set audio channels to 5.1 surround sound."},
|
||||
{8, "AUDIO_CHANNELS_SURROUND71", 0, "7.1 Surround", "Set audio channels to 7.1 surround sound."},
|
||||
{0, NULL, 0, NULL, NULL}};
|
||||
|
||||
static EnumPropertyItem draw_method_items[] = {
|
||||
@@ -2078,6 +2127,31 @@ static void rna_def_userdef_system(BlenderRNA *brna)
|
||||
RNA_def_property_enum_sdna(prop, NULL, "mixbufsize");
|
||||
RNA_def_property_enum_items(prop, audio_mixing_samples_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Mixing Buffer", "Sets the number of samples used by the audio mixing buffer.");
|
||||
RNA_def_property_update(prop, 0, "rna_UserDef_audio_update");
|
||||
|
||||
prop= RNA_def_property(srna, "audio_device", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "audiodevice");
|
||||
RNA_def_property_enum_items(prop, audio_device_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Device", "Sets the audio output device.");
|
||||
RNA_def_property_update(prop, 0, "rna_UserDef_audio_update");
|
||||
|
||||
prop= RNA_def_property(srna, "audio_sample_rate", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "audiorate");
|
||||
RNA_def_property_enum_items(prop, audio_rate_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Sample Rate", "Sets the audio sample rate.");
|
||||
RNA_def_property_update(prop, 0, "rna_UserDef_audio_update");
|
||||
|
||||
prop= RNA_def_property(srna, "audio_sample_format", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "audioformat");
|
||||
RNA_def_property_enum_items(prop, audio_format_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Sample Format", "Sets the audio sample format.");
|
||||
RNA_def_property_update(prop, 0, "rna_UserDef_audio_update");
|
||||
|
||||
prop= RNA_def_property(srna, "audio_channels", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "audiochannels");
|
||||
RNA_def_property_enum_items(prop, audio_channel_items);
|
||||
RNA_def_property_ui_text(prop, "Audio Channels", "Sets the audio channel count.");
|
||||
RNA_def_property_update(prop, 0, "rna_UserDef_audio_update");
|
||||
|
||||
#if 0
|
||||
prop= RNA_def_property(srna, "verse_master", PROP_STRING, PROP_NONE);
|
||||
|
Reference in New Issue
Block a user