/// <summary> /// Inicializa los canales de sonido. /// </summary> ///<param name="initSoundXML">Ubicación del fichero xml.</param> ///<returns>Boleano que representa si la operación se realizó exitosamente.</returns> bool CSoundManager::Init (const std::string& initSoundXML) { m_bIsOk = BASS_Init(1, 44100, BASS_DEVICE_3D, 0, NULL) ? true : false; if (m_bIsOk == true) { // Parsea el xml m_bIsOk = Load(initSoundXML); if (m_bIsOk == true) { m_bIsOk = BASS_Set3DPosition(NULL, NULL, NULL, NULL) ? true : false; if (m_bIsOk == true) { m_bIsOk = BASS_Set3DFactors(1.0, 1.0, 1.0) ? true : false; BASS_Apply3D(); if (m_bIsOk == true) { // Asigna el master volume. Usar 1 para volumen máximo //m_bIsOk = BASS_SetVolume(1.0f) ? true : false; if (m_bIsOk == true) { m_bIsOk = BASS_Start() ? true : false; if (m_bIsOk == true) { std::string msg_info = "CSoundManager::Init: Sonidos cargados exitosamente."; LOGGER->AddNewLog(ELL_INFORMATION, msg_info.c_str()); return m_bIsOk; } } } } } } std::string msg_error = "CSoundManager::Init: Error cargando sonidos."; LOGGER->AddNewLog(ELL_INFORMATION, msg_error.c_str()); return m_bIsOk; }
int main(int argc, char* argv[]) { regex_t fregex[2]; gtk_init(&argc,&argv); // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { Error("An incorrect version of BASS was loaded"); return 0; } // Initialize the output device with 3D support if (!BASS_Init(-1,44100,BASS_DEVICE_3D,NULL,NULL)) { Error("Can't initialize device"); return 0; } { BASS_INFO i; BASS_GetInfo(&i); if (i.speakers>2) { GtkWidget *dialog=gtk_message_dialog_new(NULL,0, GTK_MESSAGE_QUESTION,GTK_BUTTONS_YES_NO,"Multiple speakers were detected. Would you like to use them?"); if (gtk_dialog_run(GTK_DIALOG(dialog))==GTK_RESPONSE_NO) BASS_SetConfig(BASS_CONFIG_3DALGORITHM,BASS_3DALG_OFF); gtk_widget_destroy(dialog); } } // Use meters as distance unit, real world rolloff, real doppler effect BASS_Set3DFactors(1,1,1); // initialize GUI glade=glade_xml_new(GLADE_PATH"3dtest.glade",NULL,NULL); if (!glade) return 0; win=GetWidget("window1"); if (!win) return 0; glade_xml_signal_autoconnect(glade); g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW(GetWidget("channels"))),"changed",G_CALLBACK(ListSelectionChange),NULL); { // setup list GtkTreeView *list=GTK_TREE_VIEW(GetWidget("channels")); GtkTreeViewColumn *col=gtk_tree_view_column_new(); gtk_tree_view_append_column(list,col); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(col,renderer,TRUE); gtk_tree_view_column_add_attribute(col, renderer, "text", 0); GtkListStore *liststore=gtk_list_store_new(1,G_TYPE_STRING); gtk_tree_view_set_model(list,GTK_TREE_MODEL(liststore)); g_object_unref(liststore); } { // initialize file selector GtkFileFilter *filter; filesel=gtk_file_chooser_dialog_new("Open File",GTK_WINDOW(win),GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,GTK_RESPONSE_CANCEL,GTK_STOCK_OPEN,GTK_RESPONSE_ACCEPT,NULL); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"Streamable files (wav/aif/mp3/mp2/mp1/ogg)"); regcomp(&fregex[0],"\\.(mp[1-3]|ogg|wav|aif)$",REG_ICASE|REG_NOSUB|REG_EXTENDED); gtk_file_filter_add_custom(filter,GTK_FILE_FILTER_FILENAME,FileExtensionFilter,&fregex[0],NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"MOD music files (mo3/xm/mod/s3m/it/mtm/umx)"); regcomp(&fregex[1],"\\.(mo3|xm|mod|s3m|it|umx)$",REG_ICASE|REG_NOSUB|REG_EXTENDED); gtk_file_filter_add_custom(filter,GTK_FILE_FILTER_FILENAME,FileExtensionFilter,&fregex[1],NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); filter=gtk_file_filter_new(); gtk_file_filter_set_name(filter,"All files"); gtk_file_filter_add_pattern(filter,"*"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(filesel),filter); } g_timeout_add(TIMERPERIOD,Update,NULL); UpdateButtons(); gtk_main(); gtk_widget_destroy(filesel); regfree(&fregex[0]); regfree(&fregex[1]); BASS_Free(); // close output return 0; }
void DopplerChanged(GtkRange *range, gpointer data) { // change the doppler factor double value=gtk_range_get_value(range); BASS_Set3DFactors(-1,-1,pow(2,(value-10)/5.0)); }
void RolloffChanged(GtkRange *range, gpointer data) { // change the rolloff factor double value=gtk_range_get_value(range); BASS_Set3DFactors(-1,pow(2,(value-10)/5.0),-1); }