snd_data *copy_snd_data(snd_data *sd, mus_long_t beg, int bufsize) { snd_data *sf; snd_io *io; int fd; file_info *hdr; hdr = sd->hdr; fd = snd_open_read(sd->filename); if (fd == -1) return(NULL); snd_file_open_descriptors(fd, sd->filename, hdr->format, hdr->data_location, hdr->chans, hdr->type); during_open(fd, sd->filename, SND_COPY_READER); io = make_file_state(fd, hdr, sd->chan, beg, bufsize); sf = (snd_data *)calloc(1, sizeof(snd_data)); sf->type = sd->type; sf->buffered_data = io->arrays[sd->chan]; sf->io = io; sf->filename = mus_strdup(sd->filename); sf->hdr = hdr; sf->temporary = DONT_DELETE_ME; sf->edit_ctr = sd->edit_ctr; sf->open = FD_OPEN; sf->inuse = false; sf->copy = true; return(sf); }
static void edit_find_ok_callback(read_direction_t direction, Widget w, XtPointer context, XtPointer info) { /* "Find" is the label here */ char *str = NULL, *buf = NULL; XmString s1; XEN proc; str = XmTextGetString(edit_find_text); if ((str) && (*str)) { clear_global_search_procedure(true); ss->search_expr = mus_strdup(str); redirect_errors_to(errors_to_find_text, NULL); proc = snd_catch_any(eval_str_wrapper, str, str); redirect_errors_to(NULL, NULL); if ((XEN_PROCEDURE_P(proc)) && (procedure_arity_ok(proc, 1))) { ss->search_proc = proc; ss->search_proc_loc = snd_protect(proc); #if HAVE_SCHEME if (optimization(ss) > 0) ss->search_tree = mus_run_form_to_ptree_1_b(XEN_PROCEDURE_SOURCE(proc)); #endif buf = (char *)calloc(PRINT_BUFFER_SIZE, sizeof(char)); mus_snprintf(buf, PRINT_BUFFER_SIZE, "find: %s", str); set_label(edit_find_label, buf); /* XmTextSetString(edit_find_text, NULL); */ free(buf); } } else { if (ss->search_expr == NULL) { char *temp = NULL; /* using global search_proc set by user */ buf = (char *)calloc(PRINT_BUFFER_SIZE, sizeof(char)); mus_snprintf(buf, PRINT_BUFFER_SIZE, "find: %s", temp = (char *)XEN_AS_STRING(ss->search_proc)); #if HAVE_SCHEME if (temp) free(temp); #endif set_label(edit_find_label, buf); /* XmTextSetString(edit_find_text, NULL); */ free(buf); } } if (str) XtFree(str); if ((XEN_PROCEDURE_P(ss->search_proc)) || (ss->search_tree)) { s1 = XmStringCreateLocalized((char *)"Stop"); XtVaSetValues(cancelB, XmNlabelString, s1, NULL); XmStringFree(s1); redirect_xen_error_to(stop_search_if_error, NULL); str = global_search(direction); redirect_xen_error_to(NULL, NULL); s1 = XmStringCreateLocalized((char *)"Go Away"); XtVaSetValues(cancelB, XmNlabelString, s1, NULL); XmStringFree(s1); if ((str) && (*str)) set_label(edit_find_label, str); } }
snd_data *make_snd_data_file(const char *name, snd_io *io, file_info *hdr, file_delete_t temp, int ctr, int temp_chan) { snd_data *sd; sd = (snd_data *)calloc(1, sizeof(snd_data)); sd->type = SND_DATA_FILE; sd->buffered_data = io->arrays[temp_chan]; sd->io = io; sd->filename = mus_strdup(name); sd->hdr = hdr; sd->temporary = temp; if ((temp == MULTICHANNEL_DELETION) || (temp == MULTICHANNEL_DELETION_IF_FILE)) tick_temp(name, temp_chan); sd->edit_ctr = ctr; sd->open = FD_OPEN; sd->inuse = false; sd->copy = false; sd->chan = temp_chan; sd->data_bytes = (hdr->samples) * (mus_bytes_per_sample(hdr->format)) + hdr->data_location; return(sd); }
int mus_sound_close_output(int fd, mus_long_t bytes_of_data) { char *name; name = mus_file_fd_name(fd); if (name) { int err = MUS_ERROR, old_type; char *fname; fname = mus_strdup(name); old_type = mus_file_header_type(fd); err = mus_file_close(fd); /* this frees the original fd->name, so we copied above */ /* fd is NULL now */ mus_sound_forget(fname); mus_header_change_data_size(fname, old_type, bytes_of_data); free(fname); return(err); } return(MUS_ERROR); }
void remember_temp(const char *filename, int chans) { int i, old_size; tempfile_ctr *tmp = NULL; if (tempfiles_size == 0) { tempfiles_size = 8; tempfiles = (tempfile_ctr **)calloc(tempfiles_size, sizeof(tempfile_ctr *)); i = 0; } else { for (i = 0; i < tempfiles_size; i++) if ((tempfiles[i]) && (mus_strcmp(filename, tempfiles[i]->name))) return; for (i = 0; i < tempfiles_size; i++) if (tempfiles[i] == NULL) break; if (i >= tempfiles_size) { old_size = tempfiles_size; tempfiles_size += 8; tempfiles = (tempfile_ctr **)realloc(tempfiles, tempfiles_size * sizeof(tempfile_ctr *)); for (i = old_size; i < tempfiles_size; i++) tempfiles[i] = NULL; i = old_size; } } tmp = (tempfile_ctr *)calloc(1, sizeof(tempfile_ctr)); tempfiles[i] = tmp; tmp->name = mus_strdup(filename); tmp->chans = chans; tmp->ticks = (int *)calloc(chans, sizeof(int)); }
static void local_mus_error_to_snd(int type, char *msg) { local_mus_error = type; if (ss->io_error_info) free(ss->io_error_info); ss->io_error_info = mus_strdup(msg); }
GtkWidget *snd_as_widget(int argc, char **argv, GtkWidget *parent, void (*error_func)(const char *msg)) { #else void snd_doit(int argc, char **argv) { #endif GtkWidget *shell; int i; #ifdef SND_AS_WIDGET set_error_display(error_func); ss = snd_main(argc, argv); #else gtk_init(&argc, &argv); #if (!HAVE_GTK_3) #ifndef HAVE_OSX gdk_set_locale(); #endif #endif #endif ss->channel_min_height = CHANNEL_MIN_HEIGHT; ss->Graph_Cursor = DEFAULT_GRAPH_CURSOR; #ifndef SND_AS_WIDGET shell = gtk_window_new(GTK_WINDOW_TOPLEVEL); sg_make_resizable(shell); #endif auto_open_files = argc-1; if (argc > 1) auto_open_file_names = (char **)(argv + 1); ss->startup_title = mus_strdup("snd"); set_sound_style(SOUNDS_VERTICAL); for (i = 1; i < argc; i++) if ((strcmp(argv[i], "-h") == 0) || (strcmp(argv[i], "-horizontal") == 0) || (strcmp(argv[i], "--horizontal") == 0)) set_sound_style(SOUNDS_HORIZONTAL); else if ((strcmp(argv[i], "-v") == 0) || (strcmp(argv[i], "-vertical") == 0) || (strcmp(argv[i], "--vertical") == 0)) set_sound_style(SOUNDS_VERTICAL); else if ((strcmp(argv[i], "-notebook") == 0) || (strcmp(argv[i], "--notebook") == 0)) set_sound_style(SOUNDS_IN_NOTEBOOK); else if ((strcmp(argv[i], "-separate") == 0) || (strcmp(argv[i], "--separate") == 0)) set_sound_style(SOUNDS_IN_SEPARATE_WINDOWS); else if (strcmp(argv[i], "-noglob") == 0) noglob = true; else if (strcmp(argv[i], "-noinit") == 0) noinit = true; else if (strcmp(argv[i], "-nostdin") == 0) nostdin = true; else if ((strcmp(argv[i], "-b") == 0) || (strcmp(argv[i], "-batch") == 0) || (strcmp(argv[i], "--batch") == 0)) batch = true; else if (strcmp(argv[i], "--features") == 0) /* testing (compsnd) */ check_features_list(argv[i + 1]); ss->batch_mode = batch; set_auto_resize(AUTO_RESIZE_DEFAULT); ss->zoom_slider_width = ZOOM_SLIDER_WIDTH; ss->position_slider_width = POSITION_SLIDER_WIDTH; ss->channel_sash_indent = CHANNEL_SASH_INDENT; /* not currently used */ ss->channel_sash_size = CHANNEL_SASH_SIZE; ss->sash_size = SASH_SIZE; ss->sash_indent = SASH_INDENT; ss->toggle_size = TOGGLE_SIZE; ss->graph_is_active = false; ss->bg_gradient = 0.05; ss->white = WHITE_COLOR; ss->black = BLACK_COLOR; ss->light_blue = LIGHT_BLUE_COLOR; ss->lighter_blue = LIGHTER_BLUE_COLOR; ss->red = RED_COLOR; ss->green = GREEN_COLOR; ss->blue = BLUE_COLOR; ss->yellow = YELLOW_COLOR; ss->highlight_color = HIGHLIGHT_COLOR; ss->basic_color = BASIC_COLOR; ss->position_color = POSITION_COLOR; ss->zoom_color = ZOOM_COLOR; ss->cursor_color = CURSOR_COLOR; ss->selection_color = SELECTION_COLOR; ss->mix_color = MIX_COLOR; ss->enved_waveform_color = ENVED_WAVEFORM_COLOR; ss->filter_control_waveform_color = FILTER_CONTROL_WAVEFORM_COLOR; ss->listener_color = LISTENER_COLOR; ss->listener_text_color = LISTENER_TEXT_COLOR; ss->graph_color = GRAPH_COLOR; ss->selected_graph_color = SELECTED_GRAPH_COLOR; ss->data_color = DATA_COLOR; ss->selected_data_color = SELECTED_DATA_COLOR; ss->mark_color = MARK_COLOR; ss->sash_color = SASH_COLOR; ss->text_focus_color = TEXT_FOCUS_COLOR; ss->grid_color = get_in_between_color(ss->data_color, ss->graph_color); ss->selected_grid_color = get_in_between_color(ss->selected_data_color, ss->selected_graph_color); ss->axis_color_set = false; ss->orig_data_color = ss->data_color; ss->orig_selected_data_color = ss->selected_data_color; ss->orig_mark_color = ss->mark_color; ss->orig_mix_color = ss->mix_color; ss->orig_graph_color = ss->graph_color; ss->orig_selected_graph_color = ss->selected_graph_color; ss->orig_listener_color = ss->listener_color; ss->orig_listener_text_color = ss->listener_text_color; ss->orig_cursor_color = ss->cursor_color; ss->orig_basic_color = ss->basic_color; ss->orig_selection_color = ss->selection_color; ss->orig_zoom_color = ss->zoom_color; ss->orig_position_color = ss->position_color; ss->orig_highlight_color = ss->highlight_color; if ((!(set_tiny_font(DEFAULT_TINY_FONT))) && (!(set_tiny_font(FALLBACK_FONT)))) fprintf(stderr, "can't find tiny font: %s", DEFAULT_TINY_FONT); if ((!(set_axis_label_font(DEFAULT_AXIS_LABEL_FONT))) && (!(set_axis_label_font(FALLBACK_FONT)))) fprintf(stderr, "can't find axis label font: %s", DEFAULT_AXIS_LABEL_FONT); if ((!(set_axis_numbers_font(DEFAULT_AXIS_NUMBERS_FONT))) && (!(set_axis_numbers_font(FALLBACK_FONT)))) fprintf(stderr, "can't find axis numbers font: %s", DEFAULT_AXIS_NUMBERS_FONT); if ((!(set_peaks_font(DEFAULT_PEAKS_FONT))) && (!(set_peaks_font(FALLBACK_FONT)))) fprintf(stderr, "can't find peaks font: %s", DEFAULT_PEAKS_FONT); if ((!(set_bold_peaks_font(DEFAULT_BOLD_PEAKS_FONT))) && (!(set_bold_peaks_font(FALLBACK_FONT)))) fprintf(stderr, "can't find bold peaks font: %s", DEFAULT_BOLD_PEAKS_FONT); if (!(set_listener_font(FALLBACK_FONT))) fprintf(stderr, "can't find listener font: %s", FALLBACK_FONT); ss->orig_axis_label_font = mus_strdup(axis_label_font(ss)); ss->orig_axis_numbers_font = mus_strdup(axis_numbers_font(ss)); ss->orig_peaks_font = mus_strdup(peaks_font(ss)); ss->orig_bold_peaks_font = mus_strdup(bold_peaks_font(ss)); ss->orig_listener_font = mus_strdup(listener_font(ss)); ss->orig_tiny_font = mus_strdup(tiny_font(ss)); #if (!HAVE_GTK_3) init_gtk(); #endif MAIN_PANE(ss) = gtk_vbox_new(false, 0); /* not homogenous, spacing 0 */ #if (HAVE_GTK_3) init_gtk(); #endif #ifdef SND_AS_WIDGET MAIN_SHELL(ss) = parent; shell = MAIN_PANE(ss); #else MAIN_SHELL(ss) = shell; gtk_container_add(GTK_CONTAINER(MAIN_SHELL(ss)), MAIN_PANE(ss)); #endif add_menu(); /* adds menubar to MAIN_PANE (via box_pack_start) */ if (with_toolbar(ss)) show_toolbar(); if (sound_style(ss) != SOUNDS_IN_SEPARATE_WINDOWS) { SOUND_PANE(ss) = gtk_vpaned_new(); gtk_container_set_border_width(GTK_CONTAINER(SOUND_PANE(ss)), 0); gtk_container_add(GTK_CONTAINER(MAIN_PANE(ss)), SOUND_PANE(ss)); if (sound_style(ss) == SOUNDS_IN_NOTEBOOK) { SOUND_PANE_BOX(ss) = gtk_notebook_new(); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(SOUND_PANE_BOX(ss)), GTK_POS_TOP); SG_SIGNAL_CONNECT(SOUND_PANE_BOX(ss), "switch_page", notebook_switch_page, NULL); } else { if (sound_style(ss) == SOUNDS_HORIZONTAL) SOUND_PANE_BOX(ss) = gtk_hbox_new(false, 0); else SOUND_PANE_BOX(ss) = gtk_vbox_new(false, 0); } gtk_paned_add1(GTK_PANED(SOUND_PANE(ss)), SOUND_PANE_BOX(ss)); gtk_widget_show(SOUND_PANE_BOX(ss)); gtk_widget_show(SOUND_PANE(ss)); } gtk_widget_show(MAIN_PANE(ss)); gtk_widget_show(MAIN_SHELL(ss)); #ifndef SND_AS_WIDGET #if HAVE_GTK_ADJUSTMENT_GET_UPPER MAIN_WINDOW(ss) = gtk_widget_get_window(MAIN_SHELL(ss)); #else MAIN_WINDOW(ss) = MAIN_SHELL(ss)->window; #endif #else MAIN_WINDOW(ss) = gtk_widget_get_parent_window(MAIN_SHELL(ss)); #endif setup_gcs(); if (batch) gtk_widget_hide(MAIN_SHELL(ss)); else gdk_window_resize(WIDGET_TO_WINDOW(MAIN_SHELL(ss)), INITIAL_WINDOW_WIDTH, INITIAL_WINDOW_HEIGHT); startup_funcs(); #if HAVE_SETJMP_H #if MUS_TRAP_SEGFAULT if (sigsetjmp(envHandleEventsLoop, 1)) { if (!(ss->exiting)) snd_error_without_format("Caught seg fault (will try to continue):\n"); else { snd_error_without_format("Caught seg fault while trying to exit.\n"); exit(0); } } #endif if (setjmp(top_level_jump)) { if (!(ss->jump_ok)) snd_error_without_format("Caught top level error (will try to continue):\n"); else ss->jump_ok = false; } #endif if (ss->startup_errors) { post_it("Error in initialization", ss->startup_errors); free(ss->startup_errors); ss->startup_errors = NULL; } #if HAVE_GTK_3 set_basic_color(ss->basic_color); color_listener(ss->listener_color); color_chan_components(ss->zoom_color, COLOR_ZOOM); color_chan_components(ss->position_color, COLOR_POSITION); #endif #ifndef SND_AS_WIDGET set_up_icon(); gtk_main(); #else return(shell); #endif }