diff -urN soundtracker-0.3.0/AUTHORS soundtracker-0.3.1/AUTHORS --- soundtracker-0.3.0/AUTHORS Thu Aug 12 19:53:52 1999 +++ soundtracker-0.3.1/AUTHORS Sun Aug 22 20:57:51 1999 @@ -9,19 +9,17 @@ ============== Niklas Beisert -The GIMP Team - (tips-dialog.c from the GIMP) Tammo Hinrichs (xm-player.c derived from OpenCP-kb980717) Check out: http://www.cubic.org/player/ +The GIMP Team + (tips-dialog.c from the GIMP) Simon Kågedal (Sample map editor derived from clavier-0.1.3) Francois Pinard (recode.c derived from the recode-3.4.1 package) Free Software Foundation, Inc. (poll.c quickly c&p'ed from libc-5.4.46 source) -Peter Zelezny - (GTK+ menu and GNOME emulation code from xchat-0.9.2) Contributions @@ -47,4 +45,4 @@ ============= Atsushi Yamagata - (JA of soundtracker_tips.txt) + (JA of soundtracker_tips.txt, ja.po) diff -urN soundtracker-0.3.0/ChangeLog soundtracker-0.3.1/ChangeLog --- soundtracker-0.3.0/ChangeLog Fri Aug 13 20:43:39 1999 +++ soundtracker-0.3.1/ChangeLog Sun Aug 29 18:49:55 1999 @@ -1,3 +1,80 @@ +1999-08-29 Michael Krause + + * Released v0.3.1 + + * soundtracker.spec (%build): Initalize LINGUAS variable before + building, so that all catalogs get installed. + + * INSTALL, FAQ: Some words about the gtk+ update. + + * app/sample-editor.c: Added horizontal scroll bar under the + sample display. + + * app/sample-display.c: Added "window_changed" signal which is + triggered whenever win_start / win_length are changed. + + * app/sample-editor.c (sample_editor_perform_ramp): change + ABS(*p++) into q=*p++;q=ABS(q); macros suck :-) + + * app/sample-display.c: Middle mouse button pans the display + window. + + * configure.in (CFLAGS): Require gtk+-1.2.2. Fixes the popular + "GUI freezes if you click the menu bar" bug. + +1999-08-25 Michael Krause + + * app/sample-editor.c (sample_editor_ok_clicked): Don't call + sampler_page_enable_widgets() (the widgets have already been + destroyed). + + * app/gui.c (gui_handle_standard_keys): Handle Shift+Space + manually even though it's in the menu; works around a (so I think) + gtk+ menu bug. + +1999-08-23 Michael Krause + + * app/sample-editor.c: Added "Volume Ramp" dialog, including a + normalizing function. + +1999-08-22 Michael Krause + + * app/menubar.c: Rewrote non-GNOME menubar code to use + GtkItemFactory, because we can handle user-defined accelerators + this way. Added underscores to all the menu texts. Added "Edit" + menu, with "Jazz Mode Edit" toggle and "Transpositions" dialog + launcher. + + * app/gui.c (keyevent): All the key handlers return a flag + indicating if the key has been handled or not. If it has not been + handled, don't stop the signal, but let gtk+ continue to handle + it. We need this to support the menubar correctly. + + * app/track-editor.c (track_editor_handle_keys): Binding "Home" + and "End" keys to start and end of current pattern, respectively. + + * app/transposition.[ch]: Added new "Transposition Tools" dialog + with a lot of transposition and instrument number related + functions. + +1999-08-21 Michael Krause + + * app/instrument-editor.c: Capturing clavierkey_enter and _leave + signals to display the note the mouse is over in a framed label. + Also added the "Initialize" button which fills the whole samplemap + with the current sample value. + + * app/clavier.c: Added _enter and _leave signals which are called + when the mouse is over a key or when it leaves one. + +1999-08-19 Michael Krause + + * app/sample-editor.c (sample_editor_save_wav): Use libaudiofile + to save WAVs. If compiling without libaudiofile, disable "Save + WAV" widget. + + * po/ja.po: Added japanese translation from Atsushi Yamagata. + 1999-08-13 Michael Krause * Released v0.3.0 diff -urN soundtracker-0.3.0/FAQ soundtracker-0.3.1/FAQ --- soundtracker-0.3.0/FAQ Mon Jul 19 11:29:14 1999 +++ soundtracker-0.3.1/FAQ Sun Aug 29 18:15:48 1999 @@ -5,7 +5,14 @@ QQQQ: SoundTracker crashes as soon as I start it or as I press a button in its window, giving weird X errors. -a: Read the INSTALL file. +a: You don't have thread-safe X libraries (you have a libc5 +system). Read the INSTALL file. + +------------------------------------------------------------------------ + +QQQQ: SoundTracker crashes as soon as I use the menu bar. + +a: You have a too old gtk+. Read the INSTALL file. ------------------------------------------------------------------------ diff -urN soundtracker-0.3.0/INSTALL soundtracker-0.3.1/INSTALL --- soundtracker-0.3.0/INSTALL Thu Aug 12 16:39:47 1999 +++ soundtracker-0.3.1/INSTALL Sun Aug 29 18:15:52 1999 @@ -6,10 +6,10 @@ compile and run the SoundTracker (included are commands which help you to find out your installed version, if any): -- gtk+ 1.2.0 gtk-config --version +- gtk+ 1.2.2 gtk-config --version (available from http://www.gtk.org/) -- audiofile library 0.1.5 audiofile-config --version +- optionally, audiofile library 0.1.5 audiofile-config --version (available from http://www.68k.org/~michael/audiofile/) - optionally, GNOME 1.0.1 gnome-config --version @@ -24,6 +24,13 @@ and other recent distributions also carry a recent GNOME installation. You do NOT need to run an actual GNOME desktop if you like KDE or plain X11 better, but having the libraries installed helps. + +If you don't have libaudiofile, you will not be able to load or save +samples in the sample editor (loading and saving modules will work, +though). + +gtk+-1.2.1 and older versions have a bug which makes the GUI freeze as +soon as you click into the menu bar. FOR LIBC5 SYSTEMS ================== diff -urN soundtracker-0.3.0/NEWS soundtracker-0.3.1/NEWS --- soundtracker-0.3.0/NEWS Fri Aug 13 20:39:51 1999 +++ soundtracker-0.3.1/NEWS Sun Aug 29 18:35:00 1999 @@ -2,6 +2,18 @@ (This file lists only major user-visible changes; the ChangeLog file contains more details) +What is new in soundtracker-0.3.1 (29-Aug-1999): + +* Transposition and instrument number changing functions +* Volume ramping for the sample editor +* Horizontal scroll bar and middle mouse button to move the + sample display window +* Displaying the name of the note the mouse is over in the + sample map editor +* User-defined menu accelerators finally work +* Japanese translation +* "Home" and "End" key bindings + What is new in soundtracker-0.3.0 (13-Aug-1999): * Complete keyoff handling for live playing mode diff -urN soundtracker-0.3.0/README soundtracker-0.3.1/README --- soundtracker-0.3.0/README Fri Aug 13 15:14:47 1999 +++ soundtracker-0.3.1/README Thu Aug 19 20:20:26 1999 @@ -2,7 +2,7 @@ Back to the roots -- this is the Real SoundTracker -------------------------------------------------------------- - v0.3.0 --- THIS IS A DEVELOPMENT VERSION! + v0.3.1 --- THIS IS A DEVELOPMENT VERSION! Written and (C) 1998-1999 by Michael Krause [ raw style / lego ] @@ -70,6 +70,8 @@ F10 Jump to position L / 4 F11 Jump to position L / 2 F12 Jump to position 3 * L / 4 + +Ctrl + 1 ... 8 Change "jump" value CrsrLeft / Right Change pattern column and/or channel Tab Skip to same column in next channel diff -urN soundtracker-0.3.0/TODO soundtracker-0.3.1/TODO --- soundtracker-0.3.0/TODO Fri Aug 13 20:39:40 1999 +++ soundtracker-0.3.1/TODO Sun Aug 29 18:15:49 1999 @@ -1,14 +1,30 @@ things to do and known bugs (in no particular order) ------------------------------------------------------- -MENUBAR: jazz-edit toggle +SAMPLE EDITOR: lowpass / highpass / bandpass, mix two samples, +down/upsample functions. -SCOPE GROUP: toggle display of channel numbers. +SAMPLE EDITOR: needs some serious re-design (i mean the gui). + +LOGO: start a soundtracker logo contest. -MENUBAR: crash with suse 6.1?!? +SPIN BUTTONS: make key-editable just like the instrument name widget, +for example... SAMPLE EDITOR: add support for loading stereo samples (left, right or -mixed channels). +mixed channels). [[ stefan hager? ]] + +TRACK EDITOR: multi-track c'n'p + +TRACK EDITOR: insert / delete track function + +TRACK EDITOR: copy/cut/paste via mouse - context menu with editing +functions. + +SCOPE GROUP: toggle display of channel numbers. + +GNOME: "can't create ~/.gnome directory" bug -- is this related to +setuid(getuid())? SAMPLE EDITOR: "play selection" button. (don't loop the sample then) @@ -17,13 +33,6 @@ OSS-OUTPUT.C: get_play_time(): check for DSP_CAP_REALTIME and use GETxPTR if available. -MENUBAR: either disable the user-definable menu accelerators or handle -them properly. how do i save and restore the menu accelerators set by -the user? Put all operations which are only key-accessable into the -menu bar (including their short cuts, which may be configurable). Then -GNOME-menu or my GTK+ menu code will handle the short cuts if they -aren't trapped by the note keys code first. - AUDIOCONFIG: should edit und playback objects be able to use different drivers? @@ -43,11 +52,6 @@ TRACKER: beat markers ala voodootracker -TRACK EDITOR: insert / delete track function - -TRACK EDITOR: copy/cut/paste via mouse - context menu with editing -functions. - MIXER POSITION / CLIPPING INDICATOR: update more often TIME-BUFFER: rewrite, optimize, respect maximum time delta value. @@ -57,14 +61,9 @@ INSTRUMENT EDITOR: "clear instrument", "save instrument" (save in XI format). -CLAVIER: put this to some more clever place so that the main window -doesn't have to be that big. - EVERYWHERE: use of pthread_create isn't quite consistent with use of gthread_* functions everywhere else. -GUI: transposition functions - ENVELOPE-BOX: canvas should scroll if points are moved outside the current displayed region. @@ -94,10 +93,6 @@ CLAVIER: highlight currently played notes! -CLAVIER: note under cursor must be displayed as real note string - -GNOME: get some gnome standards documentation and implement it... - MIXER: remove mixer module. this concept is bogus. XM.C: loading chuck-boom.xm doesn't work! @@ -113,8 +108,6 @@ mod.savage, spotlight madmix, alice d., abyss-tr -- fix note retriggering when only instrument column is set. -MIXER: stereo width / stereo type (ramp or semi-ramp) - LOADER: support loading from archives XM-PLAYER: find the bug which causes ch->chFinalPitch to become zero @@ -133,9 +126,6 @@ SoundTracker could play two mods simultaneously; it could be used as a pseudo-turntable module mixer then. something i always wanted to do. -SAMPLE EDITOR: normalize / volume up/down / fade in/out, lowpass / -highpass / bandpass, mix two samples, down/upsample functions. - MODINFO PAGE: new function: "sample used in module?" SAMPLE IMPORT/EXPORT: XI, IFF and RAW formats. @@ -143,9 +133,6 @@ SPINBUTTON: add a hexadecimal mode, so that tracker widget / gui use is consistent. -SAMPLE EDITOR: support display window panning (middle mousebutton or -ctrl-anybutton, and a hscrollbar under the sample display) - GUI: every notebook page should be able to be put in its own window by a single button click. @@ -158,7 +145,8 @@ PLAYLIST WIDGET: write a playlist widget which always displays the current pattern in the middle of the scrollable area (can be used for the numerical envelope editor, too). this is rather boring: ever had a -look at the gtk+ clist widget? +look at the gtk+ clist widget? make this configurable: protracker +(current one) or fasttracker like playlist. FILE REQUESTER: write a small file requester widget so that we don't have to use the gtk+ file selection, which can be quite unpleasant if @@ -197,3 +185,10 @@ > - editor should be colourful (customize colors of samples, commands.. and > fonts) + +SAMPLE EDITOR: sample loader / saver: check if the (width == 8 -> +modifysample) code is correct. well, no need to check: it isn't. but +find a nicer way. "for now, it works" :-) also, check the +virtualbyteorder stuff. + +GUI: bpm and tempo spins behave a little bit strange sometimes. diff -urN soundtracker-0.3.0/app/Makefile.am soundtracker-0.3.1/app/Makefile.am --- soundtracker-0.3.0/app/Makefile.am Wed Aug 11 15:04:09 1999 +++ soundtracker-0.3.1/app/Makefile.am Sun Aug 22 12:35:48 1999 @@ -33,6 +33,7 @@ tips-dialog.c tips-dialog.h \ track-editor.c track-editor.h \ tracker.c tracker.h \ + transposition.c transposition.h \ xm.c xm.h \ xm-player.c xm-player.h diff -urN soundtracker-0.3.0/app/Makefile.in soundtracker-0.3.1/app/Makefile.in --- soundtracker-0.3.0/app/Makefile.in Fri Aug 13 21:00:41 1999 +++ soundtracker-0.3.1/app/Makefile.in Sun Aug 29 18:50:15 1999 @@ -96,7 +96,7 @@ bin_PROGRAMS = soundtracker -soundtracker_SOURCES = audio.c audio.h audioconfig.c audioconfig.h clavier.c clavier.h endian-conv.h driver.h driver-in.h driver-out.h envelope-box.c envelope-box.h errors.c errors.h extspinbutton.c extspinbutton.h gui-settings.c gui-settings.h gui-subs.c gui-subs.h gui.c gui.h i18n.h instrument-editor.c instrument-editor.h keys.c keys.h main.c main.h menubar.c menubar.h mixer.h module-info.c module-info.h poll.c poll.h preferences.c preferences.h recode.c recode.h sample-display.c sample-display.h sample-editor.c sample-editor.h scope-group.c scope-group.h st-subs.c st-subs.h time-buffer.c time-buffer.h tips-dialog.c tips-dialog.h track-editor.c track-editor.h tracker.c tracker.h xm.c xm.h xm-player.c xm-player.h +soundtracker_SOURCES = audio.c audio.h audioconfig.c audioconfig.h clavier.c clavier.h endian-conv.h driver.h driver-in.h driver-out.h envelope-box.c envelope-box.h errors.c errors.h extspinbutton.c extspinbutton.h gui-settings.c gui-settings.h gui-subs.c gui-subs.h gui.c gui.h i18n.h instrument-editor.c instrument-editor.h keys.c keys.h main.c main.h menubar.c menubar.h mixer.h module-info.c module-info.h poll.c poll.h preferences.c preferences.h recode.c recode.h sample-display.c sample-display.h sample-editor.c sample-editor.h scope-group.c scope-group.h st-subs.c st-subs.h time-buffer.c time-buffer.h tips-dialog.c tips-dialog.h track-editor.c track-editor.h tracker.c tracker.h transposition.c transposition.h xm.c xm.h xm-player.c xm-player.h soundtracker_LDADD = drivers/libdrivers.a mixers/libmixers.a @@ -119,8 +119,8 @@ errors.o extspinbutton.o gui-settings.o gui-subs.o gui.o \ instrument-editor.o keys.o main.o menubar.o module-info.o poll.o \ preferences.o recode.o sample-display.o sample-editor.o scope-group.o \ -st-subs.o time-buffer.o tips-dialog.o track-editor.o tracker.o xm.o \ -xm-player.o +st-subs.o time-buffer.o tips-dialog.o track-editor.o tracker.o \ +transposition.o xm.o xm-player.o soundtracker_DEPENDENCIES = drivers/libdrivers.a mixers/libmixers.a soundtracker_LDFLAGS = CFLAGS = @CFLAGS@ @@ -339,12 +339,12 @@ preferences.h main.o: main.c ../config.h i18n.h gui.h xm.h mixer.h audio.h \ driver-out.h driver.h time-buffer.h keys.h gui-settings.h \ - audioconfig.h tips-dialog.h + audioconfig.h tips-dialog.h menubar.h menubar.o: menubar.c ../config.h i18n.h menubar.h gui.h gui-subs.h \ main.h xm.h mixer.h st-subs.h keys.h module-info.h \ preferences.h scope-group.h sample-display.h track-editor.h \ tracker.h audioconfig.h gui-settings.h tips-dialog.h \ - instrument-editor.h + instrument-editor.h transposition.h module-info.o: module-info.c i18n.h ../config.h module-info.h gui.h \ gui-subs.h xm.h mixer.h st-subs.h main.h sample-editor.h \ driver-in.h driver.h instrument-editor.h keys.h track-editor.h \ @@ -371,6 +371,9 @@ driver.h time-buffer.h main.h gui-settings.h sample-editor.h \ driver-in.h gui-subs.h tracker.o: tracker.c tracker.h xm.h mixer.h main.h gui-settings.h +transposition.o: transposition.c i18n.h ../config.h transposition.h \ + main.h xm.h mixer.h gui-subs.h gui.h st-subs.h track-editor.h \ + tracker.h xm.o: xm.c i18n.h ../config.h xm.h mixer.h endian-conv.h st-subs.h \ recode.h errors.h audio.h driver-out.h driver.h time-buffer.h xm-player.o: xm-player.c ../config.h i18n.h xm-player.h xm.h mixer.h \ diff -urN soundtracker-0.3.0/app/clavier.c soundtracker-0.3.1/app/clavier.c --- soundtracker-0.3.0/app/clavier.c Sun May 2 20:07:37 1999 +++ soundtracker-0.3.1/app/clavier.c Sat Aug 21 19:20:56 1999 @@ -54,6 +54,8 @@ { CLAVIERKEY_PRESS, CLAVIERKEY_RELEASE, + CLAVIERKEY_ENTER, + CLAVIERKEY_LEAVE, LAST_SIGNAL }; @@ -83,6 +85,7 @@ static gint clavier_button_press (GtkWidget *widget, GdkEventButton *event); static gint clavier_button_release (GtkWidget *widget, GdkEventButton *event); static gint clavier_motion_notify (GtkWidget *widget, GdkEventMotion *event); +static gint clavier_leave_notify (GtkWidget *widget, GdkEventCrossing *event); /* Helpers */ static void draw_key_hint (Clavier *, gint, GdkGC *); @@ -134,6 +137,18 @@ clavier_marshal_signal_1, GTK_TYPE_NONE, 1, GTK_TYPE_INT); + clavier_signals[CLAVIERKEY_ENTER] = + gtk_signal_new ("clavierkey_enter", GTK_RUN_FIRST, object_class->type, + GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_enter), + clavier_marshal_signal_1, GTK_TYPE_NONE, 1, + GTK_TYPE_INT); + + clavier_signals[CLAVIERKEY_LEAVE] = + gtk_signal_new ("clavierkey_leave", GTK_RUN_FIRST, object_class->type, + GTK_SIGNAL_OFFSET (ClavierClass, clavierkey_leave), + clavier_marshal_signal_1, GTK_TYPE_NONE, 1, + GTK_TYPE_INT); + gtk_object_class_add_signals (object_class, clavier_signals, LAST_SIGNAL); object_class->destroy = clavier_destroy; @@ -144,6 +159,7 @@ widget_class->button_press_event = clavier_button_press; widget_class->button_release_event = clavier_button_release; widget_class->motion_notify_event = clavier_motion_notify; + widget_class->leave_notify_event = clavier_leave_notify; } static void @@ -857,29 +873,50 @@ static gint clavier_motion_notify (GtkWidget *widget, GdkEventMotion *event) { - Clavier *clavier; - gint key; + Clavier *clavier; + gint key; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (IS_CLAVIER (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (IS_CLAVIER (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); - clavier = CLAVIER (widget); + clavier = CLAVIER (widget); - if (clavier->is_pressed) - { - key = which_key (clavier, (gint)event->x, (gint)event->y); + key = which_key (clavier, (gint)event->x, (gint)event->y); - if (key != clavier->key_pressed) - { - release_key (clavier); - press_key (clavier, key); + if(key != clavier->key_entered) { + if(clavier->key_entered != -1) { + gtk_signal_emit (GTK_OBJECT (clavier), + clavier_signals[CLAVIERKEY_LEAVE], clavier->key_entered); } + clavier->key_entered = key; + gtk_signal_emit (GTK_OBJECT (clavier), + clavier_signals[CLAVIERKEY_ENTER], key); } - /* printf("motion: %f %f\n", event->x, event->y);*/ + if (clavier->is_pressed) { + if (key != clavier->key_pressed) { + release_key (clavier); + press_key (clavier, key); + } + } - return FALSE; + return FALSE; +} + +static gint +clavier_leave_notify (GtkWidget *widget, + GdkEventCrossing *event) +{ + Clavier *clavier = CLAVIER (widget); + + if(clavier->key_entered != -1) { + gtk_signal_emit (GTK_OBJECT (clavier), + clavier_signals[CLAVIERKEY_LEAVE], clavier->key_entered); + clavier->key_entered = -1; + } + + return FALSE; } GtkWidget* @@ -920,7 +957,8 @@ GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | - GDK_POINTER_MOTION_MASK; + GDK_POINTER_MOTION_MASK | + GDK_LEAVE_NOTIFY_MASK; /* GDK_POINTER_MOTION_HINT_MASK*/ attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; diff -urN soundtracker-0.3.0/app/clavier.h soundtracker-0.3.1/app/clavier.h --- soundtracker-0.3.0/app/clavier.h Sun May 2 20:07:37 1999 +++ soundtracker-0.3.1/app/clavier.h Sat Aug 21 19:11:31 1999 @@ -90,6 +90,8 @@ gboolean is_pressed; /* is a key pressed? */ gint key_pressed; /* which key? */ + int key_entered; /* the key the mouse is over currently (or -1) */ + /* stuff that is calculated */ gfloat keywidth; /* X if dir==CLAVIER_DIR_HORIZONTAL */ @@ -104,6 +106,8 @@ void (* clavierkey_press) (Clavier *clavier, gint key); void (* clavierkey_release) (Clavier *clavier, gint key); + void (* clavierkey_enter) (Clavier *clavier, gint key); + void (* clavierkey_leave) (Clavier *clavier, gint key); }; GtkType clavier_get_type (void); diff -urN soundtracker-0.3.0/app/drivers/oss-output.c soundtracker-0.3.1/app/drivers/oss-output.c --- soundtracker-0.3.0/app/drivers/oss-output.c Fri Aug 13 13:44:18 1999 +++ soundtracker-0.3.1/app/drivers/oss-output.c Sun Aug 22 17:50:25 1999 @@ -92,9 +92,9 @@ if((w = write(d->soundfd, d->sndbuf, size) != size)) { if(w == -1) { - fprintf(stderr, _("driver_oss: write() returned -1.\n")); + fprintf(stderr, "driver_oss: write() returned -1.\n"); } else { - fprintf(stderr, _("driver_oss: write not completely done.\n")); + fprintf(stderr, "driver_oss: write not completely done.\n"); } } @@ -181,7 +181,15 @@ static const char *mixfreqlabels[] = { "8000", "16000", "22050", "44100", NULL }; d->configwidget = mainbox = gtk_vbox_new(FALSE, 2); - + + thing = gtk_label_new(_("These changes won't take effect until you restart playing.")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + box2 = gtk_hbox_new(FALSE, 4); gtk_widget_show(box2); gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); diff -urN soundtracker-0.3.0/app/gui-subs.c soundtracker-0.3.1/app/gui-subs.c --- soundtracker-0.3.0/app/gui-subs.c Fri Aug 13 12:35:40 1999 +++ soundtracker-0.3.1/app/gui-subs.c Sun Aug 22 16:44:04 1999 @@ -46,6 +46,14 @@ } void +add_empty_vbox (GtkWidget *tobox) +{ + GtkWidget *thing = gtk_vbox_new (FALSE, 0); + gtk_widget_show (thing); + gtk_box_pack_start (GTK_BOX (tobox), thing, TRUE, TRUE, 0); +} + +void make_radio_group_full (const char **labels, GtkWidget *tobox, GtkWidget **saveptr, @@ -64,7 +72,9 @@ *saveptr++ = thing; gtk_widget_show (thing); gtk_box_pack_start (GTK_BOX (tobox), thing, t1, t2, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, data); + if(sigfunc) { + gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, data); + } } } diff -urN soundtracker-0.3.0/app/gui-subs.h soundtracker-0.3.1/app/gui-subs.h --- soundtracker-0.3.0/app/gui-subs.h Fri Aug 13 12:35:40 1999 +++ soundtracker-0.3.1/app/gui-subs.h Sat Aug 21 18:23:18 1999 @@ -30,6 +30,7 @@ int find_current_toggle (GtkWidget **widgets, int count); void add_empty_hbox (GtkWidget *tobox); +void add_empty_vbox (GtkWidget *tobox); void make_radio_group (const char **labels, GtkWidget *tobox, GtkWidget **saveptr, diff -urN soundtracker-0.3.0/app/gui.c soundtracker-0.3.1/app/gui.c --- soundtracker-0.3.0/app/gui.c Fri Aug 13 19:58:34 1999 +++ soundtracker-0.3.1/app/gui.c Wed Aug 25 13:09:06 1999 @@ -103,7 +103,6 @@ static void current_sample_changed(GtkSpinButton *spin); static void current_sample_name_changed(void); static int keyevent(GtkWidget *widget, GdkEventKey *event, gpointer data); -static void handle_standard_keys(int shift, int ctrl, int alt, guint32 keyval); static void programlist_songpos_changed(GtkSpinButton *spin); static void programlist_songlength_changed(GtkSpinButton *spin); static void programlist_songpat_changed(GtkSpinButton *spin); @@ -280,94 +279,61 @@ xm_set_modified(1); } -static int -keyevent (GtkWidget *widget, - GdkEventKey *event, - gpointer data) +static gboolean +gui_handle_standard_keys (int shift, + int ctrl, + int alt, + guint32 keyval) { - static void(*handle_page_keys[])(int,int,int,guint32,gboolean) = { - track_editor_handle_keys, - instrument_editor_handle_keys, - sample_editor_handle_keys, - modinfo_page_handle_keys, - }; - gboolean pressed = (gboolean)data; - - if(capture_keys && GTK_WIDGET_VISIBLE(notebook)) { - int shift = event->state & GDK_SHIFT_MASK; - int ctrl = event->state & GDK_CONTROL_MASK; - int alt = event->state & GDK_MOD1_MASK; - - if(pressed) - handle_standard_keys(shift, ctrl, alt, event->keyval); - handle_page_keys[notebook_current_page](shift, ctrl, alt, event->keyval, pressed); - - if(pressed) - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); - else - gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_release_event"); - } else { - if(pressed) { - switch(event->keyval) { - case GDK_Tab: - case GDK_Return: - gtk_window_set_focus(GTK_WINDOW(mainwindow), NULL); - capture_keys = 1; - break; - } - } - } - - return 1; -} - -static void -handle_standard_keys (int shift, - int ctrl, - int alt, - guint32 keyval) -{ - if(menubar_handle_keys(shift, ctrl, alt, keyval)) - return; + gboolean handled = FALSE; switch (keyval) { case GDK_F1 ... GDK_F7: - if(!shift && !ctrl && !alt) + if(!shift && !ctrl && !alt) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_octave), keyval - GDK_F1); + handled = TRUE; + } break; case '1' ... '8': if(ctrl) { gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_jump), keyval - '0'); + handled = TRUE; } break; case GDK_Left: if(ctrl) { /* previous instrument */ offset_current_instrument(shift ? -5 : -1); + handled = TRUE; } else if(alt) { /* previous pattern */ offset_current_pattern(shift ? -10 : -1); + handled = TRUE; } break; case GDK_Right: if(ctrl) { /* next instrument */ offset_current_instrument(shift ? 5 : 1); + handled = TRUE; } else if(alt) { /* next pattern */ offset_current_pattern(shift ? 10 : 1); + handled = TRUE; } break; case GDK_Up: if(ctrl) { /* next sample */ offset_current_sample(shift ? 4 : 1); + handled = TRUE; } break; case GDK_Down: if(ctrl) { /* previous sample */ offset_current_sample(shift ? -4 : -1); + handled = TRUE; } break; case GDK_Alt_R: @@ -376,12 +342,16 @@ case GDK_Hyper_R: case GDK_Mode_switch: /* well... this is X :D */ play_pattern(); + handled = TRUE; break; case GDK_Control_R: case GDK_Multi_key: play_song(); + handled = TRUE; break; case ' ': + if(ctrl || alt) + break; if(!shift) { if(!GUI_ENABLED) { gui_play_stop(); @@ -390,11 +360,62 @@ /* toggle editing mode */ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(editing_toggle), !GUI_EDITING); } + handled = TRUE; } else { + // This *should* be handled by the menu bar, but sometimes I can press Shift+Space + // and nothing happens. When I change the menu key combination to Shift+A, for example, + // it works. track_editor_toggle_jazz_edit(); + handled = TRUE; } break; } + + return handled; +} + +static int +keyevent (GtkWidget *widget, + GdkEventKey *event, + gpointer data) +{ + static gboolean (*handle_page_keys[])(int,int,int,guint32,gboolean) = { + track_editor_handle_keys, + instrument_editor_handle_keys, + sample_editor_handle_keys, + modinfo_page_handle_keys, + }; + gboolean pressed = (gboolean)data; + gboolean handled = FALSE; + + if(capture_keys && GTK_WIDGET_VISIBLE(notebook)) { + int shift = event->state & GDK_SHIFT_MASK; + int ctrl = event->state & GDK_CONTROL_MASK; + int alt = event->state & GDK_MOD1_MASK; + + if(pressed) + handled = gui_handle_standard_keys(shift, ctrl, alt, event->keyval); + handled = handled || handle_page_keys[notebook_current_page](shift, ctrl, alt, event->keyval, pressed); + + if(handled) { + if(pressed) + gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); + else + gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_release_event"); + } + } else { + if(pressed) { + switch(event->keyval) { + case GDK_Tab: + case GDK_Return: + gtk_window_set_focus(GTK_WINDOW(mainwindow), NULL); + capture_keys = 1; + break; + } + } + } + + return 1; } static void diff -urN soundtracker-0.3.0/app/instrument-editor.c soundtracker-0.3.1/app/instrument-editor.c --- soundtracker-0.3.0/app/instrument-editor.c Fri Aug 13 20:23:28 1999 +++ soundtracker-0.3.1/app/instrument-editor.c Sun Aug 22 18:21:15 1999 @@ -31,10 +31,12 @@ #include "clavier.h" #include "errors.h" #include "sample-editor.h" +#include "tracker.h" static GtkWidget *volenv, *panenv, *disableboxes[3]; static GtkWidget *instrument_editor_vibtype_w[4]; static GtkWidget *clavier; +static GtkWidget *curnote_label; static STInstrument *current_instrument; @@ -92,6 +94,19 @@ return FALSE; } +static void +instrument_editor_init_samplemap (void) +{ + int key; + int sample = gui_get_current_sample(); + + for(key = 0; key < sizeof(current_instrument->samplemap) / sizeof(current_instrument->samplemap[0]); key++) { + current_instrument->samplemap[key] = sample; + } + + clavier_set_key_labels(CLAVIER(clavier), current_instrument->samplemap); +} + static gint instrument_editor_clavierkey_release_event (GtkWidget *widget, gint key, @@ -101,6 +116,24 @@ return FALSE; } +static gint +instrument_editor_clavierkey_enter_event (GtkWidget *widget, + gint key, + gpointer data) +{ + gtk_label_set_text(GTK_LABEL(curnote_label), notenames[key]); + return FALSE; +} + +static gint +instrument_editor_clavierkey_leave_event (GtkWidget *widget, + gint key, + gpointer data) +{ + gtk_label_set_text(GTK_LABEL(curnote_label), NULL); + return FALSE; +} + static void instrument_editor_load_instrument (gchar *fn) { @@ -143,7 +176,7 @@ void instrument_page_create (GtkNotebook *nb) { - GtkWidget *mainbox, *vbox, *thing, *box, *box2, *box3; + GtkWidget *mainbox, *vbox, *thing, *box, *box2, *box3, *box4, *frame; static const char *vibtypelabels[] = { N_("Sine"), N_("Square"), N_("Saw Down"), N_("Saw Up"), NULL }; mainbox = gtk_vbox_new(FALSE, 4); @@ -151,9 +184,7 @@ gtk_notebook_append_page(nb, mainbox, gtk_label_new(_("Instrument Editor"))); gtk_widget_show(mainbox); - thing = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(mainbox), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); + add_empty_vbox(mainbox); disableboxes[0] = vbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(mainbox), vbox, FALSE, TRUE, 0); @@ -242,10 +273,18 @@ gtk_widget_show(thing); // Sample map editor coming up - disableboxes[2] = box = gtk_scrolled_window_new(NULL, NULL); + disableboxes[2] = box2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(mainbox), box2, FALSE, TRUE, 0); + gtk_widget_show(box2); + + box3 = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(box2), box3, TRUE, TRUE, 0); + gtk_widget_show(box3); + + box = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(box), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_show(box); - gtk_box_pack_start(GTK_BOX(mainbox), box, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(box3), box, TRUE, TRUE, 0); clavier = clavier_new(); gtk_widget_show(clavier); @@ -264,10 +303,46 @@ gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_release", GTK_SIGNAL_FUNC (instrument_editor_clavierkey_release_event), NULL); + gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_enter", + GTK_SIGNAL_FUNC (instrument_editor_clavierkey_enter_event), + NULL); + gtk_signal_connect (GTK_OBJECT (clavier), "clavierkey_leave", + GTK_SIGNAL_FUNC (instrument_editor_clavierkey_leave_event), + NULL); + + box3 = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(box2), box3, FALSE, TRUE, 0); + gtk_widget_show(box3); + + add_empty_vbox(box3); + + thing = gtk_label_new(_("Note:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); + + frame = gtk_frame_new(NULL); + gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); + gtk_box_pack_start(GTK_BOX(box3), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + box4 = gtk_vbox_new(FALSE, 2); + gtk_widget_show(box4); + gtk_container_add (GTK_CONTAINER(frame), box4); + gtk_container_border_width(GTK_CONTAINER(box4), 4); - thing = gtk_vbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(mainbox), thing, TRUE, TRUE, 0); + curnote_label = thing = gtk_label_new(""); gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box4), thing, FALSE, TRUE, 0); + + thing = gtk_button_new_with_label(_("Initialize")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box3), thing, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (thing), "clicked", + GTK_SIGNAL_FUNC(instrument_editor_init_samplemap), NULL); + + add_empty_vbox(box3); + + add_empty_vbox(mainbox); } void @@ -284,7 +359,7 @@ return current_instrument; } -void +gboolean instrument_editor_handle_keys (int shift, int ctrl, int alt, @@ -296,7 +371,10 @@ i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); + return TRUE; } + + return FALSE; } void diff -urN soundtracker-0.3.0/app/instrument-editor.h soundtracker-0.3.1/app/instrument-editor.h --- soundtracker-0.3.0/app/instrument-editor.h Fri Aug 13 12:40:25 1999 +++ soundtracker-0.3.1/app/instrument-editor.h Sun Aug 22 18:17:46 1999 @@ -27,7 +27,7 @@ #include "xm.h" void instrument_page_create (GtkNotebook *nb); -void instrument_editor_handle_keys (int shift, +gboolean instrument_editor_handle_keys (int shift, int ctrl, int alt, guint32 keyval, diff -urN soundtracker-0.3.0/app/main.c soundtracker-0.3.1/app/main.c --- soundtracker-0.3.0/app/main.c Thu Aug 12 15:53:41 1999 +++ soundtracker-0.3.1/app/main.c Sun Aug 22 21:06:55 1999 @@ -33,6 +33,7 @@ #include "gui-settings.h" #include "audioconfig.h" #include "tips-dialog.h" +#include "menubar.h" #include #include @@ -91,6 +92,7 @@ audioconfig_load_config(); gtk_main(); + menubar_write_accels(); if(gui_settings.save_settings_on_exit) { keys_save_config(); gui_settings_save_config(); diff -urN soundtracker-0.3.0/app/menubar.c soundtracker-0.3.1/app/menubar.c --- soundtracker-0.3.0/app/menubar.c Thu Aug 12 15:56:06 1999 +++ soundtracker-0.3.1/app/menubar.c Sun Aug 22 21:18:39 1999 @@ -3,7 +3,6 @@ * The Real SoundTracker - GUI (menu bar) * * Copyright (C) 1999 Michael Krause - * GTK+ menu / dialog code Copyright (C) 1998 Peter Zelezny. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,9 +36,13 @@ #include "gui-settings.h" #include "tips-dialog.h" #include "instrument-editor.h" +#include "transposition.h" #ifdef USE_GNOME #include +#else +static GtkItemFactory *item_factory; +static GtkAccelGroup *accel_group; #endif extern ScopeGroup *scopegroup; @@ -48,11 +51,7 @@ menubar_load_save (void **a, void **b) { -#ifdef USE_GNOME gtk_widget_show(GTK_WIDGET(*b)); -#else - gtk_widget_show(GTK_WIDGET(*a)); -#endif } #ifndef USE_GNOME @@ -165,7 +164,7 @@ #ifdef USE_GNOME #define _FUNCMACRO_(name) name (GtkWidget *widget) #else -#define _FUNCMACRO_(name) name (void *dummy, GtkWidget *widget) +#define _FUNCMACRO_(name) name (void *dummy, void *dummy2, GtkWidget *widget) #endif static void @@ -199,88 +198,100 @@ #ifdef USE_GNOME static GnomeUIInfo file_menu[] = { - { GNOME_APP_UI_ITEM, N_("Open.."), NULL, menubar_load_save, &gui_loadwindow, NULL, + { GNOME_APP_UI_ITEM, N_("_Open.."), NULL, menubar_load_save, &gui_loadwindow, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 'O', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Save as.."), NULL, menubar_load_save, &gui_savewindow, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 0, 0, NULL }, + { GNOME_APP_UI_ITEM, N_("Save _as.."), NULL, menubar_load_save, &gui_savewindow, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE_AS, 'A', GDK_CONTROL_MASK, NULL }, GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("Quit"), NULL, menubar_quit_requested, NULL, NULL, - GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_QUIT, 0, GDK_CONTROL_MASK, NULL }, + { GNOME_APP_UI_ITEM, N_("_Quit"), NULL, menubar_quit_requested, NULL, NULL, + GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_QUIT, 'Q', GDK_CONTROL_MASK, NULL }, GNOMEUIINFO_END }; static GnomeUIInfo module_menu[] = { - { GNOME_APP_UI_ITEM, N_("Clear All"), NULL, menubar_clear_clicked, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("Clear _All"), NULL, menubar_clear_clicked, (gpointer)0, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Clear Patterns Only"), NULL, menubar_clear_clicked, (gpointer)1, NULL, + { GNOME_APP_UI_ITEM, N_("Clear _Patterns Only"), NULL, menubar_clear_clicked, (gpointer)1, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_NEW, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Optimize Module"), NULL, modinfo_optimize_module, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("_Optimize Module"), NULL, modinfo_optimize_module, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, GNOMEUIINFO_END }; +static GnomeUIInfo edit_menu[] = { + { GNOME_APP_UI_TOGGLEITEM, N_("_Jazz Edit Mode"), NULL, track_editor_toggle_jazz_edit, (gpointer)0, NULL, + GNOME_APP_PIXMAP_NONE, 0, ' ', GDK_SHIFT_MASK, NULL }, + + GNOMEUIINFO_SEPARATOR, + + { GNOME_APP_UI_ITEM, N_("_Transposition.."), NULL, transposition_dialog, (gpointer)0, NULL, + GNOME_APP_PIXMAP_NONE, 0, 'T', GDK_CONTROL_MASK, NULL }, + + GNOMEUIINFO_END +}; + static GnomeUIInfo pattern_menu[] = { - { GNOME_APP_UI_ITEM, N_("Find Unused Pattern"), NULL, modinfo_find_unused_pattern, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("_Find Unused Pattern"), NULL, modinfo_find_unused_pattern, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 'F', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Copy Current to Unused Pattern"), NULL, modinfo_copy_to_unused_pattern, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("_Copy Current to Unused Pattern"), NULL, modinfo_copy_to_unused_pattern, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 'G', GDK_CONTROL_MASK, NULL }, - { GNOME_APP_UI_ITEM, N_("Clear Unused Patterns"), NULL, modinfo_clear_unused_patterns, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("C_lear Unused Patterns"), NULL, modinfo_clear_unused_patterns, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Pack Patterns"), NULL, modinfo_pack_patterns, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("_Pack Patterns"), NULL, modinfo_pack_patterns, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, GNOMEUIINFO_END }; static GnomeUIInfo instrument_menu[] = { - { GNOME_APP_UI_ITEM, N_("Load XI.."), NULL, menubar_load_save, &instrument_editor_loadwindow, NULL, + { GNOME_APP_UI_ITEM, N_("_Load XI.."), NULL, menubar_load_save, &instrument_editor_loadwindow, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_OPEN, 0, 0, NULL }, GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("Delete Unused Instruments"), NULL, modinfo_delete_unused_instruments, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("_Delete Unused Instruments"), NULL, modinfo_delete_unused_instruments, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, GNOMEUIINFO_END }; -// Take care to adjust the indices menubar_init_prefs() when reordering stuff here! +// Take care to adjust the indices in menubar_init_prefs() when reordering stuff here! static GnomeUIInfo settings_menu[] = { - { GNOME_APP_UI_TOGGLEITEM, N_("Display Oscilloscopes"), 0, menubar_scopes_toggled, 0, 0, + { GNOME_APP_UI_TOGGLEITEM, N_("Display _Oscilloscopes"), 0, menubar_scopes_toggled, 0, 0, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("Use Backing Store"), 0, menubar_backing_store_toggled, 0, 0, + { GNOME_APP_UI_TOGGLEITEM, N_("Use _Backing Store"), 0, menubar_backing_store_toggled, 0, 0, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("Keyboard Configuration.."), NULL, keys_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_Keyboard Configuration.."), NULL, keys_dialog, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("Audio Configuration.."), NULL, audioconfig_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_Audio Configuration.."), NULL, audioconfig_dialog, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, - { GNOME_APP_UI_ITEM, N_("GUI Configuration.."), NULL, gui_settings_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_GUI Configuration.."), NULL, gui_settings_dialog, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PREF, 0, 0, NULL }, GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("Save Settings now"), NULL, menubar_save_settings_now, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_Save Settings now"), NULL, menubar_save_settings_now, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_SAVE, 0, 0, NULL }, - { GNOME_APP_UI_TOGGLEITEM, N_("Save Settings on Exit"), 0, menubar_save_settings_on_exit_toggled, 0, 0, + { GNOME_APP_UI_TOGGLEITEM, N_("Save Settings on _Exit"), 0, menubar_save_settings_on_exit_toggled, 0, 0, GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, GNOMEUIINFO_END }; static GnomeUIInfo help_menu[] = { - { GNOME_APP_UI_ITEM, N_("About.."), NULL, about_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_About.."), NULL, about_dialog, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT, 0, 0, NULL }, GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("Show Tips.."), NULL, tips_dialog_create, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("Show _Tips.."), NULL, tips_dialog_create, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_RED, 0, 0, NULL }, GNOMEUIINFO_END @@ -289,6 +300,7 @@ static GnomeUIInfo main_menu[] = { GNOMEUIINFO_SUBTREE (N_("_File"), file_menu), GNOMEUIINFO_SUBTREE (N_("_Module"), module_menu), + GNOMEUIINFO_SUBTREE (N_("_Edit"), edit_menu), GNOMEUIINFO_SUBTREE (N_("_Pattern"), pattern_menu), GNOMEUIINFO_SUBTREE (N_("_Instrument"), instrument_menu), GNOMEUIINFO_SUBTREE (N_("_Settings"), settings_menu), @@ -310,123 +322,71 @@ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(settings_menu[8].widget), gui_settings.save_settings_on_exit); } -#else - -typedef void (*menucallback) (GtkWidget *wid, gpointer data); - -#define M_MENU 0 -#define M_NEWMENU 1 -#define M_END 2 -#define M_SEP 3 -#define M_MENUTOG 4 - -struct mymenu -{ - int type; - char *text; - menucallback callback; - gpointer callbackdata; - GtkWidget *widget; -}; - -static struct mymenu mymenu[] = +void +menubar_write_accels () { - { M_NEWMENU, N_("File"), NULL, NULL }, - { M_MENU, N_("Open.."), (menucallback)menubar_load_save, (gpointer)&gui_loadwindow }, - { M_MENU, N_("Save.."), (menucallback)menubar_load_save, (gpointer)&gui_savewindow }, - { M_SEP, 0, 0, 0 }, - { M_MENU, N_("Quit"), (menucallback)menubar_quit_requested, NULL }, - - { M_NEWMENU, N_("Module"), NULL, NULL }, - { M_MENU, N_("Clear All"), (menucallback)menubar_clear_clicked, (gpointer)0 }, - { M_MENU, N_("Clear Song"), (menucallback)menubar_clear_clicked, (gpointer)1 }, - { M_MENU, N_("Optimize Module"), (menucallback)modinfo_optimize_module, (gpointer)0 }, - - { M_NEWMENU, N_("Pattern"), NULL, NULL }, - { M_MENU, N_("Find Unused Pattern"), (menucallback)modinfo_find_unused_pattern, (gpointer)0 }, - { M_MENU, N_("Copy Current to Unused Pattern"), (menucallback)modinfo_copy_to_unused_pattern, (gpointer)0 }, - { M_MENU, N_("Clear Unused Patterns"), (menucallback)modinfo_clear_unused_patterns, (gpointer)0 }, - { M_MENU, N_("Pack Patterns"), (menucallback)modinfo_pack_patterns, (gpointer)0 }, - - { M_NEWMENU, N_("Instrument"), NULL, NULL }, - { M_MENU, N_("Load XI.."), (menucallback)menubar_load_save, (gpointer)&instrument_editor_loadwindow }, - { M_SEP, 0, 0, 0 }, - { M_MENU, N_("Delete unused instruments"), (menucallback)modinfo_delete_unused_instruments, (gpointer)0 }, - - { M_NEWMENU, N_("Settings"), NULL, NULL }, - { M_MENUTOG, N_("Display Oscilloscopes"), (menucallback)menubar_scopes_toggled, NULL }, - { M_MENUTOG, N_("Use Backing Store"), (menucallback)menubar_backing_store_toggled, NULL }, - { M_SEP, 0, 0, 0 }, - { M_MENU, N_("Keyboard Configuration.."), (menucallback)keys_dialog, NULL }, - { M_MENU, N_("Audio Configuration.."), (menucallback)audioconfig_dialog, NULL }, - { M_MENU, N_("GUI Configuration.."), (menucallback)gui_settings_dialog, NULL }, - { M_SEP, 0, 0, 0 }, - { M_MENU, N_("Save Settings now"), (menucallback)menubar_save_settings_now, NULL }, - { M_MENUTOG, N_("Save Settings on Exit"), (menucallback)menubar_save_settings_on_exit_toggled, NULL }, - - { M_NEWMENU, N_("Help"), NULL, NULL }, - { M_MENU, N_("About.."), (menucallback)about_dialog, NULL }, - { M_SEP, 0, 0, 0 }, - { M_MENU, N_("Show Tips.."), (menucallback)tips_dialog_create, NULL }, + // GNOME does this for us +} + +#else - { M_END, 0, 0, 0 }, +/* Hmmm, casting a pointer to a guint isn't quite okay; what's up on 64-bit systems?!? :) */ +static GtkItemFactoryEntry menu_items[] = { + { N_("/_File"), NULL, NULL, 0, "" }, + { N_("/File/_Open.."), "O", menubar_load_save, (guint)&gui_loadwindow }, + { N_("/File/Save _as.."), "A", menubar_load_save, (guint)&gui_savewindow }, + { N_("/File/-"), NULL, NULL, 0, "" }, + { N_("/File/_Quit"), "Q", menubar_quit_requested, 0 }, + { N_("/_Module"), NULL, NULL, 0, "" }, + { N_("/Module/Clear _All"), NULL, menubar_clear_clicked, 0 }, + { N_("/Module/Clear _Patterns Only"), NULL, menubar_clear_clicked, 1 }, + { N_("/Module/_Optimize Module"), NULL, modinfo_optimize_module, 0 }, + { N_("/_Edit"), NULL, NULL, 0, "" }, + { N_("/Edit/_Jazz Edit Mode"), "space",track_editor_toggle_jazz_edit, 0 }, + { N_("/Edit/-"), NULL, NULL, 0, "" }, + { N_("/Edit/_Transposition.."), "T", transposition_dialog, 0 }, + { N_("/_Pattern"), NULL, NULL, 0, "" }, + { N_("/Pattern/_Find Unused Pattern"), "F", modinfo_find_unused_pattern, 0 }, + { N_("/Pattern/_Copy Current to Unused Pattern"), "G", modinfo_copy_to_unused_pattern, 0 }, + { N_("/Pattern/C_lear Unused Patterns"), NULL, modinfo_clear_unused_patterns, 0 }, + { N_("/Pattern/_Pack Patterns"), NULL, modinfo_pack_patterns, 0 }, + { N_("/_Instrument"), NULL, NULL, 0, "" }, + { N_("/Instrument/_Load XI.."), NULL, menubar_load_save, (guint)&instrument_editor_loadwindow }, + { N_("/Instrument/-"), NULL, NULL, 0, "" }, + { N_("/Instrument/_Delete Unused Instruments"), NULL, modinfo_delete_unused_instruments, 0 }, + { N_("/_Settings"), NULL, NULL, 0, "" }, + { N_("/Settings/Display _Oscilloscopes"), NULL, menubar_scopes_toggled, 0, "" }, + { N_("/Settings/Use _Backing Store"), NULL, menubar_backing_store_toggled, 0, "" }, + { N_("/Settings/-"), NULL, NULL, 0, "" }, + { N_("/Settings/_Keyboard Configuration.."), NULL, keys_dialog, 0 }, + { N_("/Settings/_Audio Configuration.."), NULL, audioconfig_dialog, 0 }, + { N_("/Settings/_GUI Configuration.."), NULL, gui_settings_dialog, 0 }, + { N_("/Settings/-"), NULL, NULL, 0, "" }, + { N_("/Settings/_Save Settings now"), NULL, menubar_save_settings_now, 0 }, + { N_("/Settings/Save Settings on _Exit"), NULL, menubar_save_settings_on_exit_toggled, 0, "" }, + { N_("/_Help"), NULL, NULL, 0, "" }, + { N_("/Help/_About.."), NULL, about_dialog, 0 }, + { N_("/Help/-"), NULL, NULL, 0, "" }, + { N_("/Help/Show _Tips.."), NULL, tips_dialog_create, 0 }, }; void menubar_init_prefs () { - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mymenu[19].widget), gui_settings.gui_display_scopes); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mymenu[20].widget), gui_settings.gui_use_backing_store); - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mymenu[27].widget), gui_settings.save_settings_on_exit); -} - -static GtkWidget * -createmenus (void) -{ - int i = 0; - GtkWidget *item; - GtkWidget *menu = 0; - GtkWidget *menu_item = 0; - GtkWidget *menu_bar = gtk_menu_bar_new(); - - while(1) { - switch(mymenu[i].type) { - case M_NEWMENU: - if(menu) gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); - menu = gtk_menu_new(); - menu_item = gtk_menu_item_new_with_label(gettext(mymenu[i].text)); - gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), menu_item); - gtk_widget_show(menu_item); - break; - case M_MENU: - item = gtk_menu_item_new_with_label(gettext(mymenu[i].text)); - if(mymenu[i].callback) - gtk_signal_connect_object(GTK_OBJECT(item), "activate", - GTK_SIGNAL_FUNC(mymenu[i].callback), mymenu[i].callbackdata); - gtk_menu_append(GTK_MENU(menu), item); - gtk_widget_show(item); - break; - case M_MENUTOG: - item = gtk_check_menu_item_new_with_label(gettext(mymenu[i].text)); - if(mymenu[i].callback) - gtk_signal_connect_object(GTK_OBJECT(item), "toggled", - GTK_SIGNAL_FUNC(mymenu[i].callback), mymenu[i].callbackdata); - gtk_menu_append(GTK_MENU(menu), item); - gtk_widget_show(item); - mymenu[i].widget = item; - break; - case M_SEP: - item = gtk_menu_item_new(); - gtk_widget_set_sensitive(item, FALSE); - gtk_menu_append(GTK_MENU(menu), item); - gtk_widget_show(item); - break; - case M_END: - if(menu) gtk_menu_item_set_submenu(GTK_MENU_ITEM(menu_item), menu); - return(menu_bar); - } - i++; - } + GtkWidget *w; + char buf[256]; + + prefs_check_prefs_dir(); + sprintf(buf, "%s/non-gnome-accels", prefs_get_prefsdir()); + + gtk_item_factory_parse_rc(buf); + + w = gtk_item_factory_get_widget(item_factory, N_("/Settings/Display Oscilloscopes")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), gui_settings.gui_display_scopes); + w = gtk_item_factory_get_widget(item_factory, N_("/Settings/Use Backing Store")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), gui_settings.gui_use_backing_store); + w = gtk_item_factory_get_widget(item_factory, N_("/Settings/Save Settings on Exit")); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w), gui_settings.save_settings_on_exit); } void @@ -434,36 +394,32 @@ { GtkWidget *thing; - thing = createmenus(); + accel_group = gtk_accel_group_new (); + + item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, + "
", + accel_group); + + gtk_item_factory_create_items (item_factory, + sizeof(menu_items) / sizeof(menu_items[0]), + menu_items, NULL); + + gtk_accel_group_attach (accel_group, GTK_OBJECT (window)); + + thing = gtk_item_factory_get_widget (item_factory, "
"); gtk_box_pack_start(GTK_BOX(destbox), thing, FALSE, TRUE, 0); gtk_widget_show(thing); } -#endif +void +menubar_write_accels () +{ + char buf[256]; -gboolean -menubar_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval) -{ - if(ctrl && !shift && !alt) { - switch(keyval) { - case 'O': case 'o': -#ifdef USE_GNOME - menubar_load_save(NULL, (void**)&gui_loadwindow); -#else - menubar_load_save((void**)&gui_loadwindow, NULL); -#endif - return 1; - case 'F': case 'f': - modinfo_find_unused_pattern(); - return 1; - case 'G': case 'g': - modinfo_copy_to_unused_pattern(); - return 1; - } - } + prefs_check_prefs_dir(); + sprintf(buf, "%s/non-gnome-accels", prefs_get_prefsdir()); - return 0; + gtk_item_factory_dump_rc(buf, NULL, TRUE); } + +#endif diff -urN soundtracker-0.3.0/app/menubar.h soundtracker-0.3.1/app/menubar.h --- soundtracker-0.3.0/app/menubar.h Sun Aug 8 15:02:23 1999 +++ soundtracker-0.3.1/app/menubar.h Sun Aug 22 21:05:58 1999 @@ -30,14 +30,10 @@ void menubar_quit_requested (void); -gboolean -menubar_handle_keys (int shift, - int ctrl, - int alt, - guint32 keyval); - void menubar_init_prefs (); +void +menubar_write_accels (); #endif /* ST_MENUBAR_H */ diff -urN soundtracker-0.3.0/app/module-info.c soundtracker-0.3.1/app/module-info.c --- soundtracker-0.3.0/app/module-info.c Fri Aug 13 20:23:28 1999 +++ soundtracker-0.3.1/app/module-info.c Sun Aug 22 18:21:15 1999 @@ -208,7 +208,7 @@ modinfo_update_all(); } -void +gboolean modinfo_page_handle_keys (int shift, int ctrl, int alt, @@ -220,7 +220,10 @@ i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { track_editor_do_the_note_key(i, pressed, keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); + return TRUE; } + + return FALSE; } void diff -urN soundtracker-0.3.0/app/module-info.h soundtracker-0.3.1/app/module-info.h --- soundtracker-0.3.0/app/module-info.h Fri Aug 13 12:45:56 1999 +++ soundtracker-0.3.1/app/module-info.h Sun Aug 22 18:17:46 1999 @@ -26,7 +26,7 @@ void modinfo_page_create (GtkNotebook *nb); -void modinfo_page_handle_keys (int shift, +gboolean modinfo_page_handle_keys (int shift, int ctrl, int alt, guint32 keyval, diff -urN soundtracker-0.3.0/app/sample-display.c soundtracker-0.3.1/app/sample-display.c --- soundtracker-0.3.0/app/sample-display.c Sun Jul 4 14:54:09 1999 +++ soundtracker-0.3.1/app/sample-display.c Sun Aug 29 17:46:43 1999 @@ -36,15 +36,19 @@ 60, 60, 140, }; -#define SELECTING_NOTHING 0 -#define SELECTING_SELECTION_START 1 -#define SELECTING_SELECTION_END 2 -#define SELECTING_LOOP_START 3 -#define SELECTING_LOOP_END 4 +enum { + SELECTING_NOTHING = 0, + SELECTING_SELECTION_START, + SELECTING_SELECTION_END, + SELECTING_LOOP_START, + SELECTING_LOOP_END, + SELECTING_PAN_WINDOW, +}; enum { SIG_SELECTION_CHANGED, SIG_LOOP_CHANGED, + SIG_WINDOW_CHANGED, LAST_SIGNAL }; @@ -107,6 +111,7 @@ s->win_start = 0; s->win_length = len; + gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], s->win_start, s->win_start + s->win_length); s->sel_start = -1; s->old_ss = s->old_se = -1; @@ -211,6 +216,7 @@ s->win_start = start; s->win_length = end - start; + gtk_signal_emit(GTK_OBJECT(s), sample_display_signals[SIG_WINDOW_CHANGED], start, end); s->complete_redraw = 1; gtk_widget_queue_draw(GTK_WIDGET(s)); @@ -551,10 +557,10 @@ } static void -handle_motion (SampleDisplay *s, - int x, - int y, - int just_clicked) +sample_display_handle_motion (SampleDisplay *s, + int x, + int y, + int just_clicked) { int ol, or; int ss = s->sel_start, se = s->sel_end; @@ -649,6 +655,23 @@ } } +// Handle middle mousebutton display window panning +static void +sample_display_handle_motion_2 (SampleDisplay *s, + int x, + int y) +{ + int new_win_start = s->selecting_wins0 + (s->selecting_x0 - x) * s->win_length / s->width; + + new_win_start = CLAMP(new_win_start, 0, s->datalen - s->win_length); + + if(new_win_start != s->win_start) { + sample_display_set_window (s, + new_win_start, + new_win_start + s->win_length); + } +} + static gint sample_display_button_press (GtkWidget *widget, GdkEventButton *event) @@ -677,6 +700,10 @@ if(!(state & GDK_SHIFT_MASK)) { if(s->button == 1) { s->selecting = SELECTING_SELECTION_START; + } else if(s->button == 2) { + s->selecting = SELECTING_PAN_WINDOW; + gdk_window_get_pointer (event->window, &s->selecting_x0, NULL, NULL); + s->selecting_wins0 = s->win_start; } else if(s->button == 3) { s->selecting = SELECTING_SELECTION_END; } @@ -691,7 +718,8 @@ } if(!s->selecting) return TRUE; - handle_motion(s, x, y, 1); + if(s->selecting != SELECTING_PAN_WINDOW) + sample_display_handle_motion(s, x, y, 1); } return TRUE; @@ -744,7 +772,9 @@ } if(((state & GDK_BUTTON1_MASK) && s->button == 1) || ((state & GDK_BUTTON3_MASK) && s->button == 3)) { - handle_motion(SAMPLE_DISPLAY(widget), x, y, 0); + sample_display_handle_motion(SAMPLE_DISPLAY(widget), x, y, 0); + } else if((state & GDK_BUTTON2_MASK) && s->button == 2) { + sample_display_handle_motion_2(SAMPLE_DISPLAY(widget), x, y); } else { s->selecting = 0; } @@ -802,6 +832,14 @@ GTK_TYPE_NONE, 2, GTK_TYPE_INT, GTK_TYPE_INT); + sample_display_signals[SIG_WINDOW_CHANGED] = gtk_signal_new ("window_changed", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET(SampleDisplayClass, window_changed), + my_2ints_marshal, + GTK_TYPE_NONE, 2, + GTK_TYPE_INT, + GTK_TYPE_INT); gtk_object_class_add_signals(object_class, sample_display_signals, LAST_SIGNAL); diff -urN soundtracker-0.3.0/app/sample-display.h soundtracker-0.3.1/app/sample-display.h --- soundtracker-0.3.0/app/sample-display.h Tue Jun 29 00:03:01 1999 +++ soundtracker-0.3.1/app/sample-display.h Sun Aug 29 17:44:55 1999 @@ -68,6 +68,8 @@ int old_ss, old_se; int button; /* button index which started the selection */ int selecting; + int selecting_x0; /* the coordinate where the mouse was clicked */ + int selecting_wins0; /* loop points */ int loop_start, loop_end; /* offsets into the sample data or -1 */ @@ -81,6 +83,7 @@ void (*selection_changed)(SampleDisplay *s, int start, int end); void (*loop_changed)(SampleDisplay *s, int start, int end); + void (*window_changed)(SampleDisplay *s, int start, int end); }; guint sample_display_get_type (void); diff -urN soundtracker-0.3.0/app/sample-editor.c soundtracker-0.3.1/app/sample-editor.c --- soundtracker-0.3.0/app/sample-editor.c Fri Aug 13 13:45:12 1999 +++ soundtracker-0.3.1/app/sample-editor.c Sun Aug 29 17:50:17 1999 @@ -63,16 +63,22 @@ static GtkWidget *spin_volume, *spin_panning, *spin_finetune, *spin_relnote; static GtkWidget *loadwindow, *savewindow, *savebutton; static SampleDisplay *sampledisplay; +static GtkWidget *sample_editor_hscrollbar; static GtkWidget *loopradio[3], *resolution_radio[2]; static GtkWidget *spin_loopstart, *spin_loopend, *spin_selstart, *spin_selend; static GtkWidget *box_loop, *box_params, *box_sel; static GtkWidget *label_slength; -static SampleDisplay *monitorscope; -static GtkWidget *cancelbutton, *okbutton, *startsamplingbutton; +// = Volume ramping dialog + +static GtkWidget *volrampwindow = NULL; +static GtkWidget *sample_editor_volramp_spin_w[2]; // = Sampler variables +static SampleDisplay *monitorscope; +static GtkWidget *cancelbutton, *okbutton, *startsamplingbutton; + st_in_driver *sampling_driver = NULL; void *sampling_driver_object = NULL; @@ -89,7 +95,7 @@ static int currentoffs; static int recordedlen, sampling; -// = Editing variables +// = Editing operations variables static void *copybuffer = NULL; static int copybufferlen; @@ -108,6 +114,7 @@ static void sample_editor_spin_selection_changed(void); static void sample_editor_display_loop_changed(SampleDisplay *, int start, int end); static void sample_editor_display_selection_changed(SampleDisplay *, int start, int end); +static void sample_editor_display_window_changed(SampleDisplay *, int start, int end); static void sample_editor_reset_selection_clicked(void); static void sample_editor_clear_clicked(void); static void sample_editor_show_all_clicked(void); @@ -126,6 +133,10 @@ static void sample_editor_load_wav(void); static void sample_editor_save_wav(void); +static void sample_editor_open_volume_ramp_dialog(void); +static void sample_editor_close_volume_ramp_dialog(void); +static void sample_editor_perform_ramp(GtkWidget *w, gpointer data); + static void sample_editor_lock_sample (void) { @@ -142,98 +153,27 @@ } static void -sampler_page_enable_widgets (int enable) -{ -// printf("%d %d\n", GTK_IS_WIDGET(okbutton), GTK_IS_WIDGET(startsamplingbutton)); - gtk_widget_set_sensitive(okbutton, !enable); - gtk_widget_set_sensitive(startsamplingbutton, enable); -} - -static void sample_editor_load_save_clicked (GtkWidget *widget, GtkWidget *fs) { gtk_widget_show(fs); } -GtkWidget* -sample_editor_create_sampling_widgets (void) -{ - GtkWidget *box, *thing, *box2; - - box = gtk_vbox_new(FALSE, 2); - - thing = sample_display_new(FALSE); - gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - monitorscope = SAMPLE_DISPLAY(thing); - - box2 = gtk_hbox_new(TRUE, 4); - gtk_box_pack_start(GTK_BOX(box), box2, FALSE, TRUE, 0); - gtk_widget_show(box2); - - thing = gtk_button_new_with_label(_("OK")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_ok_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_set_sensitive(thing, 0); - gtk_widget_show(thing); - okbutton = thing; - - thing = gtk_button_new_with_label(_("Start sampling")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_start_sampling_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - startsamplingbutton = thing; - - thing = gtk_button_new_with_label(_("Cancel")); - gtk_signal_connect(GTK_OBJECT(thing), "clicked", - GTK_SIGNAL_FUNC(sample_editor_cancel_clicked), NULL); - gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); - gtk_widget_show(thing); - cancelbutton = thing; - - return box; -} - -static int -sample_editor_find_current_toggle (GtkWidget **widgets, - int count) -{ - int i; - for (i = 0; i < count; i++) - if (GTK_TOGGLE_BUTTON(*widgets++)->active) - return i; - g_assert_not_reached(); - return -1; -} - -static void -sample_editor_make_radio_group (const char **labels, GtkWidget *tobox, - GtkWidget **saveptr, gint t1, gint t2, - void (*sigfunc) (void)) -{ - GtkWidget *thing = NULL; - - while (*labels) { - thing = gtk_radio_button_new_with_label ((thing - ? gtk_radio_button_group (GTK_RADIO_BUTTON (thing)) - : 0), - *labels++); - *saveptr++ = thing; - gtk_widget_show (thing); - gtk_box_pack_start (GTK_BOX (tobox), thing, t1, t2, 0); - gtk_signal_connect (GTK_OBJECT (thing), "clicked", (GtkSignalFunc) sigfunc, NULL); - } -} - void sample_editor_page_create (GtkNotebook *nb) { GtkWidget *box, *thing, *hbox, *vbox; - char *looplabels[] = { _("No loop"), _("Amiga"), _("PingPong"), NULL }; - char *resolutionlabels[] = { _("8 bits"), _("16 bits"), NULL }; + static const char *looplabels[] = { + N_("No loop"), + N_("Amiga"), + N_("PingPong"), + NULL + }; + static const char *resolutionlabels[] = { + N_("8 bits"), + N_("16 bits"), + NULL + }; box = gtk_vbox_new(FALSE, 2); gtk_container_border_width(GTK_CONTAINER(box), 10); @@ -247,9 +187,15 @@ GTK_SIGNAL_FUNC(sample_editor_display_loop_changed), NULL); gtk_signal_connect(GTK_OBJECT(thing), "selection_changed", GTK_SIGNAL_FUNC(sample_editor_display_selection_changed), NULL); + gtk_signal_connect(GTK_OBJECT(thing), "window_changed", + GTK_SIGNAL_FUNC(sample_editor_display_window_changed), NULL); sampledisplay = SAMPLE_DISPLAY(thing); sample_display_enable_zero_line(SAMPLE_DISPLAY(thing), TRUE); + sample_editor_hscrollbar = gtk_hscrollbar_new(NULL); + gtk_widget_show(sample_editor_hscrollbar); + gtk_box_pack_start(GTK_BOX(box), sample_editor_hscrollbar, FALSE, TRUE, 0); + hbox = gtk_hbox_new(FALSE, 4); gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, TRUE, 0); gtk_widget_show(hbox); @@ -258,7 +204,7 @@ gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, TRUE, 0); - sample_editor_make_radio_group((const char**)looplabels, vbox, loopradio, FALSE, FALSE, sample_editor_loopradio_changed); + make_radio_group((const char**)looplabels, vbox, loopradio, FALSE, FALSE, sample_editor_loopradio_changed); gui_put_labelled_spin_button(vbox, _("Start"), 0, 0, &spin_loopstart, sample_editor_loop_changed, NULL); gui_put_labelled_spin_button(vbox, _("End"), 0, 0, &spin_loopend, sample_editor_loop_changed, NULL); sample_editor_loopradio_changed(); @@ -274,7 +220,7 @@ gui_put_labelled_spin_button(vbox, _("Volume"), 0, 64, &spin_volume, sample_editor_spin_volume_changed, NULL); gui_put_labelled_spin_button(vbox, _("Panning"), -128, 127, &spin_panning, sample_editor_spin_panning_changed, NULL); gui_put_labelled_spin_button(vbox, _("Finetune"), -128, 127, &spin_finetune, sample_editor_spin_finetune_changed, NULL); - sample_editor_make_radio_group((const char**)resolutionlabels, vbox, resolution_radio, FALSE, FALSE, sample_editor_resolution_changed); + make_radio_group((const char**)resolutionlabels, vbox, resolution_radio, FALSE, FALSE, sample_editor_resolution_changed); thing = gtk_vseparator_new(); gtk_widget_show(thing); @@ -293,7 +239,7 @@ GTK_SIGNAL_FUNC(sample_editor_reset_selection_clicked), NULL); gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); gtk_widget_show(thing); - gui_put_labelled_spin_button(vbox, _("Relnote"), -128, 127, &spin_relnote, sample_editor_spin_relnote_changed, NULL); + gui_put_labelled_spin_button(vbox, _("RelNote"), -128, 127, &spin_relnote, sample_editor_spin_relnote_changed, NULL); label_slength = thing = gtk_label_new(_("Length: 0")); gtk_widget_show(thing); gtk_box_pack_start(GTK_BOX(vbox), thing, FALSE, TRUE, 0); @@ -308,9 +254,8 @@ #ifndef NO_AUDIOFILE loadwindow = file_selection_create(_("Load Sample.."), sample_editor_load_wav); -#endif savewindow = file_selection_create(_("Save WAV.."), sample_editor_save_wav); - +#endif thing = gtk_button_new_with_label(_("Load Sample")); gtk_signal_connect(GTK_OBJECT(thing), "clicked", @@ -327,6 +272,9 @@ gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); gtk_widget_show(thing); savebutton = thing; +#ifdef NO_AUDIOFILE + gtk_widget_set_sensitive(thing, 0); +#endif thing = gtk_button_new_with_label(_("Clear")); gtk_signal_connect(GTK_OBJECT(thing), "clicked", @@ -340,6 +288,12 @@ gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); gtk_widget_show(thing); + thing = gtk_button_new_with_label(_("Volume Ramp")); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_open_volume_ramp_dialog), NULL); + gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); @@ -368,6 +322,13 @@ gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); gtk_widget_show(thing); + thing = gtk_button_new_with_label(_("Resample")); +/* gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_monitor_clicked), NULL); +*/ gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + gtk_widget_set_sensitive(thing, 0); + vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(vbox); gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); @@ -395,6 +356,13 @@ GTK_SIGNAL_FUNC(sample_editor_paste_clicked), NULL); gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); gtk_widget_show(thing); + + thing = gtk_button_new_with_label(_("Filter")); +/* gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_filter_clicked), NULL); +*/ gtk_box_pack_start(GTK_BOX(vbox), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + gtk_widget_set_sensitive(thing, 0); } static void @@ -485,7 +453,9 @@ gtk_widget_set_sensitive(box_loop, 1); gtk_widget_set_sensitive(box_params, 1); gtk_widget_set_sensitive(box_sel, 1); +#ifndef NO_AUDIOFILE gtk_widget_set_sensitive(savebutton, 1); +#endif sprintf(buf, _("Length: %d"), s->length); gtk_label_set(GTK_LABEL(label_slength), buf); @@ -509,7 +479,7 @@ xm_set_modified(m); } -void +gboolean sample_editor_handle_keys (int shift, int ctrl, int alt, @@ -519,7 +489,7 @@ int i; if(!pressed) - return; + return FALSE; i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); if(i != -1 && KEYS_MEANING_TYPE(i) == KEYS_MEANING_NOTE) { @@ -527,7 +497,10 @@ if(i < 96 && current_sample != NULL) { gui_play_note_full(tracker->cursor_ch, i, current_sample, 0); } + return TRUE; } + + return FALSE; } void @@ -665,9 +638,32 @@ } static void +sample_editor_hscrollbar_changed (GtkAdjustment *adj) +{ + sample_display_set_window(sampledisplay, + adj->value, + adj->value + sampledisplay->win_length); +} + +static void +sample_editor_display_window_changed (SampleDisplay *sample_display, + int start, + int end) +{ + if(current_sample == NULL) + return; + + gui_update_range_adjustment(GTK_RANGE(sample_editor_hscrollbar), + start, + current_sample->sample.length, + end - start, + sample_editor_hscrollbar_changed); +} + +static void sample_editor_loopradio_changed (void) { - int n = sample_editor_find_current_toggle(loopradio, 3); + int n = find_current_toggle(loopradio, 3); gtk_widget_set_sensitive(spin_loopstart, n != 0); gtk_widget_set_sensitive(spin_loopend, n != 0); @@ -724,7 +720,7 @@ void *newdata; STSample *sts = current_sample; st_mixer_sample_info *s; - int n = sample_editor_find_current_toggle(resolution_radio, 2); + int n = find_current_toggle(resolution_radio, 2); if(!sts) return; @@ -1003,26 +999,6 @@ xm_set_modified(1); } -#if 0 -/* struct wav_hdr borrowed from sidplay by Michael Schwendt */ -struct wav_hdr // little endian -{ -0 gint8 main_chunk[4]; // 'RIFF' -4 guint32 length; // filelength -8 gint8 chunk_type[4]; // 'WAVE' -12 gint8 sub_chunk[4]; // 'fmt ' -16 guint32 clength; // length of sub_chunk, always 16 bytes -20 guint16 format; // currently always = 1 = PCM-Code -22 guint16 modus; // 1 = mono, 2 = stereo -24 guint32 samplefreq; // sample-frequency -28 guint32 bytespersec; // frequency * bytespersmpl -32 guint16 bytespersmpl; // bytes per sample; 1 = 8-bit, 2 = 16-bit -34 guint16 bitspersmpl; -36 gint8 data_chunk[4]; // keyword, begin of data chunk; = 'data' -40 guint32 data_length; // length of data -}; -#endif - static void sample_editor_modify_wav_sample (STSample *s) { @@ -1118,17 +1094,14 @@ free(sbuf); errnobuf: afCloseFile(file); - return; } -#endif /* NO_AUDIOFILE */ static void sample_editor_save_wav (void) { const gchar *fn; - FILE *f; - int type; - guint8 wh[44]; + AFfilehandle outfile; + AFfilesetup outfilesetup; gtk_widget_hide(savewindow); @@ -1136,49 +1109,83 @@ g_return_if_fail(current_sample->sample.data != NULL); fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION(savewindow)); - f = fopen(fn, "w"); - if(!f) { + + outfilesetup = afNewFileSetup(); + afInitFileFormat(outfilesetup, AF_FILE_WAVE); + afInitChannels(outfilesetup, AF_DEFAULT_TRACK, 1); + afInitSampleFormat(outfilesetup, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, current_sample->sample.type); + outfile = afOpenFile(fn, "w", outfilesetup); + afFreeFileSetup(outfilesetup); + + if(!outfile) { error_error(_("Can't open file for writing.")); return; } - type = mixer_sample_word_length(¤t_sample->sample); - - memset(wh, 0, sizeof(wh)); - memcpy(wh + 0, "RIFF", 4); - memcpy(wh + 8, "WAVE", 4); - memcpy(wh + 12, "fmt ", 4); - put_le_32(wh + 16, 16); - put_le_16(wh + 20, 1); - put_le_16(wh + 22, 1); - put_le_32(wh + 24, 44100); - put_le_32(wh + 28, 44100 * type); - put_le_16(wh + 32, type); - put_le_16(wh + 34, type * 8); - memcpy(wh + 36, "data", 4); - put_le_32(wh + 40, current_sample->sample.length * type); - put_le_32(wh + 4, current_sample->sample.length * type + 44 - 8); + sample_editor_lock_sample(); - fwrite(wh, 1, sizeof(wh), f); + if(current_sample->sample.type == 8) + sample_editor_modify_wav_sample(current_sample); - sample_editor_lock_sample(); - sample_editor_modify_wav_sample(current_sample); + afWriteFrames(outfile, AF_DEFAULT_TRACK, current_sample->sample.data, current_sample->sample.length); + afCloseFile(outfile); - fwrite(current_sample->sample.data, 1, current_sample->sample.length * type, f); + if(current_sample->sample.type == 8) + sample_editor_modify_wav_sample(current_sample); - sample_editor_modify_wav_sample(current_sample); sample_editor_unlock_sample(); +} +#endif /* NO_AUDIOFILE */ - if(ferror(f)) { - error_error(_("Error while writing.")); - } +/* ============================ Sampling functions coming up -------- */ - fclose(f); +GtkWidget* +sample_editor_create_sampling_widgets (void) +{ + GtkWidget *box, *thing, *box2; - return; + box = gtk_vbox_new(FALSE, 2); + + thing = sample_display_new(FALSE); + gtk_box_pack_start(GTK_BOX(box), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + monitorscope = SAMPLE_DISPLAY(thing); + + box2 = gtk_hbox_new(TRUE, 4); + gtk_box_pack_start(GTK_BOX(box), box2, FALSE, TRUE, 0); + gtk_widget_show(box2); + + thing = gtk_button_new_with_label(_("OK")); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_ok_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); + gtk_widget_set_sensitive(thing, 0); + gtk_widget_show(thing); + okbutton = thing; + + thing = gtk_button_new_with_label(_("Start sampling")); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_start_sampling_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + startsamplingbutton = thing; + + thing = gtk_button_new_with_label(_("Cancel")); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_cancel_clicked), NULL); + gtk_box_pack_start(GTK_BOX(box2), thing, TRUE, TRUE, 0); + gtk_widget_show(thing); + cancelbutton = thing; + + return box; } -/* ============================ Sampling functions coming up -------- */ +static void +sampler_page_enable_widgets (int enable) +{ + gtk_widget_set_sensitive(okbutton, !enable); + gtk_widget_set_sensitive(startsamplingbutton, enable); +} static void sample_editor_monitor_clicked (void) @@ -1297,8 +1304,6 @@ gtk_widget_destroy(samplingwindow); samplingwindow = NULL; - sampler_page_enable_widgets(TRUE); - g_return_if_fail(current_sample != NULL); sample_editor_lock_sample(); @@ -1344,4 +1349,159 @@ { sampler_page_enable_widgets(FALSE); sampling = 1; +} + +/* ==================== VOLUME RAMPING DIALOG =================== */ + +static void +sample_editor_open_volume_ramp_dialog (void) +{ + GtkWidget *mainbox, *box1, *thing; + int i; + const char *labels1[] = { + _("Normalize"), + _("Execute"), + _("Close") + }; + + if(volrampwindow != NULL) { + gdk_window_raise(volrampwindow->window); + return; + } + +#ifdef USE_GNOME + volrampwindow = gnome_app_new("SoundTracker", _("Volume Ramping")); +#else + volrampwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(volrampwindow), _("Volume Ramping")); +#endif + gtk_signal_connect (GTK_OBJECT (volrampwindow), "delete_event", + GTK_SIGNAL_FUNC (sample_editor_close_volume_ramp_dialog), NULL); + +// gtk_window_set_modal(GTK_WINDOW(volrampwindow), TRUE); + gtk_window_set_transient_for(GTK_WINDOW(volrampwindow), GTK_WINDOW(mainwindow)); + + mainbox = gtk_vbox_new(FALSE, 2); + gtk_container_border_width(GTK_CONTAINER(mainbox), 4); +#ifdef USE_GNOME + gnome_app_set_contents(GNOME_APP(volrampwindow), mainbox); +#else + gtk_container_add(GTK_CONTAINER(volrampwindow), mainbox); +#endif + gtk_widget_show(mainbox); + + thing = gtk_label_new(_("Perform linear volume fade on Selection")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + thing = gtk_hseparator_new(); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(mainbox), thing, FALSE, TRUE, 0); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); + + gui_put_labelled_spin_button(box1, _("Left [%]:"), 0, 1000, &sample_editor_volramp_spin_w[0], NULL, NULL); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0]), 100); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Right [%]:"), 0, 1000, &sample_editor_volramp_spin_w[1], NULL, NULL); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1]), 100); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); + + for(i = 0; i < 3; i++) { + thing = gtk_button_new_with_label(labels1[i]); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(sample_editor_perform_ramp), (gpointer)i); + } + + gtk_widget_show (volrampwindow); +} + +static void +sample_editor_close_volume_ramp_dialog (void) +{ + gtk_widget_destroy(volrampwindow); + volrampwindow = NULL; +} + +static void +sample_editor_perform_ramp (GtkWidget *w, + gpointer data) +{ + int action = (int)data; + double left, right; + int ss = sampledisplay->sel_start, se = sampledisplay->sel_end; + int mult, i; + + if(action == 2 || !current_sample || ss == -1) { + sample_editor_close_volume_ramp_dialog(); + return; + } + + mult = mixer_sample_word_length(¤t_sample->sample); + + if(action == 0) { + // Find maximum amplitude + int m; + if(mult == 1) { + gint8 *p = current_sample->sample.data; + int q; + p += ss; + for(i = 0, m = 0; i < se - ss; i++) { + q = *p++; + q = ABS(q); + if(q > m) + m = q; + } + left = right = (double)0x7f / m; + } else { + gint16 *p = current_sample->sample.data; + int q; + p += ss; + for(i = 0, m = 0; i < se - ss; i++) { + q = *p++; + q = ABS(q); + if(q > m) + m = q; + } + left = right = (double)0x7fff / m; + } + } else { + left = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[0])) / 100; + right = gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(sample_editor_volramp_spin_w[1])) / 100; + } + + // Now perform the actual operation + sample_editor_lock_sample(); + + if(mult == 1) { + gint8 *p = current_sample->sample.data; + p += ss; + for(i = 0; i < se - ss; i++) { + double q = *p; + q *= left + i * (right - left) / (se - ss); + *p++ = CLAMP((int)q, -128, +127); + } + } else { + gint16 *p = current_sample->sample.data; + p += ss; + for(i = 0; i < se - ss; i++) { + double q = *p; + q *= left + i * (right - left) / (se - ss); + *p++ = CLAMP((int)q, -32768, +32767); + } + } + + xm_set_modified(1); + sample_editor_unlock_sample(); + sample_editor_update(); + sample_display_set_selection(sampledisplay, ss, se); } diff -urN soundtracker-0.3.0/app/sample-editor.h soundtracker-0.3.1/app/sample-editor.h --- soundtracker-0.3.0/app/sample-editor.h Fri Aug 13 12:40:50 1999 +++ soundtracker-0.3.1/app/sample-editor.h Sun Aug 22 18:17:46 1999 @@ -28,7 +28,7 @@ void sample_editor_page_create (GtkNotebook *nb); -void sample_editor_handle_keys (int shift, +gboolean sample_editor_handle_keys (int shift, int ctrl, int alt, guint32 keyval, diff -urN soundtracker-0.3.0/app/track-editor.c soundtracker-0.3.1/app/track-editor.c --- soundtracker-0.3.0/app/track-editor.c Fri Aug 13 20:44:51 1999 +++ soundtracker-0.3.1/app/track-editor.c Sun Aug 22 18:21:39 1999 @@ -202,7 +202,7 @@ } } -void +gboolean track_editor_handle_keys (int shift, int ctrl, int alt, @@ -211,6 +211,7 @@ { int i, m; Tracker *t = tracker; + gboolean handled = FALSE; if(t->cursor_item == 0) { m = i = keys_get_key_meaning(keyval, ENCODE_MODIFIERS(shift, ctrl, alt)); @@ -241,21 +242,25 @@ } break; } - return; + return TRUE; } } if(!pressed) - return; + return FALSE; switch (keyval) { case GDK_Up: - if(GUI_ENABLED && !ctrl && !shift && !alt) + if(GUI_ENABLED && !ctrl && !shift && !alt) { tracker_set_patpos(t, t->patpos > 0 ? t->patpos - 1 : t->curpattern->length - 1); + handled = TRUE; + } break; case GDK_Down: - if(GUI_ENABLED && !ctrl && !shift && !alt) + if(GUI_ENABLED && !ctrl && !shift && !alt) { tracker_set_patpos(t, t->patpos < t->curpattern->length - 1 ? t->patpos + 1 : 0); + handled = TRUE; + } break; case GDK_Page_Up: if(!GUI_ENABLED) @@ -264,6 +269,7 @@ tracker_set_patpos(t, t->patpos - 16); else tracker_set_patpos(t, 0); + handled = TRUE; break; case GDK_Page_Down: if(!GUI_ENABLED) @@ -272,6 +278,7 @@ tracker_set_patpos(t, t->patpos + 16); else tracker_set_patpos(t, t->curpattern->length - 1); + handled = TRUE; break; case GDK_F3 ... GDK_F5: if(shift) { @@ -279,6 +286,7 @@ int l = t->curpattern->length; XMNote *n = t->curpattern->channels[t->cursor_ch]; + handled = TRUE; switch(keyval) { case GDK_F3: /* cut track */ @@ -312,12 +320,16 @@ xm->modified = 1; tracker_redraw(t); break; + default: + handled = FALSE; + break; } break; } else if(alt) { /* pattern operations */ XMPattern *p = t->curpattern; + handled = TRUE; switch(keyval) { case GDK_F3: /* cut pattern */ @@ -355,41 +367,62 @@ } xm->modified = 1; break; + default: + handled = FALSE; + break; } break; } break; case GDK_F9: - if(GUI_ENABLED) + case GDK_Home: + if(GUI_ENABLED) { tracker_set_patpos(t, 0); + handled = TRUE; + } break; case GDK_F10: - if(GUI_ENABLED) + if(GUI_ENABLED) { tracker_set_patpos(t, t->curpattern->length/4); + handled = TRUE; + } break; case GDK_F11: - if(GUI_ENABLED) + if(GUI_ENABLED) { tracker_set_patpos(t, t->curpattern->length/2); + handled = TRUE; + } break; case GDK_F12: - if(GUI_ENABLED) + if(GUI_ENABLED) { tracker_set_patpos(t, 3*t->curpattern->length/4); + handled = TRUE; + } + break; + case GDK_End: + if(GUI_ENABLED) { + tracker_set_patpos(t, t->curpattern->length - 1); + handled = TRUE; + } break; case GDK_Left: if(!shift && !ctrl && !alt) { /* cursor left */ tracker_step_cursor_item(t, -1); + handled = TRUE; } break; case GDK_Right: if(!shift && !ctrl && !alt) { /* cursor right */ tracker_step_cursor_item(t, 1); + handled = TRUE; } break; case GDK_Tab: case GDK_ISO_Left_Tab: tracker_step_cursor_channel(t, shift ? -1 : 1); + handled = TRUE; break; case GDK_Shift_R: /* record pattern */ @@ -403,14 +436,17 @@ tracker_redraw_current_row(t); tracker_step_cursor_row(t, gui_get_current_jump_value()); xm->modified = 1; + handled = TRUE; } break; default: if(!ctrl) { if(GTK_TOGGLE_BUTTON(editing_toggle)->active) { track_editor_handle_column_input(t, keyval); + handled = TRUE; } } else { + handled = TRUE; switch(keyval) { case 'b': case 'B': /* start marking a block */ @@ -448,10 +484,15 @@ tracker_set_patpos(t, (t->patpos + block_length) % t->curpattern->length); tracker_redraw(t); break; + default: + handled = FALSE; + break; } } break; } + + return handled; } static void diff -urN soundtracker-0.3.0/app/track-editor.h soundtracker-0.3.1/app/track-editor.h --- soundtracker-0.3.0/app/track-editor.h Fri Aug 13 20:22:04 1999 +++ soundtracker-0.3.1/app/track-editor.h Sun Aug 22 18:17:46 1999 @@ -34,7 +34,7 @@ void tracker_page_create (GtkNotebook *nb); -void track_editor_handle_keys (int shift, +gboolean track_editor_handle_keys (int shift, int ctrl, int alt, guint32 keyval, diff -urN soundtracker-0.3.0/app/tracker.c soundtracker-0.3.1/app/tracker.c --- soundtracker-0.3.0/app/tracker.c Sat Aug 7 11:00:37 1999 +++ soundtracker-0.3.1/app/tracker.c Sat Aug 21 19:13:54 1999 @@ -35,7 +35,7 @@ //#define xm ASDFASDF -static const char * const notenames[96] = { +const char * const notenames[96] = { "C-0", "C#0", "D-0", "D#0", "E-0", "F-0", "F#0", "G-0", "G#0", "A-0", "A#0", "H-0", "C-1", "C#1", "D-1", "D#1", "E-1", "F-1", "F#1", "G-1", "G#1", "A-1", "A#1", "H-1", "C-2", "C#2", "D-2", "D#2", "E-2", "F-2", "F#2", "G-2", "G#2", "A-2", "A#2", "H-2", diff -urN soundtracker-0.3.0/app/tracker.h soundtracker-0.3.1/app/tracker.h --- soundtracker-0.3.0/app/tracker.h Tue Jun 22 12:58:09 1999 +++ soundtracker-0.3.1/app/tracker.h Sat Aug 21 19:13:54 1999 @@ -78,6 +78,8 @@ void (*xpanning)(Tracker *t, int leftchan, int numchans, int dispchans); }; +extern const char * const notenames[96]; + guint tracker_get_type (void); GtkWidget* tracker_new (void); diff -urN soundtracker-0.3.0/app/transposition.c soundtracker-0.3.1/app/transposition.c --- soundtracker-0.3.0/app/transposition.c Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.1/app/transposition.c Sun Aug 29 11:49:29 1999 @@ -0,0 +1,301 @@ + +/* + * The Real SoundTracker - Transposition dialog + * + * Copyright (C) 1999 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "i18n.h" +#include "transposition.h" +#include "main.h" +#include "xm.h" +#include "gui-subs.h" +#include "gui.h" +#include "st-subs.h" +#include "track-editor.h" + +static GtkWidget *transposition_window = NULL, + *transposition_scope_w[4], + *transposition_instrument_mode_w[2], + *transposition_instrument_w[2]; + +static void +transposition_close_requested (void) +{ + gtk_widget_destroy(transposition_window); + transposition_window = NULL; +} + +static void +transposition_for_each (void (*function)(XMNote *track, int patlen, int data), + int functiondata) +{ + int i, j; + int mode = find_current_toggle(transposition_scope_w, 4); + + switch(mode) { + case 0: // Whole Song + for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { + if(st_is_pattern_used_in_song(xm, i)) { + for(j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + } + } + break; + case 1: // All Patterns + for(i = 0; i < sizeof(xm->patterns) / sizeof(xm->patterns[0]); i++) { + for(j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + } + break; + case 2: // Current Pattern + i = gui_get_current_pattern(); + for(j = 0; j < xm->num_channels; j++) { + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + } + break; + case 3: // Current Track + i = gui_get_current_pattern(); + j = tracker->cursor_ch; + function(xm->patterns[i].channels[j], xm->patterns[i].length, functiondata); + break; + } +} + +static void +transposition_transpose_notes_sub (XMNote *track, + int patlen, + int add) +{ + gboolean all_instruments = find_current_toggle(transposition_instrument_mode_w, 2); + int current_instrument = gui_get_current_instrument(); + + while(patlen--) { + if(track->note != 0 && (all_instruments || current_instrument == track->instrument)) { + track->note = CLAMP(track->note + add, 1, 96); + } + track++; + } +} + +static void +transposition_change_instruments_sub (XMNote *track, + int patlen, + int mode) +{ + int i1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[0])); + int i2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(transposition_instrument_w[1])); + + while(patlen--) { + if(track->instrument == i1) + track->instrument = i2; + else if(mode == 0 && track->instrument == i2) + track->instrument = i1; + track++; + } +} + +static void +transposition_transpose_notes (GtkWidget *w, + gpointer data) +{ + int add = 0; + + switch((int)data) { + case 0: + add = +1; + break; + case 1: + add = -1; + break; + case 2: + add = +12; + break; + case 3: + add = -12; + break; + } + + transposition_for_each (transposition_transpose_notes_sub, add); + tracker_redraw(tracker); + xm_set_modified(1); +} + +static void +transposition_change_instruments (GtkWidget *w, + gpointer data) +{ + int b = (int)data; + + transposition_for_each (transposition_change_instruments_sub, b); + tracker_redraw(tracker); + xm_set_modified(1); +} + +static void +transposition_current_instrument_clicked (GtkWidget *w, + gpointer data) +{ + gtk_spin_button_set_value(GTK_SPIN_BUTTON(transposition_instrument_w[(int)data]), + gui_get_current_instrument()); +} + +void +transposition_dialog (void) +{ + int i; + GtkWidget *mainbox, *thing, *box1, *box2, *frame; + const char *labels1[] = { + _("Whole Song"), + _("All Patterns"), + _("Current Pattern"), + _("Current Track"), + NULL + }; + const char *labels2[] = { + _("Current Instrument"), + _("All Instruments"), + NULL + }; + const char *labels3[] = { + _("Half note up"), + _("Half note down"), + _("Octave up"), + _("Octave down") + }; + const char *labels4[] = { + _("Exchange 1 <-> 2"), + _("Change 1 -> 2") + }; + + if(transposition_window != NULL) { + gdk_window_raise(transposition_window->window); + return; + } + +#ifdef USE_GNOME + transposition_window = gnome_app_new("SoundTracker", _("Transposition Tools")); +#else + transposition_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(transposition_window), _("Transposition Tools")); +#endif + gtk_signal_connect (GTK_OBJECT (transposition_window), "delete_event", + GTK_SIGNAL_FUNC (transposition_close_requested), NULL); + + gtk_window_set_transient_for(GTK_WINDOW(transposition_window), GTK_WINDOW(mainwindow)); + + mainbox = gtk_vbox_new(FALSE, 2); + gtk_container_border_width(GTK_CONTAINER(mainbox), 4); +#ifdef USE_GNOME + gnome_app_set_contents(GNOME_APP(transposition_window), mainbox); +#else + gtk_container_add(GTK_CONTAINER(transposition_window), mainbox); +#endif + gtk_widget_show(mainbox); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(mainbox), box1, FALSE, TRUE, 0); + + thing = gtk_label_new(_("Scope of the operation:")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + add_empty_hbox(box1); + make_radio_group_full(labels1, box1, transposition_scope_w, FALSE, TRUE, NULL, NULL); + + frame = gtk_frame_new(NULL); + gtk_frame_set_label(GTK_FRAME(frame), _("Note Transposition")); + gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + box2 = gtk_vbox_new(FALSE, 2); + gtk_widget_show(box2); + gtk_container_add (GTK_CONTAINER(frame), box2); + gtk_container_border_width(GTK_CONTAINER(box2), 4); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + add_empty_hbox(box1); + make_radio_group_full(labels2, box1, transposition_instrument_mode_w, FALSE, TRUE, NULL, NULL); + add_empty_hbox(box1); + + box1 = gtk_hbox_new(TRUE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + for(i = 0; i < 4; i++) { + thing = gtk_button_new_with_label(labels3[i]); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(transposition_transpose_notes), (gpointer)i); + } + + frame = gtk_frame_new(NULL); + gtk_frame_set_label(GTK_FRAME(frame), _("Instrument Changing")); + gtk_box_pack_start(GTK_BOX(mainbox), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + box2 = gtk_vbox_new(FALSE, 2); + gtk_widget_show(box2); + gtk_container_add (GTK_CONTAINER(frame), box2); + gtk_container_border_width(GTK_CONTAINER(box2), 4); + + box1 = gtk_hbox_new(FALSE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Instrument 1:"), 1, 128, &transposition_instrument_w[0], NULL, NULL); + + thing = gtk_button_new_with_label(_("Current instrument")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(transposition_current_instrument_clicked), (gpointer)0); + + add_empty_hbox(box1); + + gui_put_labelled_spin_button(box1, _("Instrument 2:"), 1, 128, &transposition_instrument_w[1], NULL, NULL); + + thing = gtk_button_new_with_label(_("Current instrument")); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, FALSE, TRUE, 0); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(transposition_current_instrument_clicked), (gpointer)1); + + add_empty_hbox(box1); + + box1 = gtk_hbox_new(TRUE, 4); + gtk_widget_show(box1); + gtk_box_pack_start(GTK_BOX(box2), box1, FALSE, TRUE, 0); + + for(i = 0; i < 2; i++) { + thing = gtk_button_new_with_label(labels4[i]); + gtk_widget_show(thing); + gtk_box_pack_start(GTK_BOX(box1), thing, TRUE, TRUE, 0); + gtk_signal_connect(GTK_OBJECT(thing), "clicked", + GTK_SIGNAL_FUNC(transposition_change_instruments), (gpointer)i); + } + + gtk_widget_show(transposition_window); +} diff -urN soundtracker-0.3.0/app/transposition.h soundtracker-0.3.1/app/transposition.h --- soundtracker-0.3.0/app/transposition.h Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.1/app/transposition.h Sun Aug 22 12:31:39 1999 @@ -0,0 +1,29 @@ + +/* + * The Real SoundTracker - Transposition dialog (header) + * + * Copyright (C) 1999 Michael Krause + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef _ST_TRANSPOSITION_H +#define _ST_TRANSPOSITION_H + +#include + +void transposition_dialog (void); + +#endif /* _ST_GUI_SETTINGS_H */ diff -urN soundtracker-0.3.0/configure soundtracker-0.3.1/configure --- soundtracker-0.3.0/configure Thu Aug 12 16:32:23 1999 +++ soundtracker-0.3.1/configure Sun Aug 29 18:50:00 1999 @@ -712,7 +712,7 @@ PACKAGE=soundtracker -VERSION=0.3.0 +VERSION=0.3.1 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } @@ -799,7 +799,7 @@ -ALL_LINGUAS="" +ALL_LINGUAS="ja" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:805: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. @@ -3435,7 +3435,7 @@ echo "$ac_t""no" 1>&6 fi - min_gtk_version=1.2.0 + min_gtk_version=1.2.2 echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 echo "configure:3441: checking for GTK - version >= $min_gtk_version" >&5 no_gtk="" diff -urN soundtracker-0.3.0/configure.in soundtracker-0.3.1/configure.in --- soundtracker-0.3.0/configure.in Thu Aug 12 16:32:09 1999 +++ soundtracker-0.3.1/configure.in Sun Aug 29 18:49:54 1999 @@ -1,14 +1,15 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(app/endian-conv.h) -AM_INIT_AUTOMAKE(soundtracker, 0.3.0) +AM_INIT_AUTOMAKE(soundtracker, 0.3.1) AM_CONFIG_HEADER(config.h) dnl ----------------------------------------------------------------------- dnl Initialize NLS dnl ----------------------------------------------------------------------- -ALL_LINGUAS="" +dnl Also add new catalogs to soundtracker.spec (%build)! +ALL_LINGUAS="ja" AM_GNU_GETTEXT dnl ----------------------------------------------------------------------- @@ -31,7 +32,7 @@ dnl Test for GTK+ / GNOME dnl ----------------------------------------------------------------------- -AM_PATH_GTK(1.2.0, +AM_PATH_GTK(1.2.2, , AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path?), "gthread") diff -urN soundtracker-0.3.0/po/cat-id-tbl.c soundtracker-0.3.1/po/cat-id-tbl.c --- soundtracker-0.3.0/po/cat-id-tbl.c Fri Aug 13 15:08:07 1999 +++ soundtracker-0.3.1/po/cat-id-tbl.c Wed Aug 25 13:38:28 1999 @@ -18,229 +18,271 @@ Couldn't open /dev/dsp for sampling:\n\ %s", 8}, {"Required sound output format not supported.\n", 9}, - {"driver_oss: write() returned -1.\n", 10}, - {"driver_oss: write not completely done.\n", 11}, - {"Estimated audio delay: %f microseconds", 12}, - {"(%d samples)", 13}, - {"Resolution:", 14}, - {"Channels:", 15}, - {"Frequency [Hz]:", 16}, - {"Buffer Size:", 17}, + {"Estimated audio delay: %f microseconds", 10}, + {"(%d samples)", 11}, + {"These changes won't take effect until you restart playing.", 12}, + {"Resolution:", 13}, + {"Channels:", 14}, + {"Frequency [Hz]:", 15}, + {"Buffer Size:", 16}, {"\ Couldn't open /dev/dsp for sound output:\n\ -%s", 18}, - {"Length", 19}, - {"Current", 20}, - {"Offset", 21}, - {"Value", 22}, - {"Insert", 23}, - {"Delete", 24}, +%s", 17}, + {"Length", 18}, + {"Current", 19}, + {"Offset", 20}, + {"Value", 21}, + {"Insert", 22}, + {"Delete", 23}, {"\ Graphical\n\ Envelope\n\ Editor\n\ only in\n\ -GNOME Version", 25}, - {"Sustain", 26}, - {"Point", 27}, - {"Loop", 28}, - {"Start", 29}, - {"End", 30}, - {"Scopes Frequency", 31}, - {"Tracker Frequency", 32}, - {"GUI Configuration", 33}, - {"Use Hexadecimal Numbers", 34}, - {"Advance Cursor in FX Columns", 35}, - {"Scopes buffer size [MB]", 36}, - {"`Save XM' saves all non-empty patterns", 37}, - {"Question", 38}, - {"Cancel", 39}, - {"Warning", 40}, - {"Error!", 41}, - {"Tempo", 42}, +GNOME Version", 24}, + {"Sustain", 25}, + {"Point", 26}, + {"Loop", 27}, + {"Start", 28}, + {"End", 29}, + {"Scopes Frequency", 30}, + {"Tracker Frequency", 31}, + {"GUI Configuration", 32}, + {"Use Hexadecimal Numbers", 33}, + {"Advance Cursor in FX Columns", 34}, + {"Scopes buffer size [MB]", 35}, + {"`Save XM' saves all non-empty patterns", 36}, + {"Question", 37}, + {"Cancel", 38}, + {"Warning", 39}, + {"Error!", 40}, + {"Tempo", 41}, {"\ Are you sure you want to free the current project?\n\ -All changes will be lost!", 43}, - {"Are you sure you want to overwrite the file?", 44}, - {"Song length", 45}, - {"Current pos", 46}, - {"Pattern", 47}, - {"Restart pos", 48}, - {"Load XM...", 49}, - {"Save XM...", 50}, - {"Play Song", 51}, - {"Play Pattern", 52}, - {"Stop", 53}, - {"Number of Channels:", 54}, - {"PatLength", 55}, - {"Octave", 56}, - {"Jump", 57}, - {"Instr", 58}, - {"Sample", 59}, - {"VolFade", 60}, - {"VibSpeed", 61}, - {"VibDepth", 62}, - {"VibSweep", 63}, - {"Can't open file.", 64}, - {"Saving Instruments not yet supported.", 65}, - {"Sine", 66}, - {"Square", 67}, - {"Saw Down", 68}, - {"Saw Up", 69}, - {"Instrument Editor", 70}, - {"Volume envelope", 71}, - {"Panning envelope", 72}, - {"Load Instrument..", 73}, - {"Save Instrument..", 74}, - {"Load XI", 75}, - {"Save XI", 76}, - {"Vibrato Type:", 77}, - {"The key that inserts the special keyoff note for FastTracker modules.", 78}, - {"Upper Octave Keys..", 79}, +All changes will be lost!", 42}, + {"Are you sure you want to overwrite the file?", 43}, + {"Song length", 44}, + {"Current pos", 45}, + {"Pattern", 46}, + {"Restart pos", 47}, + {"Load XM...", 48}, + {"Save XM...", 49}, + {"Play Song", 50}, + {"Play Pattern", 51}, + {"Stop", 52}, + {"Number of Channels:", 53}, + {"PatLength", 54}, + {"Octave", 55}, + {"Jump", 56}, + {"Instr", 57}, + {"Sample", 58}, + {"VolFade", 59}, + {"VibSpeed", 60}, + {"VibDepth", 61}, + {"VibSweep", 62}, + {"Can't open file.", 63}, + {"Saving Instruments not yet supported.", 64}, + {"Sine", 65}, + {"Square", 66}, + {"Saw Down", 67}, + {"Saw Up", 68}, + {"Instrument Editor", 69}, + {"Volume envelope", 70}, + {"Panning envelope", 71}, + {"Load Instrument..", 72}, + {"Save Instrument..", 73}, + {"Load XI", 74}, + {"Save XI", 75}, + {"Vibrato Type:", 76}, + {"Note:", 77}, + {"Initialize", 78}, + {"The key that inserts the special keyoff note for FastTracker modules.", 79}, + {"Upper Octave Keys..", 80}, {"\ These are the keys on the upper half of the keyboard. The c key is normally \ the key to the right of the TAB key. The rest of the keys should be ordered \ -in a piano keyboard fashion, including the number keys row above.", 80}, - {"Lower Octave Keys..", 81}, +in a piano keyboard fashion, including the number keys row above.", 81}, + {"Lower Octave Keys..", 82}, {"\ These are the keys on the lower half of the keyboard. The c key is normally \ the first character key to the right of the left Shift key. The rest of the \ -keys should be ordered in a piano keyboard fashion, including the row above.", 82}, - {"Other Keys..", 83}, - {"Various other keys", 84}, - {"Function", 85}, - {"Assignment", 86}, - {"Keyboard Configuration", 87}, - {"Key Group Explanation", 88}, - {"Key Explanation", 89}, - {"Modifiers:", 90}, - {"Learn selected key", 91}, - {"Learn all keys", 92}, +keys should be ordered in a piano keyboard fashion, including the row above.", 83}, + {"Other Keys..", 84}, + {"Various other keys", 85}, + {"Function", 86}, + {"Assignment", 87}, + {"Keyboard Configuration", 88}, + {"Key Group Explanation", 89}, + {"Key Explanation", 90}, + {"Modifiers:", 91}, + {"Learn selected key", 92}, + {"Learn all keys", 93}, {"\ Please press the desired key combination!\n\ -Click into left list to cancel", 93}, +Click into left list to cancel", 94}, {"\ The keyboard configuration file is defective.\n\ -Please use the Keyboard Configuration dialog.", 94}, +Please use the Keyboard Configuration dialog.", 95}, {"\ Automatic key configuration unsuccessful.\n\ Please use the Keyboard Configuration dialog\n\ -in the Settings menu.", 95}, - {"Ok", 96}, +in the Settings menu.", 96}, + {"Ok", 97}, {"\ Are you sure you want to do this?\n\ -All changes will be lost!", 97}, +All changes will be lost!", 98}, {"\ Are you sure you want to quit?\n\ -All changes will be lost!", 98}, - {"Open..", 99}, - {"Save as..", 100}, - {"Quit", 101}, - {"Clear All", 102}, - {"Clear Patterns Only", 103}, - {"Optimize Module", 104}, - {"Find Unused Pattern", 105}, - {"Copy Current to Unused Pattern", 106}, - {"Clear Unused Patterns", 107}, - {"Pack Patterns", 108}, - {"Load XI..", 109}, - {"Delete Unused Instruments", 110}, - {"Display Oscilloscopes", 111}, - {"Use Backing Store", 112}, - {"Keyboard Configuration..", 113}, - {"Audio Configuration..", 114}, - {"GUI Configuration..", 115}, - {"Save Settings now", 116}, - {"Save Settings on Exit", 117}, - {"About..", 118}, - {"Show Tips..", 119}, - {"_File", 120}, - {"_Module", 121}, - {"_Pattern", 122}, - {"_Instrument", 123}, - {"_Settings", 124}, - {"_Help", 125}, - {"File", 126}, - {"Save..", 127}, - {"Module", 128}, - {"Clear Song", 129}, - {"Instrument", 130}, - {"Delete unused instruments", 131}, - {"Settings", 132}, - {"Help", 133}, - {"Instrument Name", 134}, - {"#smpl", 135}, - {"Sample Name", 136}, - {"Linear", 137}, - {"Amiga", 138}, - {"Module Info", 139}, - {"Songname:", 140}, - {"Frequencies:", 141}, - {"ProTracker Mode", 142}, +All changes will be lost!", 99}, + {"_Open..", 100}, + {"Save _as..", 101}, + {"_Quit", 102}, + {"Clear _All", 103}, + {"Clear _Patterns Only", 104}, + {"_Optimize Module", 105}, + {"_Jazz Edit Mode", 106}, + {"_Transposition..", 107}, + {"_Find Unused Pattern", 108}, + {"_Copy Current to Unused Pattern", 109}, + {"C_lear Unused Patterns", 110}, + {"_Pack Patterns", 111}, + {"_Load XI..", 112}, + {"_Delete Unused Instruments", 113}, + {"Display _Oscilloscopes", 114}, + {"Use _Backing Store", 115}, + {"_Keyboard Configuration..", 116}, + {"_Audio Configuration..", 117}, + {"_GUI Configuration..", 118}, + {"_Save Settings now", 119}, + {"Save Settings on _Exit", 120}, + {"_About..", 121}, + {"Show _Tips..", 122}, + {"_File", 123}, + {"_Module", 124}, + {"_Edit", 125}, + {"_Pattern", 126}, + {"_Instrument", 127}, + {"_Settings", 128}, + {"_Help", 129}, + {"/_File", 130}, + {"/File/_Open..", 131}, + {"/File/Save _as..", 132}, + {"/File/-", 133}, + {"/File/_Quit", 134}, + {"/_Module", 135}, + {"/Module/Clear _All", 136}, + {"/Module/Clear _Patterns Only", 137}, + {"/Module/_Optimize Module", 138}, + {"/_Edit", 139}, + {"/Edit/_Jazz Edit Mode", 140}, + {"/Edit/-", 141}, + {"/Edit/_Transposition..", 142}, + {"/_Pattern", 143}, + {"/Pattern/_Find Unused Pattern", 144}, + {"/Pattern/_Copy Current to Unused Pattern", 145}, + {"/Pattern/C_lear Unused Patterns", 146}, + {"/Pattern/_Pack Patterns", 147}, + {"/_Instrument", 148}, + {"/Instrument/_Load XI..", 149}, + {"/Instrument/-", 150}, + {"/Instrument/_Delete Unused Instruments", 151}, + {"/_Settings", 152}, + {"/Settings/Display _Oscilloscopes", 153}, + {"/Settings/Use _Backing Store", 154}, + {"/Settings/-", 155}, + {"/Settings/_Keyboard Configuration..", 156}, + {"/Settings/_Audio Configuration..", 157}, + {"/Settings/_GUI Configuration..", 158}, + {"/Settings/_Save Settings now", 159}, + {"/Settings/Save Settings on _Exit", 160}, + {"/_Help", 161}, + {"/Help/_About..", 162}, + {"/Help/-", 163}, + {"/Help/Show _Tips..", 164}, + {"/Settings/Display Oscilloscopes", 165}, + {"/Settings/Use Backing Store", 166}, + {"/Settings/Save Settings on Exit", 167}, + {"Instrument Name", 168}, + {"#smpl", 169}, + {"Sample Name", 170}, + {"Linear", 171}, + {"Amiga", 172}, + {"Module Info", 173}, + {"Songname:", 174}, + {"Frequencies:", 175}, + {"ProTracker Mode", 176}, {"\ A directory called '.soundtracker' has been created in your\n\ -home directory to store configuration files.\n", 143}, - {"OK", 144}, - {"Start sampling", 145}, - {"No loop", 146}, - {"PingPong", 147}, - {"8 bits", 148}, - {"16 bits", 149}, - {"Sample Editor", 150}, - {"Volume", 151}, - {"Panning", 152}, - {"Finetune", 153}, - {"SelStart", 154}, - {"SelEnd", 155}, - {"Reset Sel", 156}, - {"Relnote", 157}, - {"Length: 0", 158}, - {"Load Sample..", 159}, - {"Save WAV..", 160}, - {"Load Sample", 161}, - {"Save WAV", 162}, - {"Clear", 163}, - {"Monitor", 164}, - {"Zoom to selection", 165}, - {"Show all", 166}, - {"Zoom in (+50%)", 167}, - {"Zoom out (-50%)", 168}, - {"Cut", 169}, - {"Remove", 170}, - {"Copy", 171}, - {"Paste", 172}, - {"Length: %d", 173}, - {"No memory for copybuffer.\n", 174}, - {"", 175}, - {"Can't read sample", 176}, - {"Sample is too long for current mixer module. Loading anyway.", 177}, - {"Can only handle mono 8 and 16 bit samples", 178}, - {"Out of memory for sample data.", 179}, - {"Read error.", 180}, - {"Can't open file for writing.", 181}, - {"Error while writing.", 182}, - {"Sampling Window", 183}, - {"out of memory while sampling...", 184}, - {"", 185}, - {"Recorded sample is too long for current mixer module. Using it anyway.", 186}, - {"SoundTracker Tip of the day", 187}, - {"Previous Tip", 188}, - {"Next Tip", 189}, - {"Close", 190}, - {"Show tip next time", 191}, - {"Jazz Edit:", 192}, - {"Pattern length out of range: %d.\n", 193}, - {"Invalid vibtype %d, using Sine.\n", 194}, - {"File is no XI instrument.", 195}, - {"Unknown XI version 0x%x\n", 196}, - {"No FastTracker XM and no supported MOD format!", 197}, - {"Error while loading patterns.", 198}, - {"Can't open file", 199}, - {"XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n", 200}, - {"Error while loading instruments.", 201}, +home directory to store configuration files.\n", 177}, + {"No loop", 178}, + {"PingPong", 179}, + {"8 bits", 180}, + {"16 bits", 181}, + {"Sample Editor", 182}, + {"Volume", 183}, + {"Panning", 184}, + {"Finetune", 185}, + {"SelStart", 186}, + {"SelEnd", 187}, + {"Reset Sel", 188}, + {"RelNote", 189}, + {"Length: 0", 190}, + {"Load Sample..", 191}, + {"Save WAV..", 192}, + {"Load Sample", 193}, + {"Save WAV", 194}, + {"Clear", 195}, + {"Monitor", 196}, + {"Volume Ramp", 197}, + {"Zoom to selection", 198}, + {"Show all", 199}, + {"Zoom in (+50%)", 200}, + {"Zoom out (-50%)", 201}, + {"Resample", 202}, + {"Cut", 203}, + {"Remove", 204}, + {"Copy", 205}, + {"Paste", 206}, + {"Filter", 207}, + {"Length: %d", 208}, + {"No memory for copybuffer.\n", 209}, + {"", 210}, + {"Can't read sample", 211}, + {"Sample is too long for current mixer module. Loading anyway.", 212}, + {"Can only handle mono 8 and 16 bit samples", 213}, + {"Out of memory for sample data.", 214}, + {"Read error.", 215}, + {"Can't open file for writing.", 216}, + {"OK", 217}, + {"Start sampling", 218}, + {"Sampling Window", 219}, + {"out of memory while sampling...", 220}, + {"", 221}, + {"Recorded sample is too long for current mixer module. Using it anyway.", 222}, + {"Normalize", 223}, + {"Execute", 224}, + {"Close", 225}, + {"Volume Ramping", 226}, + {"Perform linear volume fade on Selection", 227}, + {"Left [%]:", 228}, + {"Right [%]:", 229}, + {"SoundTracker Tip of the day", 230}, + {"Previous Tip", 231}, + {"Next Tip", 232}, + {"Show tip next time", 233}, + {"Jazz Edit:", 234}, + {"Pattern length out of range: %d.\n", 235}, + {"Invalid vibtype %d, using Sine.\n", 236}, + {"File is no XI instrument.", 237}, + {"Unknown XI version 0x%x\n", 238}, + {"No FastTracker XM and no supported MOD format!", 239}, + {"Error while loading patterns.", 240}, + {"Can't open file", 241}, + {"XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n", 242}, + {"Error while loading instruments.", 243}, {"\ Module contains sample(s) that are too long for the current mixer.\n\ -Maximum sample length is %d.", 202}, +Maximum sample length is %d.", 244}, }; -int _msg_tbl_length = 202; +int _msg_tbl_length = 244; Binary files soundtracker-0.3.0/po/ja.gmo and soundtracker-0.3.1/po/ja.gmo differ diff -urN soundtracker-0.3.0/po/ja.po soundtracker-0.3.1/po/ja.po --- soundtracker-0.3.0/po/ja.po Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.1/po/ja.po Sun Aug 29 18:35:42 1999 @@ -0,0 +1,1147 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: SoundTracker 0.3.0\n" +"POT-Creation-Date: 1999-08-29 17:53+0200\n" +"PO-Revision-Date: 1999-08-18 12:10+09:00\n" +"Last-Translator: Atsushi Yamagata \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: app/audioconfig.c:53 +msgid "Playback Output" +msgstr "ºÆÀ¸½ÐÎÏ" + +#: app/audioconfig.c:59 +msgid "Editing Output" +msgstr "ÊÔ½¸½ÐÎÏ" + +#: app/audioconfig.c:65 +msgid "Sampling" +msgstr "¥µ¥ó¥×¥ê¥ó¥°" + +#: app/audioconfig.c:158 +msgid "Driver Module" +msgstr "¥É¥é¥¤¥Ð¡¦¥â¥¸¥å¡¼¥ë" + +#: app/audioconfig.c:166 app/audioconfig.c:169 +msgid "Audio Configuration" +msgstr "¥ª¡¼¥Ç¥£¥ªÀßÄê" + +#: app/drivers/oss-input.c:90 +msgid "no settings (yet), sorry!" +msgstr "¤¹¤ß¤Þ¤»¤ó¡¢(¤Þ¤À)ÀßÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó!" + +#: app/drivers/oss-input.c:188 +#, c-format +msgid "" +"Couldn't open /dev/dsp for sampling:\n" +"%s" +msgstr "" +"¥µ¥ó¥×¥ê¥ó¥°¤¹¤ë¤Î¤Ë /dev/dsp ¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" +"%s" + +#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 +msgid "Required sound output format not supported.\n" +msgstr "Í׵ᤵ¤ì¤¿¥µ¥¦¥ó¥É½ÐÎÏ¥Õ¥©¡¼¥Þ¥Ã¥È¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" + +#: app/drivers/oss-output.c:136 +#, c-format +msgid "Estimated audio delay: %f microseconds" +msgstr "¿äÄꥪ¡¼¥Ç¥£¥ª¡¦¥Ç¥£¥ì¥¤: %f ¥Þ¥¤¥¯¥íÉÃ" + +#: app/drivers/oss-output.c:170 +#, c-format +msgid "(%d samples)" +msgstr "(%d ¥µ¥ó¥×¥ë)" + +#: app/drivers/oss-output.c:185 +msgid "These changes won't take effect until you restart playing." +msgstr "" + +#: app/drivers/oss-output.c:197 +msgid "Resolution:" +msgstr "²òÁüÅÙ:" + +#: app/drivers/oss-output.c:207 +msgid "Channels:" +msgstr "¥Á¥ã¥ó¥Í¥ë:" + +#: app/drivers/oss-output.c:217 +msgid "Frequency [Hz]:" +msgstr "¼þÇÈ¿ô [Hz]:" + +#: app/drivers/oss-output.c:227 +msgid "Buffer Size:" +msgstr "¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º" + +#: app/drivers/oss-output.c:354 +#, c-format +msgid "" +"Couldn't open /dev/dsp for sound output:\n" +"%s" +msgstr "" +"¥µ¥¦¥ó¥É½ÐÎϤËÂФ·¤Æ /dev/dsp ¤¬³«¤±¤Þ¤»¤ó¤Ç¤·¤¿:\n" +"%s" + +#: app/envelope-box.c:739 +msgid "Length" +msgstr "Ťµ" + +#: app/envelope-box.c:740 +msgid "Current" +msgstr "¥«¥ì¥ó¥È" + +#: app/envelope-box.c:741 +msgid "Offset" +msgstr "¥ª¥Õ¥»¥Ã¥È" + +#: app/envelope-box.c:742 +msgid "Value" +msgstr "ÃÍ" + +#: app/envelope-box.c:748 app/gui.c:1080 +msgid "Insert" +msgstr "ÁÞÆþ" + +#: app/envelope-box.c:754 app/gui.c:1087 +msgid "Delete" +msgstr "ºï½ü" + +#: app/envelope-box.c:842 +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only in\n" +"GNOME Version" +msgstr "" +"GNOME ÈÇ\n" +"¤Î¤ß¤Î\n" +"¥°¥é¥Õ¥£¥«¥ë\n" +"¥¨¥ó¥Ù¥í¡¼¥×\n" +"ÊÔ½¸¤Ç¤¹" + +#: app/envelope-box.c:857 +msgid "Sustain" +msgstr "¥µ¥¹¥Æ¥£¡¼¥ó" + +#: app/envelope-box.c:865 +msgid "Point" +msgstr "¥Ý¥¤¥ó¥È" + +#: app/envelope-box.c:867 +msgid "Loop" +msgstr "¥ë¡¼¥×" + +#: app/envelope-box.c:875 app/sample-editor.c:208 +msgid "Start" +msgstr "³«»Ï" + +#: app/envelope-box.c:876 app/sample-editor.c:209 +msgid "End" +msgstr "½ªÎ»" + +#: app/gui-settings.c:65 +msgid "Scopes Frequency" +msgstr "¥¹¥³¡¼¥×¼þÇÈ¿ô" + +#: app/gui-settings.c:68 +msgid "Tracker Frequency" +msgstr "¥È¥é¥Ã¥«¡¼¼þÇÈ¿ô" + +#: app/gui-settings.c:126 app/gui-settings.c:129 +msgid "GUI Configuration" +msgstr "GUI ÀßÄê" + +#: app/gui-settings.c:151 +msgid "Use Hexadecimal Numbers" +msgstr "16 ¿Ê¿ô¤ò»ÈÍÑ" + +#: app/gui-settings.c:158 +msgid "Advance Cursor in FX Columns" +msgstr "FX ¥«¥é¥à¤Ç¤Î¥¢¥É¥Ð¥ó¥¹¡¦¥«¡¼¥½¥ë" + +#: app/gui-settings.c:172 +msgid "Scopes buffer size [MB]" +msgstr "¥¹¥³¡¼¥×¡¦¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º [MB]" + +#: app/gui-settings.c:187 +msgid "`Save XM' saves all non-empty patterns" +msgstr "`Êݸ XM' ¤ÇÁ´¤Æ¤Î¶õ¤Ç¤Ê¤¤¥Ñ¥¿¡¼¥ó¤òÊݸ" + +#: app/gui-subs.c:374 +msgid "Question" +msgstr "¼ÁÌä" + +#: app/gui-subs.c:391 app/sample-editor.c:1173 +msgid "Cancel" +msgstr "¼è¾Ã" + +#: app/gui-subs.c:409 +msgid "Warning" +msgstr "·Ù¹ð" + +#: app/gui-subs.c:435 +msgid "Error!" +msgstr "¥¨¥é¡¼!" + +#: app/gui.c:81 +msgid "Tempo" +msgstr "¥Æ¥ó¥Ý" + +#: app/gui.c:209 +msgid "" +"Are you sure you want to free the current project?\n" +"All changes will be lost!" +msgstr "" +"¥«¥ì¥ó¥È¡¦¥×¥í¥¸¥§¥¯¥È¤ò²òÊü¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" +"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" + +#: app/gui.c:221 +msgid "Are you sure you want to overwrite the file?" +msgstr "¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?" + +#: app/gui.c:1071 +msgid "Song length" +msgstr "¶ÊĹ" + +#: app/gui.c:1072 +msgid "Current pos" +msgstr "¸½ºß°ÌÃÖ" + +#: app/gui.c:1073 app/gui.c:1228 +msgid "Pattern" +msgstr "¥Ñ¥¿¡¼¥ó" + +#: app/gui.c:1074 +msgid "Restart pos" +msgstr "ºÆ³«°ÌÃÖ" + +#: app/gui.c:1142 +msgid "Load XM..." +msgstr "XM ¥í¡¼¥É..." + +#: app/gui.c:1143 +msgid "Save XM..." +msgstr "XM Êݸ..." + +#: app/gui.c:1181 +msgid "Play Song" +msgstr "¶Ê¤ÎºÆÀ¸" + +#: app/gui.c:1187 +msgid "Play Pattern" +msgstr "¥Ñ¥¿¡¼¥óºÆÀ¸" + +#: app/gui.c:1193 +msgid "Stop" +msgstr "Ää»ß" + +#: app/gui.c:1212 +msgid "Number of Channels:" +msgstr "¥Á¥ã¥ó¥Í¥ë¿ô:" + +#: app/gui.c:1244 +msgid "PatLength" +msgstr "¥Ñ¥¿¡¼¥óĹ" + +#: app/gui.c:1336 +msgid "Octave" +msgstr "¥ª¥¯¥¿¡¼¥Ö" + +#: app/gui.c:1344 +msgid "Jump" +msgstr "¥¸¥ã¥ó¥×" + +#: app/gui.c:1352 +msgid "Instr" +msgstr "³Ú´ï" + +#: app/gui.c:1367 +msgid "Sample" +msgstr "¥µ¥ó¥×¥ë" + +#: app/instrument-editor.c:74 +msgid "VolFade" +msgstr "²»ÎÌ¥Õ¥§¡¼¥É" + +#: app/instrument-editor.c:75 +msgid "VibSpeed" +msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó®ÅÙ" + +#: app/instrument-editor.c:76 +msgid "VibDepth" +msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó¿¼ÅÙ" + +#: app/instrument-editor.c:77 +msgid "VibSweep" +msgstr "¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó¡¦¥¹¥¤¡¼¥×" + +#: app/instrument-editor.c:153 +msgid "Can't open file." +msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£" + +#: app/instrument-editor.c:172 +msgid "Saving Instruments not yet supported." +msgstr "Êݸ¤¹¤ë³Ú´ï¤Ï¤Þ¤À¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: app/instrument-editor.c:180 +msgid "Sine" +msgstr "Àµ¸¹ÇÈ" + +#: app/instrument-editor.c:180 +msgid "Square" +msgstr "¶ë·ÁÇÈ" + +#: app/instrument-editor.c:180 +msgid "Saw Down" +msgstr "²¼¸þ¤­µøÇÈ" + +#: app/instrument-editor.c:180 +msgid "Saw Up" +msgstr "¾å¸þ¤­µøÇÈ" + +#: app/instrument-editor.c:184 +msgid "Instrument Editor" +msgstr "³Ú´ïÊÔ½¸" + +#: app/instrument-editor.c:193 +msgid "Volume envelope" +msgstr "²»ÎÌ¥¨¥ó¥Ù¥í¡¼¥×" + +#: app/instrument-editor.c:201 +msgid "Panning envelope" +msgstr "¥Ñ¥ó¡¦¥¨¥ó¥Ù¥í¡¼¥×" + +#: app/instrument-editor.c:218 +msgid "Load Instrument.." +msgstr "³Ú´ï¥í¡¼¥É.." + +#: app/instrument-editor.c:219 +msgid "Save Instrument.." +msgstr "³Ú´ïÊݸ.." + +#: app/instrument-editor.c:221 +msgid "Load XI" +msgstr "XI ¥í¡¼¥É" + +#: app/instrument-editor.c:227 +msgid "Save XI" +msgstr "XI Êݸ" + +#: app/instrument-editor.c:247 +msgid "Vibrato Type:" +msgstr "¥Ó¥Ö¥é¡¼¥È·¿:" + +#: app/instrument-editor.c:319 +msgid "Note:" +msgstr "" + +#: app/instrument-editor.c:337 +msgid "Initialize" +msgstr "" + +#: app/keys.c:123 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "" +"ÁÞÆþ¤µ¤ì¤¿¥­¡¼¤Ï FastTracker ¥â¥¸¥å¡¼¥ë¤Ë´Ø¤¹¤ëÆÃÊ̤ʥ­¡¼¥ª¥Õ²»Éä¤Ç¤¹¡£" + +#: app/keys.c:135 +msgid "Upper Octave Keys.." +msgstr "¥ª¥¯¥¿¡¼¥Ö¾å¤Î¥­¡¼.." + +#: app/keys.c:136 +msgid "" +"These are the keys on the upper half of the keyboard. The c key is normally " +"the key to the right of the TAB key. The rest of the keys should be ordered " +"in a piano keyboard fashion, including the number keys row above." +msgstr "" +"¸°ÈפξåȾʬ¤Ë¥­¡¼¤¬¤¢¤ê¤Þ¤¹¡£¥­¡¼ c ¤ÏÉáÄÌ TAB " +"¥­¡¼¤Î±¦¤Î¥­¡¼¤Ç¤¹¡£»Ä¤ê¤Î¥­¡¼¤Ï¡¢¾åÉô¤Î¿ô»ú¥­¡¼¤Î¹Ô¤ò´Þ¤ó¤Ç¡¢¥Ô¥¢¥Î¤Î¸°ÈפÎÎ" +"®µ·¤Çʤó¤Ç¤¤¤Þ¤¹¡£" + +#: app/keys.c:142 +msgid "Lower Octave Keys.." +msgstr "¥ª¥¯¥¿¡¼¥Ö²¼¤Î¥­¡¼.." + +#: app/keys.c:143 +msgid "" +"These are the keys on the lower half of the keyboard. The c key is normally " +"the first character key to the right of the left Shift key. The rest of the " +"keys should be ordered in a piano keyboard fashion, including the row above." +msgstr "" +"¸°Èפβ¼È¾Ê¬¤Ë¥­¡¼¤¬¤¢¤ê¤Þ¤¹¡£¥­¡¼ c ¤ÏÉáÄ̺¸ Shift " +"¥­¡¼¤Î±¦¤ÎºÇ½é¤Îʸ»ú¥­¡¼¤Ç¤¹¡£»Ä¤ê¤Î¥­¡¼¤Ï¡¢¾åÉô¤Î¹Ô¤ò´Þ¤ó¤Ç¡¢¥Ô¥¢¥Î¤Î¸°ÈפÎÎ" +"®µ·¤Çʤó¤Ç¤¤¤Þ¤¹¡£" + +#: app/keys.c:149 +msgid "Other Keys.." +msgstr "¾¤Î¥­¡¼.." + +#: app/keys.c:150 +msgid "Various other keys" +msgstr "¾¤Î³Æ¼ï¥­¡¼" + +#: app/keys.c:434 +msgid "Function" +msgstr "µ¡Ç½" + +#: app/keys.c:435 +msgid "Assignment" +msgstr "³äÅö" + +#: app/keys.c:443 app/keys.c:446 +msgid "Keyboard Configuration" +msgstr "¥­¡¼¥Ü¡¼¥ÉÀßÄê" + +#: app/keys.c:491 +msgid "Key Group Explanation" +msgstr "¥­¡¼¡¦¥°¥ë¡¼¥×ÀâÌÀ" + +#: app/keys.c:508 +msgid "Key Explanation" +msgstr "¥­¡¼ÀâÌÀ" + +#: app/keys.c:539 +msgid "Modifiers:" +msgstr "¥â¥Ç¥£¥Õ¥¡¥¤¥¢" + +#: app/keys.c:565 +msgid "Learn selected key" +msgstr "ÁªÂò¤µ¤ì¤¿¥­¡¼¤ò³Ð¤¨¤ë" + +#: app/keys.c:571 +msgid "Learn all keys" +msgstr "Á´¤Æ¤Î¥­¡¼¤ò³Ð¤¨¤ë" + +#: app/keys.c:577 +msgid "" +"Please press the desired key combination!\n" +"Click into left list to cancel" +msgstr "" +"¤ªË¾¤ß¤ÎÁȹ礻¤Î¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤!\n" +"¼è¾Ã¤¹¤Ë¤Ïº¸¤Î°ìÍ÷¤Ç¥¯¥ê¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤" + +#: app/keys.c:635 +msgid "" +"The keyboard configuration file is defective.\n" +"Please use the Keyboard Configuration dialog." +msgstr "" +"¥­¡¼¥Ü¡¼¥ÉÀßÄê¥Õ¥¡¥¤¥ë¤¬ÉÔ´°Á´¤Ç¤¹¡£\n" +"¥­¡¼¥Ü¡¼¥ÉÀßÄê¥À¥¤¥¢¥í¥°¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£" + +#: app/keys.c:845 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" +"¼«Æ°¥­¡¼ÀßÄê¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" +"ÀßÄê¥á¥Ë¥å¡¼¤Î¥­¡¼¥Ü¡¼¥ÉÀßÄê¥À¥¤¥¢¥í¥°¤ò»ÈÍÑ\n" +"¤·¤Æ¤¯¤À¤µ¤¤¡£" + +#: app/menubar.c:96 +msgid "Ok" +msgstr "λ²ò" + +#: app/menubar.c:132 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" +"¤³¤¦¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" +"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" + +#: app/menubar.c:154 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" +"½ªÎ»¤·¤¿¤¤¤Î¤Ï³Î¤«¤Ç¤¹¤«?\n" +"Á´¤Æ¤ÎÊѹ¹¤¬¼º¤ï¤ì¤Þ¤¹!" + +#: app/menubar.c:201 +#, fuzzy +msgid "_Open.." +msgstr "³«¤¯.." + +#: app/menubar.c:203 +#, fuzzy +msgid "Save _as.." +msgstr "Êݸ.." + +#: app/menubar.c:208 +#, fuzzy +msgid "_Quit" +msgstr "½ªÎ»" + +#: app/menubar.c:215 +#, fuzzy +msgid "Clear _All" +msgstr "Á´¤Æ¾Ãµî" + +#: app/menubar.c:217 +#, fuzzy +msgid "Clear _Patterns Only" +msgstr "¥Ñ¥¿¡¼¥ó¤Î¤ß¾Ãµî" + +#: app/menubar.c:219 +#, fuzzy +msgid "_Optimize Module" +msgstr "¥â¥¸¥å¡¼¥ëºÇŬ²½" + +#: app/menubar.c:226 +#, fuzzy +msgid "_Jazz Edit Mode" +msgstr "Jazz ÊÔ½¸" + +#: app/menubar.c:231 +msgid "_Transposition.." +msgstr "" + +#: app/menubar.c:238 +#, fuzzy +msgid "_Find Unused Pattern" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¸¡º÷" + +#: app/menubar.c:240 +#, fuzzy +msgid "_Copy Current to Unused Pattern" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¤Ë¥«¥ì¥ó¥È¤ò¥³¥Ô¡¼" + +#: app/menubar.c:242 +#, fuzzy +msgid "C_lear Unused Patterns" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî" + +#: app/menubar.c:244 +#, fuzzy +msgid "_Pack Patterns" +msgstr "¥Ñ¥¿¡¼¥ó¡¦¥Ñ¥Ã¥¯" + +#: app/menubar.c:251 +#, fuzzy +msgid "_Load XI.." +msgstr "XI ¥í¡¼¥É.." + +#: app/menubar.c:256 +#, fuzzy +msgid "_Delete Unused Instruments" +msgstr "̤»ÈÍѳڴïºï½ü" + +#: app/menubar.c:264 +#, fuzzy +msgid "Display _Oscilloscopes" +msgstr "¥ª¥·¥í¥¹¥³¡¼¥×ɽ¼¨" + +#: app/menubar.c:266 +#, fuzzy +msgid "Use _Backing Store" +msgstr "¥Ð¥Ã¥­¥ó¥°¡¦¥¹¥È¥¢»ÈÍÑ" + +#: app/menubar.c:271 +#, fuzzy +msgid "_Keyboard Configuration.." +msgstr "¥­¡¼¥Ü¡¼¥ÉÀßÄê.." + +#: app/menubar.c:273 +#, fuzzy +msgid "_Audio Configuration.." +msgstr "¥ª¡¼¥Ç¥£¥ªÀßÄê.." + +#: app/menubar.c:275 +#, fuzzy +msgid "_GUI Configuration.." +msgstr "GUI ÀßÄê.." + +#: app/menubar.c:280 +#, fuzzy +msgid "_Save Settings now" +msgstr "ÀßÄê¤òº£Êݸ" + +#: app/menubar.c:282 +#, fuzzy +msgid "Save Settings on _Exit" +msgstr "½ªÎ»»þ¤ËÀßÄê¤òÊݸ" + +#: app/menubar.c:289 +#, fuzzy +msgid "_About.." +msgstr "SoundTracker ¤Ë¤Ä¤¤¤Æ.." + +#: app/menubar.c:294 +#, fuzzy +msgid "Show _Tips.." +msgstr "µ»¤Îɽ¼¨.." + +#: app/menubar.c:301 +msgid "_File" +msgstr "¥Õ¥¡¥¤¥ë(_F)" + +#: app/menubar.c:302 +msgid "_Module" +msgstr "¥â¥¸¥å¡¼¥ë(_M)" + +#: app/menubar.c:303 +msgid "_Edit" +msgstr "" + +#: app/menubar.c:304 +msgid "_Pattern" +msgstr "¥Ñ¥¿¡¼¥ó(_P)" + +#: app/menubar.c:305 +msgid "_Instrument" +msgstr "³Ú´ï(_I)" + +#: app/menubar.c:306 +msgid "_Settings" +msgstr "ÀßÄê(_S)" + +#: app/menubar.c:307 +msgid "_Help" +msgstr "¥Ø¥ë¥×(_H)" + +#: app/menubar.c:335 +#, fuzzy +msgid "/_File" +msgstr "¥Õ¥¡¥¤¥ë(_F)" + +#: app/menubar.c:336 +#, fuzzy +msgid "/File/_Open.." +msgstr "³«¤¯.." + +#: app/menubar.c:337 +#, fuzzy +msgid "/File/Save _as.." +msgstr "Êݸ.." + +#: app/menubar.c:338 +#, fuzzy +msgid "/File/-" +msgstr "¥Õ¥¡¥¤¥ë" + +#: app/menubar.c:339 +msgid "/File/_Quit" +msgstr "" + +#: app/menubar.c:340 +#, fuzzy +msgid "/_Module" +msgstr "¥â¥¸¥å¡¼¥ë(_M)" + +#: app/menubar.c:341 +#, fuzzy +msgid "/Module/Clear _All" +msgstr "Á´¤Æ¾Ãµî" + +#: app/menubar.c:342 +#, fuzzy +msgid "/Module/Clear _Patterns Only" +msgstr "¥Ñ¥¿¡¼¥ó¤Î¤ß¾Ãµî" + +#: app/menubar.c:343 +#, fuzzy +msgid "/Module/_Optimize Module" +msgstr "¥â¥¸¥å¡¼¥ëºÇŬ²½" + +#: app/menubar.c:344 +msgid "/_Edit" +msgstr "" + +#: app/menubar.c:345 +msgid "/Edit/_Jazz Edit Mode" +msgstr "" + +#: app/menubar.c:346 +msgid "/Edit/-" +msgstr "" + +#: app/menubar.c:347 +msgid "/Edit/_Transposition.." +msgstr "" + +#: app/menubar.c:348 +#, fuzzy +msgid "/_Pattern" +msgstr "¥Ñ¥¿¡¼¥ó(_P)" + +#: app/menubar.c:349 +#, fuzzy +msgid "/Pattern/_Find Unused Pattern" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¸¡º÷" + +#: app/menubar.c:350 +#, fuzzy +msgid "/Pattern/_Copy Current to Unused Pattern" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¤Ë¥«¥ì¥ó¥È¤ò¥³¥Ô¡¼" + +#: app/menubar.c:351 +#, fuzzy +msgid "/Pattern/C_lear Unused Patterns" +msgstr "̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî" + +#: app/menubar.c:352 +#, fuzzy +msgid "/Pattern/_Pack Patterns" +msgstr "¥Ñ¥¿¡¼¥ó¡¦¥Ñ¥Ã¥¯" + +#: app/menubar.c:353 +#, fuzzy +msgid "/_Instrument" +msgstr "³Ú´ï(_I)" + +#: app/menubar.c:354 +#, fuzzy +msgid "/Instrument/_Load XI.." +msgstr "³Ú´ï" + +#: app/menubar.c:355 +#, fuzzy +msgid "/Instrument/-" +msgstr "³Ú´ï" + +#: app/menubar.c:356 +#, fuzzy +msgid "/Instrument/_Delete Unused Instruments" +msgstr "̤»ÈÍѳڴïºï½ü" + +#: app/menubar.c:357 +#, fuzzy +msgid "/_Settings" +msgstr "ÀßÄê(_S)" + +#: app/menubar.c:358 +#, fuzzy +msgid "/Settings/Display _Oscilloscopes" +msgstr "¥ª¥·¥í¥¹¥³¡¼¥×ɽ¼¨" + +#: app/menubar.c:359 +#, fuzzy +msgid "/Settings/Use _Backing Store" +msgstr "¥Ð¥Ã¥­¥ó¥°¡¦¥¹¥È¥¢»ÈÍÑ" + +#: app/menubar.c:360 app/menubar.c:364 +#, fuzzy +msgid "/Settings/-" +msgstr "ÀßÄê" + +#: app/menubar.c:361 +#, fuzzy +msgid "/Settings/_Keyboard Configuration.." +msgstr "¥­¡¼¥Ü¡¼¥ÉÀßÄê.." + +#: app/menubar.c:362 +#, fuzzy +msgid "/Settings/_Audio Configuration.." +msgstr "¥ª¡¼¥Ç¥£¥ªÀßÄê.." + +#: app/menubar.c:363 +#, fuzzy +msgid "/Settings/_GUI Configuration.." +msgstr "GUI ÀßÄê.." + +#: app/menubar.c:365 +#, fuzzy +msgid "/Settings/_Save Settings now" +msgstr "ÀßÄê¤òº£Êݸ" + +#: app/menubar.c:366 +#, fuzzy +msgid "/Settings/Save Settings on _Exit" +msgstr "½ªÎ»»þ¤ËÀßÄê¤òÊݸ" + +#: app/menubar.c:367 +#, fuzzy +msgid "/_Help" +msgstr "¥Ø¥ë¥×(_H)" + +#: app/menubar.c:368 +#, fuzzy +msgid "/Help/_About.." +msgstr "SoundTracker ¤Ë¤Ä¤¤¤Æ.." + +#: app/menubar.c:369 +#, fuzzy +msgid "/Help/-" +msgstr "¥Ø¥ë¥×" + +#: app/menubar.c:370 +#, fuzzy +msgid "/Help/Show _Tips.." +msgstr "µ»¤Îɽ¼¨.." + +#: app/menubar.c:384 +#, fuzzy +msgid "/Settings/Display Oscilloscopes" +msgstr "¥ª¥·¥í¥¹¥³¡¼¥×ɽ¼¨" + +#: app/menubar.c:386 +#, fuzzy +msgid "/Settings/Use Backing Store" +msgstr "¥Ð¥Ã¥­¥ó¥°¡¦¥¹¥È¥¢»ÈÍÑ" + +#: app/menubar.c:388 +#, fuzzy +msgid "/Settings/Save Settings on Exit" +msgstr "½ªÎ»»þ¤ËÀßÄê¤òÊݸ" + +#: app/module-info.c:116 +msgid "Instrument Name" +msgstr "³Ú´ï̾" + +#: app/module-info.c:116 +msgid "#smpl" +msgstr "¥µ¥ó¥×¥ë¿ô" + +#: app/module-info.c:117 +msgid "Sample Name" +msgstr "¥µ¥ó¥×¥ë̾" + +#: app/module-info.c:118 +msgid "Linear" +msgstr "Àþ·¿" + +#: app/module-info.c:118 app/sample-editor.c:168 +msgid "Amiga" +msgstr "Amiga" + +#: app/module-info.c:125 +msgid "Module Info" +msgstr "¥â¥¸¥å¡¼¥ë¾ðÊó" + +#: app/module-info.c:165 +msgid "Songname:" +msgstr "¶Ê̾:" + +#: app/module-info.c:180 +msgid "Frequencies:" +msgstr "¼þÇÈ¿ô:" + +#: app/module-info.c:185 +msgid "ProTracker Mode" +msgstr "ProTracker ¥â¡¼¥É" + +#: app/preferences.c:58 +msgid "" +"A directory called '.soundtracker' has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" +"ÀßÄê¥Õ¥¡¥¤¥ë¤òµ­²±¤¹¤ë¤¿¤á¡¢¤¢¤Ê¤¿¤Î¥Û¡¼¥à¡¦¥Ç¥£¥ì¥¯¥È¥ê¤Ë\n" +"¥Ç¥£¥ì¥¯¥È¥ê '.soundtracker' ¤¬À¸À®¤µ¤ì¤Þ¤¹¡£\n" + +#: app/sample-editor.c:167 +msgid "No loop" +msgstr "¥ë¡¼¥×̵¤·" + +#: app/sample-editor.c:169 +msgid "PingPong" +msgstr "¥Ô¥ó¥Ý¥ó" + +#: app/sample-editor.c:173 +msgid "8 bits" +msgstr "8 ¥Ó¥Ã¥È" + +#: app/sample-editor.c:174 +msgid "16 bits" +msgstr "16 ¥Ó¥Ã¥È" + +#: app/sample-editor.c:180 +msgid "Sample Editor" +msgstr "¥µ¥ó¥×¥ëÊÔ½¸" + +#: app/sample-editor.c:220 +msgid "Volume" +msgstr "²»ÎÌ" + +#: app/sample-editor.c:221 +msgid "Panning" +msgstr "¥Ñ¥ó" + +#: app/sample-editor.c:222 +msgid "Finetune" +msgstr "ÈùÄ´À°" + +#: app/sample-editor.c:233 +msgid "SelStart" +msgstr "ÁªÂò³«»Ï" + +#: app/sample-editor.c:234 +msgid "SelEnd" +msgstr "ÁªÂò½ªÎ»" + +#: app/sample-editor.c:237 +msgid "Reset Sel" +msgstr "ÁªÂò¥ê¥»¥Ã¥È" + +#: app/sample-editor.c:242 +#, fuzzy +msgid "RelNote" +msgstr "Relnote" + +#: app/sample-editor.c:243 +msgid "Length: 0" +msgstr "Ťµ: 0" + +#: app/sample-editor.c:256 +msgid "Load Sample.." +msgstr "¥µ¥ó¥×¥ë¡¦¥í¡¼¥É.." + +#: app/sample-editor.c:257 +msgid "Save WAV.." +msgstr "WAV Êݸ.." + +#: app/sample-editor.c:260 +msgid "Load Sample" +msgstr "¥µ¥ó¥×¥ë¡¦¥í¡¼¥É" + +#: app/sample-editor.c:269 +msgid "Save WAV" +msgstr "WAV Êݸ" + +#: app/sample-editor.c:279 +msgid "Clear" +msgstr "¾Ãµî" + +#: app/sample-editor.c:285 +msgid "Monitor" +msgstr "¥â¥Ë¥¿" + +#: app/sample-editor.c:291 +#, fuzzy +msgid "Volume Ramp" +msgstr "²»ÎÌ" + +#: app/sample-editor.c:301 +msgid "Zoom to selection" +msgstr "ÁªÂòÉôʬ³ÈÂç" + +#: app/sample-editor.c:307 +msgid "Show all" +msgstr "Á´¤ÆÉ½¼¨" + +#: app/sample-editor.c:313 +msgid "Zoom in (+50%)" +msgstr "³ÈÂç (+50%)" + +#: app/sample-editor.c:319 +msgid "Zoom out (-50%)" +msgstr "½Ì¾® (-50%)" + +#: app/sample-editor.c:325 +#, fuzzy +msgid "Resample" +msgstr "¥µ¥ó¥×¥ë" + +#: app/sample-editor.c:336 +msgid "Cut" +msgstr "ÀÚ¼è" + +#: app/sample-editor.c:342 +msgid "Remove" +msgstr "½üµî" + +#: app/sample-editor.c:348 +msgid "Copy" +msgstr "¥³¥Ô¡¼" + +#: app/sample-editor.c:354 +msgid "Paste" +msgstr "ŽÉÕ" + +#: app/sample-editor.c:360 +#, fuzzy +msgid "Filter" +msgstr "¥Õ¥¡¥¤¥ë" + +#: app/sample-editor.c:460 +#, c-format +msgid "Length: %d" +msgstr "Ťµ: %d" + +#: app/sample-editor.c:866 +msgid "No memory for copybuffer.\n" +msgstr "¥³¥Ô¡¼¡¦¥Ð¥Ã¥Õ¥¡¤Ë¥á¥â¥êÉÔ­¤Ç¤¹¡£\n" + +#: app/sample-editor.c:958 +msgid "" +msgstr "<º£Å½ÉÕ¤µ¤ì¤Þ¤·¤¿>" + +#: app/sample-editor.c:1035 +msgid "Can't read sample" +msgstr "¥µ¥ó¥×¥ë¤¬ÆÉ¤ß¹þ¤á¤Þ¤»¤ó" + +#: app/sample-editor.c:1041 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "¥µ¥ó¥×¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤Þ¤¹¡£¤È¤Ë¤«¤¯¥í¡¼¥É¤·¤Þ¤¹" + +#: app/sample-editor.c:1055 +msgid "Can only handle mono 8 and 16 bit samples" +msgstr "¥â¥Î¥é¥ë¤Î 8¡¢16 ¥Ó¥Ã¥È¡¦¥µ¥ó¥×¥ë¤Î¤ß½èÍý¤Ç¤­¤Þ¤¹" + +#: app/sample-editor.c:1061 +msgid "Out of memory for sample data." +msgstr "¥µ¥ó¥×¥ë¡¦¥Ç¡¼¥¿¤Ë¥á¥â¥êÉÔ­¤Ç¤¹¡£" + +#: app/sample-editor.c:1066 +msgid "Read error." +msgstr "ÆÉ¤ß¹þ¤ß¥¨¥é¡¼¡£" + +#: app/sample-editor.c:1121 +msgid "Can't open file for writing." +msgstr "½ñ¤­¹þ¤ß¤Î¤¿¤á¤Ë¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó¡£" + +#: app/sample-editor.c:1158 +msgid "OK" +msgstr "λ²ò" + +#: app/sample-editor.c:1166 +msgid "Start sampling" +msgstr "¥µ¥ó¥×¥ê¥ó¥°³«»Ï" + +#: app/sample-editor.c:1201 app/sample-editor.c:1204 +msgid "Sampling Window" +msgstr "¥µ¥ó¥×¥ê¥ó¥°¡¦¥¦¥£¥ó¥É¥¦" + +#: app/sample-editor.c:1253 +msgid "out of memory while sampling..." +msgstr "¥µ¥ó¥×¥ê¥ó¥°Ãæ¤Ë¥á¥â¥êÉÔ­¤Ë¤Ê¤ê¤Þ¤·¤¿..." + +#: app/sample-editor.c:1300 +msgid "" +msgstr "<º£¥µ¥ó¥×¥ê¥ó¥°¤·¤Þ¤·¤¿>" + +#: app/sample-editor.c:1330 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" +"Ï¿²»¤·¤¿¥µ¥ó¥×¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤Þ¤¹¡£¤È¤Ë¤«¤¯¤½¤ì¤ò»ÈÍѤ" +"·¤Þ¤¹¡£" + +#: app/sample-editor.c:1362 +msgid "Normalize" +msgstr "" + +#: app/sample-editor.c:1363 +msgid "Execute" +msgstr "" + +#: app/sample-editor.c:1364 app/tips-dialog.c:172 +msgid "Close" +msgstr "ÊĤ¸¤ë" + +#: app/sample-editor.c:1373 app/sample-editor.c:1376 +#, fuzzy +msgid "Volume Ramping" +msgstr "²»ÎÌ" + +#: app/sample-editor.c:1393 +msgid "Perform linear volume fade on Selection" +msgstr "" + +#: app/sample-editor.c:1405 +msgid "Left [%]:" +msgstr "" + +#: app/sample-editor.c:1410 +msgid "Right [%]:" +msgstr "" + +#: app/tips-dialog.c:93 +msgid "SoundTracker Tip of the day" +msgstr "º£Æü¤Î SoundTracker ¤Îµ»" + +#: app/tips-dialog.c:156 +msgid "Previous Tip" +msgstr "Á°¤Îµ»" + +#: app/tips-dialog.c:164 +msgid "Next Tip" +msgstr "¼¡¤Îµ»" + +#: app/tips-dialog.c:184 +msgid "Show tip next time" +msgstr "¼¡²ó¤âµ»¤ò¸«¤»¤ë" + +#: app/track-editor.c:80 +msgid "Jazz Edit:" +msgstr "Jazz ÊÔ½¸" + +#: app/xm.c:161 +#, c-format +msgid "Pattern length out of range: %d.\n" +msgstr "¥Ñ¥¿¡¼¥óŤ¬ÈϰϤò±Û¤¨¤Þ¤·¤¿: %d.\n" + +#: app/xm.c:441 app/xm.c:510 +#, c-format +msgid "Invalid vibtype %d, using Sine.\n" +msgstr "ÉÔÀµ¤Ê¥Ð¥¤¥Ö¥ì¡¼¥·¥ç¥ó·¿ %d¡¢Àµ¸¹ÇȤò»ÈÍѤ·¤Þ¤¹¡£\n" + +#: app/xm.c:472 +msgid "File is no XI instrument." +msgstr "¥Õ¥¡¥¤¥ë¤¬ XI ³Ú´ï¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£" + +#: app/xm.c:482 +#, c-format +msgid "Unknown XI version 0x%x\n" +msgstr "̤ÃΤΠXI ¥Ð¡¼¥¸¥ç¥ó 0x%x ¤Ç¤¹\n" + +#: app/xm.c:702 +msgid "No FastTracker XM and no supported MOD format!" +msgstr "" +"FastTracker XM ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤â¥µ¥Ý¡¼¥È¤µ¤ì¤¿ MOD ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤â¤¢¤ê¤Þ¤»¤ó!" + +#: app/xm.c:716 app/xm.c:816 +msgid "Error while loading patterns." +msgstr "¥Ñ¥¿¡¼¥ó¤Î¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼¡£" + +#: app/xm.c:774 +msgid "Can't open file" +msgstr "¥Õ¥¡¥¤¥ë¤¬³«¤±¤Þ¤»¤ó" + +#: app/xm.c:788 +msgid "XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n" +msgstr "" +"XM ¥Ø¥Ã¥ÀŤ¬ 276 ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¶²¤é¤¯ pre-0.0.12 SoundTracker " +"¥â¥¸¥å¡¼¥ë¤Ç¤Ï? :-)\n" + +#: app/xm.c:822 +msgid "Error while loading instruments." +msgstr "³Ú´ï¤Î¥í¡¼¥ÉÃæ¤Ë¥¨¥é¡¼¡£" + +#: app/xm.c:833 +#, c-format +msgid "" +"Module contains sample(s) that are too long for the current mixer.\n" +"Maximum sample length is %d." +msgstr "" +"¥â¥¸¥å¡¼¥ë¤¬¸½ºß¤Î¥ß¥­¥µ¡¦¥â¥¸¥å¡¼¥ë¤Ë¤ÏĹ²á¤®¤ë¥µ¥ó¥×¥ë¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£\n" +"¥µ¥ó¥×¥ë¤ÎºÇÂçĹ¤Ï %d ¤Ç¤¹¡£" + +#~ msgid "driver_oss: write() returned -1.\n" +#~ msgstr "driver_oss: write() ¤¬ -1 ¤òÊÖ¤·¤Þ¤·¤¿¡£\n" + +#~ msgid "driver_oss: write not completely done.\n" +#~ msgstr "driver_oss: ½ñ¤­¹þ¤ß¤¬´°Á´¤Ë½ªÎ»¤·¤Æ¤¤¤Þ¤»¤ó¡£\n" + +#~ msgid "Save.." +#~ msgstr "Êݸ.." + +#~ msgid "Module" +#~ msgstr "¥â¥¸¥å¡¼¥ë" + +#~ msgid "Clear Song" +#~ msgstr "¶Ê¤Î¾Ãµî" + +#~ msgid "Delete unused instruments" +#~ msgstr "̤»ÈÍѳڴïºï½ü" + +#~ msgid "Error while writing." +#~ msgstr "½ñ¤­¹þ¤ßÃæ¥¨¥é¡¼¡£" diff -urN soundtracker-0.3.0/po/soundtracker.pot soundtracker-0.3.1/po/soundtracker.pot --- soundtracker-0.3.0/po/soundtracker.pot Fri Aug 13 20:46:34 1999 +++ soundtracker-0.3.1/po/soundtracker.pot Sun Aug 29 17:53:28 1999 @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 1999-08-13 20:46+0200\n" +"POT-Creation-Date: 1999-08-29 17:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,18 +45,10 @@ "%s" msgstr "" -#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:379 +#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 msgid "Required sound output format not supported.\n" msgstr "" -#: app/drivers/oss-output.c:95 -msgid "driver_oss: write() returned -1.\n" -msgstr "" - -#: app/drivers/oss-output.c:97 -msgid "driver_oss: write not completely done.\n" -msgstr "" - #: app/drivers/oss-output.c:136 #, c-format msgid "Estimated audio delay: %f microseconds" @@ -67,23 +59,27 @@ msgid "(%d samples)" msgstr "" -#: app/drivers/oss-output.c:189 +#: app/drivers/oss-output.c:185 +msgid "These changes won't take effect until you restart playing." +msgstr "" + +#: app/drivers/oss-output.c:197 msgid "Resolution:" msgstr "" -#: app/drivers/oss-output.c:199 +#: app/drivers/oss-output.c:207 msgid "Channels:" msgstr "" -#: app/drivers/oss-output.c:209 +#: app/drivers/oss-output.c:217 msgid "Frequency [Hz]:" msgstr "" -#: app/drivers/oss-output.c:219 +#: app/drivers/oss-output.c:227 msgid "Buffer Size:" msgstr "" -#: app/drivers/oss-output.c:346 +#: app/drivers/oss-output.c:354 #, c-format msgid "" "Couldn't open /dev/dsp for sound output:\n" @@ -106,11 +102,11 @@ msgid "Value" msgstr "" -#: app/envelope-box.c:748 app/gui.c:1059 +#: app/envelope-box.c:748 app/gui.c:1080 msgid "Insert" msgstr "" -#: app/envelope-box.c:754 app/gui.c:1066 +#: app/envelope-box.c:754 app/gui.c:1087 msgid "Delete" msgstr "" @@ -135,11 +131,11 @@ msgid "Loop" msgstr "" -#: app/envelope-box.c:875 app/sample-editor.c:262 +#: app/envelope-box.c:875 app/sample-editor.c:208 msgid "Start" msgstr "" -#: app/envelope-box.c:876 app/sample-editor.c:263 +#: app/envelope-box.c:876 app/sample-editor.c:209 msgid "End" msgstr "" @@ -171,19 +167,19 @@ msgid "`Save XM' saves all non-empty patterns" msgstr "" -#: app/gui-subs.c:364 +#: app/gui-subs.c:374 msgid "Question" msgstr "" -#: app/gui-subs.c:381 app/sample-editor.c:190 +#: app/gui-subs.c:391 app/sample-editor.c:1173 msgid "Cancel" msgstr "" -#: app/gui-subs.c:399 +#: app/gui-subs.c:409 msgid "Warning" msgstr "" -#: app/gui-subs.c:425 +#: app/gui-subs.c:435 msgid "Error!" msgstr "" @@ -191,148 +187,156 @@ msgid "Tempo" msgstr "" -#: app/gui.c:210 +#: app/gui.c:209 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" msgstr "" -#: app/gui.c:222 +#: app/gui.c:221 msgid "Are you sure you want to overwrite the file?" msgstr "" -#: app/gui.c:1050 +#: app/gui.c:1071 msgid "Song length" msgstr "" -#: app/gui.c:1051 +#: app/gui.c:1072 msgid "Current pos" msgstr "" -#: app/gui.c:1052 app/gui.c:1207 app/menubar.c:345 +#: app/gui.c:1073 app/gui.c:1228 msgid "Pattern" msgstr "" -#: app/gui.c:1053 +#: app/gui.c:1074 msgid "Restart pos" msgstr "" -#: app/gui.c:1121 +#: app/gui.c:1142 msgid "Load XM..." msgstr "" -#: app/gui.c:1122 +#: app/gui.c:1143 msgid "Save XM..." msgstr "" -#: app/gui.c:1160 +#: app/gui.c:1181 msgid "Play Song" msgstr "" -#: app/gui.c:1166 +#: app/gui.c:1187 msgid "Play Pattern" msgstr "" -#: app/gui.c:1172 +#: app/gui.c:1193 msgid "Stop" msgstr "" -#: app/gui.c:1191 +#: app/gui.c:1212 msgid "Number of Channels:" msgstr "" -#: app/gui.c:1223 +#: app/gui.c:1244 msgid "PatLength" msgstr "" -#: app/gui.c:1315 +#: app/gui.c:1336 msgid "Octave" msgstr "" -#: app/gui.c:1323 +#: app/gui.c:1344 msgid "Jump" msgstr "" -#: app/gui.c:1331 +#: app/gui.c:1352 msgid "Instr" msgstr "" -#: app/gui.c:1346 +#: app/gui.c:1367 msgid "Sample" msgstr "" -#: app/instrument-editor.c:72 +#: app/instrument-editor.c:74 msgid "VolFade" msgstr "" -#: app/instrument-editor.c:73 +#: app/instrument-editor.c:75 msgid "VibSpeed" msgstr "" -#: app/instrument-editor.c:74 +#: app/instrument-editor.c:76 msgid "VibDepth" msgstr "" -#: app/instrument-editor.c:75 +#: app/instrument-editor.c:77 msgid "VibSweep" msgstr "" -#: app/instrument-editor.c:120 +#: app/instrument-editor.c:153 msgid "Can't open file." msgstr "" -#: app/instrument-editor.c:139 +#: app/instrument-editor.c:172 msgid "Saving Instruments not yet supported." msgstr "" -#: app/instrument-editor.c:147 +#: app/instrument-editor.c:180 msgid "Sine" msgstr "" -#: app/instrument-editor.c:147 +#: app/instrument-editor.c:180 msgid "Square" msgstr "" -#: app/instrument-editor.c:147 +#: app/instrument-editor.c:180 msgid "Saw Down" msgstr "" -#: app/instrument-editor.c:147 +#: app/instrument-editor.c:180 msgid "Saw Up" msgstr "" -#: app/instrument-editor.c:151 +#: app/instrument-editor.c:184 msgid "Instrument Editor" msgstr "" -#: app/instrument-editor.c:162 +#: app/instrument-editor.c:193 msgid "Volume envelope" msgstr "" -#: app/instrument-editor.c:170 +#: app/instrument-editor.c:201 msgid "Panning envelope" msgstr "" -#: app/instrument-editor.c:187 +#: app/instrument-editor.c:218 msgid "Load Instrument.." msgstr "" -#: app/instrument-editor.c:188 +#: app/instrument-editor.c:219 msgid "Save Instrument.." msgstr "" -#: app/instrument-editor.c:190 +#: app/instrument-editor.c:221 msgid "Load XI" msgstr "" -#: app/instrument-editor.c:196 +#: app/instrument-editor.c:227 msgid "Save XI" msgstr "" -#: app/instrument-editor.c:216 +#: app/instrument-editor.c:247 msgid "Vibrato Type:" msgstr "" +#: app/instrument-editor.c:319 +msgid "Note:" +msgstr "" + +#: app/instrument-editor.c:337 +msgid "Initialize" +msgstr "" + #: app/keys.c:123 msgid "The key that inserts the special keyoff note for FastTracker modules." msgstr "" @@ -418,160 +422,292 @@ "in the Settings menu." msgstr "" -#: app/menubar.c:97 +#: app/menubar.c:96 msgid "Ok" msgstr "" -#: app/menubar.c:133 +#: app/menubar.c:132 msgid "" "Are you sure you want to do this?\n" "All changes will be lost!" msgstr "" -#: app/menubar.c:155 +#: app/menubar.c:154 msgid "" "Are you sure you want to quit?\n" "All changes will be lost!" msgstr "" -#: app/menubar.c:202 app/menubar.c:335 -msgid "Open.." +#: app/menubar.c:201 +msgid "_Open.." +msgstr "" + +#: app/menubar.c:203 +msgid "Save _as.." +msgstr "" + +#: app/menubar.c:208 +msgid "_Quit" msgstr "" -#: app/menubar.c:204 -msgid "Save as.." +#: app/menubar.c:215 +msgid "Clear _All" msgstr "" -#: app/menubar.c:209 app/menubar.c:338 -msgid "Quit" +#: app/menubar.c:217 +msgid "Clear _Patterns Only" msgstr "" -#: app/menubar.c:216 app/menubar.c:341 -msgid "Clear All" +#: app/menubar.c:219 +msgid "_Optimize Module" msgstr "" -#: app/menubar.c:218 -msgid "Clear Patterns Only" +#: app/menubar.c:226 +msgid "_Jazz Edit Mode" msgstr "" -#: app/menubar.c:220 app/menubar.c:343 -msgid "Optimize Module" +#: app/menubar.c:231 +msgid "_Transposition.." msgstr "" -#: app/menubar.c:227 app/menubar.c:346 -msgid "Find Unused Pattern" +#: app/menubar.c:238 +msgid "_Find Unused Pattern" msgstr "" -#: app/menubar.c:229 app/menubar.c:347 -msgid "Copy Current to Unused Pattern" +#: app/menubar.c:240 +msgid "_Copy Current to Unused Pattern" msgstr "" -#: app/menubar.c:231 app/menubar.c:348 -msgid "Clear Unused Patterns" +#: app/menubar.c:242 +msgid "C_lear Unused Patterns" msgstr "" -#: app/menubar.c:233 app/menubar.c:349 -msgid "Pack Patterns" +#: app/menubar.c:244 +msgid "_Pack Patterns" msgstr "" -#: app/menubar.c:240 app/menubar.c:352 -msgid "Load XI.." +#: app/menubar.c:251 +msgid "_Load XI.." msgstr "" -#: app/menubar.c:245 -msgid "Delete Unused Instruments" +#: app/menubar.c:256 +msgid "_Delete Unused Instruments" msgstr "" -#: app/menubar.c:253 app/menubar.c:357 -msgid "Display Oscilloscopes" +#: app/menubar.c:264 +msgid "Display _Oscilloscopes" msgstr "" -#: app/menubar.c:255 app/menubar.c:358 -msgid "Use Backing Store" +#: app/menubar.c:266 +msgid "Use _Backing Store" msgstr "" -#: app/menubar.c:260 app/menubar.c:360 -msgid "Keyboard Configuration.." +#: app/menubar.c:271 +msgid "_Keyboard Configuration.." msgstr "" -#: app/menubar.c:262 app/menubar.c:361 -msgid "Audio Configuration.." +#: app/menubar.c:273 +msgid "_Audio Configuration.." msgstr "" -#: app/menubar.c:264 app/menubar.c:362 -msgid "GUI Configuration.." +#: app/menubar.c:275 +msgid "_GUI Configuration.." msgstr "" -#: app/menubar.c:269 app/menubar.c:364 -msgid "Save Settings now" +#: app/menubar.c:280 +msgid "_Save Settings now" msgstr "" -#: app/menubar.c:271 app/menubar.c:365 -msgid "Save Settings on Exit" +#: app/menubar.c:282 +msgid "Save Settings on _Exit" msgstr "" -#: app/menubar.c:278 app/menubar.c:368 -msgid "About.." +#: app/menubar.c:289 +msgid "_About.." msgstr "" -#: app/menubar.c:283 app/menubar.c:370 -msgid "Show Tips.." +#: app/menubar.c:294 +msgid "Show _Tips.." msgstr "" -#: app/menubar.c:290 +#: app/menubar.c:301 msgid "_File" msgstr "" -#: app/menubar.c:291 +#: app/menubar.c:302 msgid "_Module" msgstr "" -#: app/menubar.c:292 +#: app/menubar.c:303 +msgid "_Edit" +msgstr "" + +#: app/menubar.c:304 msgid "_Pattern" msgstr "" -#: app/menubar.c:293 +#: app/menubar.c:305 msgid "_Instrument" msgstr "" -#: app/menubar.c:294 +#: app/menubar.c:306 msgid "_Settings" msgstr "" -#: app/menubar.c:295 +#: app/menubar.c:307 msgid "_Help" msgstr "" -#: app/menubar.c:334 -msgid "File" +#: app/menubar.c:335 +msgid "/_File" msgstr "" #: app/menubar.c:336 -msgid "Save.." +msgid "/File/_Open.." +msgstr "" + +#: app/menubar.c:337 +msgid "/File/Save _as.." +msgstr "" + +#: app/menubar.c:338 +msgid "/File/-" +msgstr "" + +#: app/menubar.c:339 +msgid "/File/_Quit" msgstr "" #: app/menubar.c:340 -msgid "Module" +msgid "/_Module" +msgstr "" + +#: app/menubar.c:341 +msgid "/Module/Clear _All" msgstr "" #: app/menubar.c:342 -msgid "Clear Song" +msgid "/Module/Clear _Patterns Only" +msgstr "" + +#: app/menubar.c:343 +msgid "/Module/_Optimize Module" +msgstr "" + +#: app/menubar.c:344 +msgid "/_Edit" +msgstr "" + +#: app/menubar.c:345 +msgid "/Edit/_Jazz Edit Mode" +msgstr "" + +#: app/menubar.c:346 +msgid "/Edit/-" +msgstr "" + +#: app/menubar.c:347 +msgid "/Edit/_Transposition.." +msgstr "" + +#: app/menubar.c:348 +msgid "/_Pattern" +msgstr "" + +#: app/menubar.c:349 +msgid "/Pattern/_Find Unused Pattern" +msgstr "" + +#: app/menubar.c:350 +msgid "/Pattern/_Copy Current to Unused Pattern" msgstr "" #: app/menubar.c:351 -msgid "Instrument" +msgid "/Pattern/C_lear Unused Patterns" +msgstr "" + +#: app/menubar.c:352 +msgid "/Pattern/_Pack Patterns" +msgstr "" + +#: app/menubar.c:353 +msgid "/_Instrument" msgstr "" #: app/menubar.c:354 -msgid "Delete unused instruments" +msgid "/Instrument/_Load XI.." +msgstr "" + +#: app/menubar.c:355 +msgid "/Instrument/-" msgstr "" #: app/menubar.c:356 -msgid "Settings" +msgid "/Instrument/_Delete Unused Instruments" +msgstr "" + +#: app/menubar.c:357 +msgid "/_Settings" +msgstr "" + +#: app/menubar.c:358 +msgid "/Settings/Display _Oscilloscopes" +msgstr "" + +#: app/menubar.c:359 +msgid "/Settings/Use _Backing Store" +msgstr "" + +#: app/menubar.c:360 app/menubar.c:364 +msgid "/Settings/-" +msgstr "" + +#: app/menubar.c:361 +msgid "/Settings/_Keyboard Configuration.." +msgstr "" + +#: app/menubar.c:362 +msgid "/Settings/_Audio Configuration.." +msgstr "" + +#: app/menubar.c:363 +msgid "/Settings/_GUI Configuration.." +msgstr "" + +#: app/menubar.c:365 +msgid "/Settings/_Save Settings now" +msgstr "" + +#: app/menubar.c:366 +msgid "/Settings/Save Settings on _Exit" msgstr "" #: app/menubar.c:367 -msgid "Help" +msgid "/_Help" +msgstr "" + +#: app/menubar.c:368 +msgid "/Help/_About.." +msgstr "" + +#: app/menubar.c:369 +msgid "/Help/-" +msgstr "" + +#: app/menubar.c:370 +msgid "/Help/Show _Tips.." +msgstr "" + +#: app/menubar.c:384 +msgid "/Settings/Display Oscilloscopes" +msgstr "" + +#: app/menubar.c:386 +msgid "/Settings/Use Backing Store" +msgstr "" + +#: app/menubar.c:388 +msgid "/Settings/Save Settings on Exit" msgstr "" #: app/module-info.c:116 @@ -590,7 +726,7 @@ msgid "Linear" msgstr "" -#: app/module-info.c:118 app/sample-editor.c:235 +#: app/module-info.c:118 app/sample-editor.c:168 msgid "Amiga" msgstr "" @@ -616,179 +752,215 @@ "home directory to store configuration files.\n" msgstr "" -#: app/sample-editor.c:175 -msgid "OK" -msgstr "" - -#: app/sample-editor.c:183 -msgid "Start sampling" -msgstr "" - -#: app/sample-editor.c:235 +#: app/sample-editor.c:167 msgid "No loop" msgstr "" -#: app/sample-editor.c:235 +#: app/sample-editor.c:169 msgid "PingPong" msgstr "" -#: app/sample-editor.c:236 +#: app/sample-editor.c:173 msgid "8 bits" msgstr "" -#: app/sample-editor.c:236 +#: app/sample-editor.c:174 msgid "16 bits" msgstr "" -#: app/sample-editor.c:240 +#: app/sample-editor.c:180 msgid "Sample Editor" msgstr "" -#: app/sample-editor.c:274 +#: app/sample-editor.c:220 msgid "Volume" msgstr "" -#: app/sample-editor.c:275 +#: app/sample-editor.c:221 msgid "Panning" msgstr "" -#: app/sample-editor.c:276 +#: app/sample-editor.c:222 msgid "Finetune" msgstr "" -#: app/sample-editor.c:287 +#: app/sample-editor.c:233 msgid "SelStart" msgstr "" -#: app/sample-editor.c:288 +#: app/sample-editor.c:234 msgid "SelEnd" msgstr "" -#: app/sample-editor.c:291 +#: app/sample-editor.c:237 msgid "Reset Sel" msgstr "" -#: app/sample-editor.c:296 -msgid "Relnote" +#: app/sample-editor.c:242 +msgid "RelNote" msgstr "" -#: app/sample-editor.c:297 +#: app/sample-editor.c:243 msgid "Length: 0" msgstr "" -#: app/sample-editor.c:310 +#: app/sample-editor.c:256 msgid "Load Sample.." msgstr "" -#: app/sample-editor.c:312 +#: app/sample-editor.c:257 msgid "Save WAV.." msgstr "" -#: app/sample-editor.c:315 +#: app/sample-editor.c:260 msgid "Load Sample" msgstr "" -#: app/sample-editor.c:324 +#: app/sample-editor.c:269 msgid "Save WAV" msgstr "" -#: app/sample-editor.c:331 +#: app/sample-editor.c:279 msgid "Clear" msgstr "" -#: app/sample-editor.c:337 +#: app/sample-editor.c:285 msgid "Monitor" msgstr "" -#: app/sample-editor.c:347 +#: app/sample-editor.c:291 +msgid "Volume Ramp" +msgstr "" + +#: app/sample-editor.c:301 msgid "Zoom to selection" msgstr "" -#: app/sample-editor.c:353 +#: app/sample-editor.c:307 msgid "Show all" msgstr "" -#: app/sample-editor.c:359 +#: app/sample-editor.c:313 msgid "Zoom in (+50%)" msgstr "" -#: app/sample-editor.c:365 +#: app/sample-editor.c:319 msgid "Zoom out (-50%)" msgstr "" -#: app/sample-editor.c:375 +#: app/sample-editor.c:325 +msgid "Resample" +msgstr "" + +#: app/sample-editor.c:336 msgid "Cut" msgstr "" -#: app/sample-editor.c:381 +#: app/sample-editor.c:342 msgid "Remove" msgstr "" -#: app/sample-editor.c:387 +#: app/sample-editor.c:348 msgid "Copy" msgstr "" -#: app/sample-editor.c:393 +#: app/sample-editor.c:354 msgid "Paste" msgstr "" -#: app/sample-editor.c:490 +#: app/sample-editor.c:360 +msgid "Filter" +msgstr "" + +#: app/sample-editor.c:460 #, c-format msgid "Length: %d" msgstr "" -#: app/sample-editor.c:870 +#: app/sample-editor.c:866 msgid "No memory for copybuffer.\n" msgstr "" -#: app/sample-editor.c:962 +#: app/sample-editor.c:958 msgid "" msgstr "" -#: app/sample-editor.c:1059 +#: app/sample-editor.c:1035 msgid "Can't read sample" msgstr "" -#: app/sample-editor.c:1065 +#: app/sample-editor.c:1041 msgid "Sample is too long for current mixer module. Loading anyway." msgstr "" -#: app/sample-editor.c:1079 +#: app/sample-editor.c:1055 msgid "Can only handle mono 8 and 16 bit samples" msgstr "" -#: app/sample-editor.c:1085 +#: app/sample-editor.c:1061 msgid "Out of memory for sample data." msgstr "" -#: app/sample-editor.c:1090 +#: app/sample-editor.c:1066 msgid "Read error." msgstr "" -#: app/sample-editor.c:1141 +#: app/sample-editor.c:1121 msgid "Can't open file for writing." msgstr "" -#: app/sample-editor.c:1173 -msgid "Error while writing." +#: app/sample-editor.c:1158 +msgid "OK" msgstr "" -#: app/sample-editor.c:1194 app/sample-editor.c:1197 +#: app/sample-editor.c:1166 +msgid "Start sampling" +msgstr "" + +#: app/sample-editor.c:1201 app/sample-editor.c:1204 msgid "Sampling Window" msgstr "" -#: app/sample-editor.c:1246 +#: app/sample-editor.c:1253 msgid "out of memory while sampling..." msgstr "" -#: app/sample-editor.c:1293 +#: app/sample-editor.c:1300 msgid "" msgstr "" -#: app/sample-editor.c:1325 +#: app/sample-editor.c:1330 msgid "Recorded sample is too long for current mixer module. Using it anyway." msgstr "" +#: app/sample-editor.c:1362 +msgid "Normalize" +msgstr "" + +#: app/sample-editor.c:1363 +msgid "Execute" +msgstr "" + +#: app/sample-editor.c:1364 app/tips-dialog.c:172 +msgid "Close" +msgstr "" + +#: app/sample-editor.c:1373 app/sample-editor.c:1376 +msgid "Volume Ramping" +msgstr "" + +#: app/sample-editor.c:1393 +msgid "Perform linear volume fade on Selection" +msgstr "" + +#: app/sample-editor.c:1405 +msgid "Left [%]:" +msgstr "" + +#: app/sample-editor.c:1410 +msgid "Right [%]:" +msgstr "" + #: app/tips-dialog.c:93 msgid "SoundTracker Tip of the day" msgstr "" @@ -799,10 +971,6 @@ #: app/tips-dialog.c:164 msgid "Next Tip" -msgstr "" - -#: app/tips-dialog.c:172 -msgid "Close" msgstr "" #: app/tips-dialog.c:184 diff -urN soundtracker-0.3.0/soundtracker.spec soundtracker-0.3.1/soundtracker.spec --- soundtracker-0.3.0/soundtracker.spec Fri Aug 13 20:54:54 1999 +++ soundtracker-0.3.1/soundtracker.spec Sun Aug 29 18:48:55 1999 @@ -1,6 +1,6 @@ %define name soundtracker -%define version 0.3.0 -%define release 1 +%define version 0.3.1 +%define release 2 %define prefix /usr Summary: Sound modules editor/player @@ -26,7 +26,7 @@ %setup %build -CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} +LINGUAS="ja" CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} gmake %install @@ -39,7 +39,7 @@ %doc ABOUT-NLS FAQ NEWS TODO README ChangeLog %{prefix}/bin/soundtracker %{prefix}/share/soundtracker/soundtracker_tips.txt -#%{prefix}/share/locale/*/*/* +%{prefix}/share/locale/*/*/* %clean rm -r $RPM_BUILD_ROOT