/* psymp3-ng: Next generation of PsyMP3, written in C. */ #include #include #include #include #include #ifdef __WIN32__ #include #endif #include #ifdef _USE_GTK #include #endif #define WIDTH 640 #define HEIGHT 400 #define BPP 4 #define DEPTH 32 char *mp3file, *mp3name, *mp3artist, *mp3author; void *mp3albumart; FSOUND_STREAM *stream; SDL_Surface *screen; SDL_Event event; // SDL functions int Init_SDL() { if (SDL_Init(SDL_INIT_VIDEO) < 0) return -1; screen = SDL_SetVideoMode(WIDTH, HEIGHT, DEPTH, SDL_HWSURFACE); if(!screen) return -1; return(0); } // FMOD functions // GUI function #if defined(__WIN32__) && !defined(_USE_GTK) void MsgBox(char *message) { int pid = getpid(); char tmp[512]; snprintf(tmp, 512, "PsyMP3-ng: running as PID %d.", pid); MessageBox(NULL, message, tmp, NULL); } #endif #ifdef _USE_GTK char *file_getname() { GtkWidget *dialog; char *retfile; dialog = gtk_file_chooser_dialog_new( "PsyMP3 - Select an mp3" " or Ogg Vorbis file...", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL ); g_signal_connect (GTK_OBJECT (dialog), "destroy", GTK_SIGNAL_FUNC (>k_widget_destroy), NULL); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.mp3"); gtk_file_filter_set_name (filter, "MPEG Layer-3 Audio (*.mp3)"); gtk_file_chooser_add_filter (dialog, filter); g_object_unref (filter); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.wma"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.asf"); gtk_file_filter_set_name (filter, "Windows Media Audio (*.wma; *.asf)"); gtk_file_chooser_add_filter (dialog, filter); g_object_unref (filter); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.ogg"); gtk_file_filter_set_name (filter, "Ogg Vorbis/Ogg FLAC (*.ogg)"); gtk_file_chooser_add_filter (dialog, filter); g_object_unref (filter); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.flac"); gtk_file_filter_set_name (filter, "Free Lossless Audio Codec/FLAC (*.flac)"); gtk_file_chooser_add_filter (dialog, filter); g_object_unref (filter); filter = gtk_file_filter_new(); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), "*.*"); gtk_file_filter_set_name (filter, "All Files (*.*)"); gtk_file_chooser_add_filter (dialog, filter); g_object_unref (filter); if( gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); retfile = malloc(4096); strncpy(retfile, filename, 4095); g_free(filename); } // gtk_widget_destroy( GTK_WIDGET(dialog) ); return(retfile); } gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer shit) { g_print("delete event occurred\n"); return TRUE; } void destroy(GtkWidget *widget, gpointer shit) { } void hello(GtkWidget *widget, gpointer shit) { g_print("MsgBox(): Destroying window.\n"); } void MsgBox(char *message) { GtkWidget *gwindow, *gbutton, *gbox, *label; char tmp[1024]; snprintf(tmp,1024,"PsyMP3 - running as PID %d", getpid()); gwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); label = gtk_label_new(message); gtk_window_set_title (GTK_WINDOW (gwindow), tmp); g_signal_connect (GTK_OBJECT (gwindow), "delete_event", GTK_SIGNAL_FUNC (&delete_event), NULL); g_signal_connect (GTK_OBJECT (gwindow), "destroy", GTK_SIGNAL_FUNC (>k_widget_destroy), NULL); gbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (gwindow), gbox); gtk_container_set_border_width (GTK_CONTAINER (gwindow), 15); gbutton = gtk_button_new_with_mnemonic ("_Ok"); g_signal_connect (GTK_OBJECT (gbutton), "clicked", GTK_SIGNAL_FUNC (&hello), NULL); g_signal_connect_swapped (GTK_OBJECT (gbutton), "clicked", GTK_SIGNAL_FUNC (>k_widget_destroy), GTK_OBJECT (gwindow)); gtk_box_pack_start (GTK_BOX(gbox), label, FALSE, FALSE, 5); gtk_box_pack_start (GTK_BOX(gbox), gbutton, FALSE, FALSE, 5); gtk_widget_show(label); gtk_widget_show(gbutton); gtk_widget_show(gbox); gtk_widget_show(gwindow); gtk_main (); } #else void MsgBox(char *message) { printf("PsyMP3-ng[%d]: %s\n",getpid(),message); } #endif // Player functions void ExitPlayer() { SDL_Quit(); exit(0); } // End of functions. int main(int argc, char *argv[]) { struct timespec ts; ts.tv_sec = 0; ts.tv_nsec = 33000; int ret; #ifdef _USE_GTK gtk_init(&argc, &argv); #endif printf("PsyMP3-ng pre-alpha\n"); #ifdef __PREFER_OSS__ FSOUND_SetOutput(FSOUND_OUTPUT_OSS); #endif ret = Init_SDL(); if (ret == -1) { printf("SDL init failed."); } // FMOD Init goes here. // Testcase; file_getname() returns malloc()'d string anyways. free(file_getname()); do { while(SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: case SDL_KEYDOWN: ExitPlayer(); } } } while (1); ExitPlayer(); }