diff -urN soundtracker-0.3.4/AUTHORS soundtracker-0.3.5/AUTHORS --- soundtracker-0.3.4/AUTHORS Thu Sep 23 20:38:03 1999 +++ soundtracker-0.3.5/AUTHORS Wed Oct 6 11:49:56 1999 @@ -49,6 +49,8 @@ (ALSA support) Yuuki NINOMIYA (bug fix in menubar.c; i18n without GNOME) +Martin Andersson + (the SoundTracker logo) Translations @@ -63,3 +65,5 @@ (it) Zbigniew Chyla (pl) +German Jose Gomez Garcia + (es) diff -urN soundtracker-0.3.4/ChangeLog soundtracker-0.3.5/ChangeLog --- soundtracker-0.3.4/ChangeLog Sat Sep 25 17:25:21 1999 +++ soundtracker-0.3.5/ChangeLog Fri Oct 8 16:32:34 1999 @@ -1,3 +1,50 @@ +1999-10-08 Michael Krause + + * Released v0.3.5 + + * app/track-editor.c: Selection handling rewritten for multi-track + selections. + + * app/st-subs.c: Several new functions for dealing with parts of a + track (duplicating, clearing, pasting). + + * app/xm-player.c: Replaced sintab[] by sin(). + + * app/drivers/oss-output.c: Added code to make use of the + high-accuracy SNDCTL_DSP_GETOPTR call when available. Gets rid of + all the gettimeofday() calls. The old code is available as a + fallback, though. + +1999-10-07 Michael Krause + + * doc/hacking.texi: Old `HACKING' file extended to talk a little + bit about ST's internals. + +1999-10-06 Michael Krause + + * app/st-subs.c, app/menubar.c, app/track-editor.c: Insert track / + Delete track. + + * app/track-editor.c: Saving jazz edit settings on exit. + + * app/gui-settings.c, app/gui.c, app/sample-editor.c, + app/instrument-editor.c: Remember last used paths and store them + in a configuration file. + + * configure.in: Continue if sys/poll.h is found, but poll() isn't. + + * po: Updated it.po and ja.po; added es.po from German Jose Gomez + Garcia + +1999-09-26 Michael Krause + + * app/mixers/integer32-asm.[sh]: i386 Assembly mixing routines for + 16bit samples. These are only marginally faster than the original + C code, though. + + * app/mixers/integer32.c: lqmono renamed; cleaned up reverb code + to use arrays. + 1999-09-25 Michael Krause * Released v0.3.4 diff -urN soundtracker-0.3.4/HACKING soundtracker-0.3.5/HACKING --- soundtracker-0.3.4/HACKING Sat Sep 4 17:29:36 1999 +++ soundtracker-0.3.5/HACKING Thu Jan 1 01:00:00 1970 @@ -1,40 +0,0 @@ - -HACKING SOUNDTRACKER -===================== - -Please follow these rules if you want to donate code to the -SoundTracker project: - -* Coding Style. I prefer 4-space tabulators, and an indentation style -like this: - - if(something) { - work(); - } - -instead of: - - if (something) - { - work (); - } - -If you're using Emacs, you can simply use "M-x c-set-style cc-mode" - -* Add yourself to the AUTHORS file. - -* Add a ChangeLog entry. - -* Do a "make dist" in the main directory. This generates a new archive -containing your changes. Do NOT send me the whole archive, instead: - -* Generate a patch. Unpack the previously generated archive and the -original archive (into some other directory), and use - - diff -urN {original-directory} {your-directory} > patch - -to generate a file containing only your changes, and no auto-generated -files. - -* Send the patch to the `soundtracker-discuss' mailing-list. If you're -not subscribed, then subscribe first (see README file). diff -urN soundtracker-0.3.4/INSTALL soundtracker-0.3.5/INSTALL --- soundtracker-0.3.4/INSTALL Sat Sep 4 17:13:43 1999 +++ soundtracker-0.3.5/INSTALL Mon Sep 27 17:52:25 1999 @@ -40,22 +40,12 @@ this case. If SoundTracker keeps crashing as soon as you start it (with strange X I/O errors), you don't have them. -< You used to be able to download a precompiled version from my -homepage, but somehow I've lost the relevant file :-( > +You can download them from: -It's best not to install them over the old X libraries, but to put -them into a private directory instead and to let the shell environment -variable 'LD_LIBRARY_PATH' point to this directory before starting -SoundTracker, so they don't interfere with the other programs -installed on your computer: +ftp://ftp.soundtracker.org/pub/misc/libc5-threadsafe-libX11.tar.gz -in bash: +Install instructions are in the archive. - export LD_LIBRARY_PATH=/path/to/threadedxlibs/directory - -in csh/tcsh: - - setenv LD_LIBRARY_PATH /path/to/threadedxlibs/directory COMPILING & INSTALLING ======================= diff -urN soundtracker-0.3.4/Makefile.am soundtracker-0.3.5/Makefile.am --- soundtracker-0.3.4/Makefile.am Fri Sep 10 13:34:51 1999 +++ soundtracker-0.3.5/Makefile.am Fri Oct 8 16:32:13 1999 @@ -1,8 +1,8 @@ ## Process this file with automake to produce Makefile.in -SUBDIRS = po intl app +SUBDIRS = po intl doc app -EXTRA_DIST = TODO FAQ ABOUT-NLS soundtracker.spec soundtracker.desktop HACKING +EXTRA_DIST = TODO FAQ ABOUT-NLS soundtracker.spec soundtracker.desktop if USE_GNOME diff -urN soundtracker-0.3.4/Makefile.in soundtracker-0.3.5/Makefile.in --- soundtracker-0.3.4/Makefile.in Sat Sep 25 17:25:53 1999 +++ soundtracker-0.3.5/Makefile.in Fri Oct 8 16:33:08 1999 @@ -92,9 +92,9 @@ l = @l@ sedpath = @sedpath@ -SUBDIRS = po intl app +SUBDIRS = po intl doc app -EXTRA_DIST = TODO FAQ ABOUT-NLS soundtracker.spec soundtracker.desktop HACKING +EXTRA_DIST = TODO FAQ ABOUT-NLS soundtracker.spec soundtracker.desktop @USE_GNOME_TRUE@util_DATA = soundtracker.desktop @USE_GNOME_TRUE@utildir = $(datadir)/gnome/apps/Multimedia diff -urN soundtracker-0.3.4/NEWS soundtracker-0.3.5/NEWS --- soundtracker-0.3.4/NEWS Sat Sep 25 17:25:20 1999 +++ soundtracker-0.3.5/NEWS Fri Oct 8 16:30:31 1999 @@ -2,6 +2,13 @@ (This file lists only major user-visible changes; the ChangeLog file contains more details) +What is new in soundtracker-0.3.5 (08-Oct-1999): + +* Multi-track copy and paste +* Remember file requester paths and jazz edit settings +* Assembly mixing routines (faster) +* Spanish translation + What is new in soundtracker-0.3.4 (25-Sep-1999): * Row highlighting feature in the track editor diff -urN soundtracker-0.3.4/README soundtracker-0.3.5/README --- soundtracker-0.3.4/README Sat Sep 25 17:25:22 1999 +++ soundtracker-0.3.5/README Fri Oct 8 16:30:33 1999 @@ -4,7 +4,7 @@ http://www.soundtracker.org/ -------------------------------------------------------------- - v0.3.4 --- THIS IS A DEVELOPMENT VERSION! + v0.3.5 --- THIS IS A DEVELOPMENT VERSION! Written and (C) 1998-1999 by Michael Krause [ raw style / lego ] diff -urN soundtracker-0.3.4/TODO soundtracker-0.3.5/TODO --- soundtracker-0.3.4/TODO Sat Sep 25 17:23:21 1999 +++ soundtracker-0.3.5/TODO Fri Oct 8 16:30:34 1999 @@ -1,71 +1,92 @@ things to do and known bugs (in no particular order) ------------------------------------------------------- -alternative scope (rgb box or something) +====== GUI ========= -save jazz edit in config +TRACKER WIDGET: should work with arbitrary note types, effects, and so +on. should support per-cell background/foreground colors, fonts +should be configurable etc. extend xmnote. -sampling rate voll konfigurierbar machen... +CLAVIER: highlight currently played notes! + +SPINBUTTON: add a hexadecimal mode, so that tracker widget / gui use +is consistent (this is not easy, will have to copy gtkspinbutton.c and +change that). + +MAIN WINDOW "CONTROL PANEL": the scopes must be able to be replaced by +an instrument list or something similarly useful in case you don't +want the scopes there. the scopes could be put into their own window +or to the pre-0.1.1 position then. + +SAMPLE EDITOR: "play selection" button. (don't loop the sample then) + +GUI / MIXER: when window is hidden, deactivate the scopes computation +in the mixer + +GUI: alternative scope (rgb box or something) GUI-SETTINGS / TRACKER: h <-> b GNOME / AUTOMAKE: Use official gnome macros instead of the xchat -configure.in code. +configure.in code (arghl, cf. gnome-libs-2 proposal) SAMPLE EDITOR: lowpass / highpass / bandpass, mix two samples, down/upsample functions. SAMPLE EDITOR: needs some serious re-design (i mean the gui). -LOGO: start a soundtracker logo contest. - 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). [[ stefan hager? ]] -TRACK EDITOR: multi-track c'n'p - -TRACK EDITOR: insert / delete track function - TRACK EDITOR: copy/cut/paste via mouse SCOPE GROUP: toggle display of channel numbers. -GNOME: "can't create ~/.gnome directory" bug -- is this related to -setuid(getuid())? +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? make this configurable: protracker +(current one) or fasttracker like playlist. -SAMPLE EDITOR: "play selection" button. (don't loop the sample then) +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 +you want to quickly scan a directory containing 100 samples for a +specific one. on the other hand - if every program would provide +their own file selectors, the world would be a bad place. this one +would go into a separate notebook page (which could be put into its +own window as well, with the concept described above). probably +copy'n'paste from the gtk+ source code. -OSS-OUTPUT: correct time estimate according to numfrags value. +GUI: assign samples to numberpad. Then numberpad could act as a +drumpad (one key plays given sample at given frequency). -OSS-OUTPUT.C: get_play_time(): check for DSP_CAP_REALTIME and use -GETxPTR if available. +LOGO: add it somewhere -OSS-OUTPUT.C: make preferences come in effect immediately, without -having to restart the song. +GUI: bpm and tempo spins behave a little bit strange sometimes. -OSS-INPUT.C: add settings widget, including sampling source and volume -slider. +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. -SAMPLE-EDITOR.C / SAMPLING: support for other formats than 16 bit / -mono. +> - octave change - it should be configurable to change octave with +> F-keys or with "/","*" ("/" octave down, "*" octave up), and to +> switch editors with F-keys (F2 tracker, F3 instrument editor, F4 sample +> editor... - just like good old Scream Tracker). It's sometimes more +> comfortable to use Scream Tracker approach to keyboard :) +> Wasting all F-keys for octaves is not The Good Thing. -AUDIO.C: write short documentation about how the audio subsystem works +> - editor should be colourful (customize colors of samples, commands.. and +> fonts) MIXER POSITION / CLIPPING INDICATOR: update more often -TIME-BUFFER: rewrite, optimize, respect maximum time delta value. - -SAVE: wav output - INSTRUMENT EDITOR: "clear instrument", "save instrument" (save in XI format). -EVERYWHERE: use of pthread_create isn't quite consistent with use of -gthread_* functions everywhere else. - ENVELOPE-BOX: canvas should scroll if points are moved outside the current displayed region. @@ -81,35 +102,22 @@ GUI: add volume slide auto generator (Cxx) -SAMPLE DISPLAY: Fix for large sample lengths (overflow in -XPOS_TO_OFFSET macro). - -SAMPLE EDITOR: add 440hz reference tone - -DRIVER: write an esd driver +some kind of undo, especially for block operations -KEYS / GUI: make all keys configurable, even the "play song", "play -pattern" and "stop" keys... +====== PLAYER / LOADER ======== -CLAVIER: highlight currently played notes! +LOADER: support loading from archives -MIXER: remove mixer module. this concept is bogus. +SAMPLE IMPORT/EXPORT: XI, IFF and RAW formats. XM.C: loading chuck-boom.xm doesn't work! -MAIN WINDOW "CONTROL PANEL": the scopes must be able to be replaced by -an instrument list or something similarly useful in case you don't -want the scopes there. the scopes could be put into their own window -or to the pre-0.1.1 position then. - XM.C / MOD LOADER: mod.Anette has strange loop points PLAYER BUGS: e96-sache in flowerpower.main!, mod.rstchip.09, mod.savage, spotlight madmix, alice d., abyss-tr -- fix note retriggering when only instrument column is set. -LOADER: support loading from archives - XM-PLAYER: find the bug which causes ch->chFinalPitch to become zero in tru_funk.mod. @@ -120,69 +128,45 @@ PLAYER / MIXER: what happens if you use 9xx to jump behind the loop end? -DOCUMENTATION: write it. -MIXER: the pitchbend function is cool. what would be even cooler is if -SoundTracker could play two mods simultaneously; it could be used as a -pseudo-turntable module mixer then. something i always wanted to do. +====== DRIVERS ======= -MODINFO PAGE: new function: "sample used in module?" +DRIVER: write an esd driver -SAMPLE IMPORT/EXPORT: XI, IFF and RAW formats. +OSS-OUTPUT.C: make preferences come in effect immediately, without +having to restart the song. -SPINBUTTON: add a hexadecimal mode, so that tracker widget / gui use -is consistent. +OSS-INPUT.C: add settings widget, including sampling source and volume +slider. -GUI: every notebook page should be able to be put in its own window by -a single button click. +SAMPLE-EDITOR.C / SAMPLING: support for other formats than 16 bit / +mono. -MODULE INFO: find a way to make the clist widget set its column width -automatically rather than doing the wild size_allocate hack (look at -GMC source). -MIXER: some asm-optimized mixing code would be nice -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? 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 -you want to quickly scan a directory containing 100 samples for a -specific one. on the other hand - if every program would provide -their own file selectors, the world would be a bad place. this one -would go into a separate notebook page (which could be put into its -own window as well, with the concept described above). probably -copy'n'paste from the gtk+ source code. +====== MISC ====== -FILE REQUESTER: add default paths for samples and modules +GNOME: "can't create ~/.gnome directory" bug -- is this related to +setuid(getuid())? -MIXER: circumvent sample size limitation by using double's to store -pointers / lengths / loop points (or use gint64's?) +TIME-BUFFER: rewrite, optimize, respect maximum time delta value. -GUI: assign samples to numberpad. Then numberpad could act as a -drumpad (one key plays given sample at given frequency). +SAVE: wav output -> - octave change - it should be configurable to change octave with -> F-keys or with "/","*" ("/" octave down, "*" octave up), and to -> switch editors with F-keys (F2 tracker, F3 instrument editor, F4 sample -> editor... - just like good old Scream Tracker). It's sometimes more -> comfortable to use Scream Tracker approach to keyboard :) -> Wasting all F-keys for octaves is not The Good Thing. +EVERYWHERE: use of pthread_create isn't quite consistent with use of +gthread_* functions everywhere else. + +SAMPLE DISPLAY: Fix for large sample lengths (overflow in +XPOS_TO_OFFSET macro). -> - 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. -XM-PLAYER thread : re-nice-able :-) +====== FUTURE ======= MIDI-OUT (aka Fasttracker) : (Giles looking at this) +MIXER: the pitchbend function is cool. what would be even cooler is if +SoundTracker could play two mods simultaneously; it could be used as a +pseudo-turntable module mixer then. something i always wanted to do. diff -urN soundtracker-0.3.4/app/Makefile.in soundtracker-0.3.5/app/Makefile.in --- soundtracker-0.3.4/app/Makefile.in Sat Sep 25 17:26:00 1999 +++ soundtracker-0.3.5/app/Makefile.in Fri Oct 8 16:33:12 1999 @@ -330,7 +330,7 @@ xm-player.h tracker.h main.h keys.h instrument-editor.h \ sample-editor.h driver-in.h track-editor.h scope-group.h \ sample-display.h module-info.h preferences.h menubar.h \ - tips-dialog.h + tips-dialog.h gui-settings.h gui-settings.o: gui-settings.c ../config.h i18n.h gui-settings.h \ gui-subs.h preferences.h scope-group.h sample-display.h \ track-editor.h xm.h mixer.h tracker.h extspinbutton.h @@ -338,12 +338,12 @@ instrument-editor.o: instrument-editor.c i18n.h ../config.h \ instrument-editor.h xm.h mixer.h envelope-box.h st-subs.h gui.h \ gui-subs.h keys.h track-editor.h tracker.h clavier.h errors.h \ - sample-editor.h driver-in.h driver.h + sample-editor.h driver-in.h driver.h gui-settings.h keys.o: keys.c ../config.h i18n.h keys.h gui-subs.h gui.h menubar.h \ 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 menubar.h + audioconfig.h tips-dialog.h menubar.h track-editor.h tracker.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 \ @@ -373,7 +373,7 @@ track-editor.o: track-editor.c i18n.h ../config.h track-editor.h xm.h \ mixer.h tracker.h gui.h st-subs.h keys.h audio.h driver-out.h \ driver.h time-buffer.h main.h gui-settings.h sample-editor.h \ - driver-in.h gui-subs.h + driver-in.h gui-subs.h preferences.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 \ diff -urN soundtracker-0.3.4/app/audioconfig.c soundtracker-0.3.5/app/audioconfig.c --- soundtracker-0.3.4/app/audioconfig.c Fri Sep 10 13:14:40 1999 +++ soundtracker-0.3.5/app/audioconfig.c Sun Sep 26 16:56:25 1999 @@ -147,7 +147,6 @@ g_assert(active != -1); // Now update the GUI -printf("obj changed.\n"); cw_currentobject = n; if(driverwidget) { gtk_container_remove(GTK_CONTAINER(cw_hbox), driverwidget); diff -urN soundtracker-0.3.4/app/drivers/Makefile.in soundtracker-0.3.5/app/drivers/Makefile.in --- soundtracker-0.3.4/app/drivers/Makefile.in Sat Sep 25 17:26:03 1999 +++ soundtracker-0.3.5/app/drivers/Makefile.in Fri Oct 8 16:33:14 1999 @@ -221,9 +221,6 @@ oss-output.o: oss-output.c ../../config.h ../i18n.h ../driver-out.h \ ../driver.h ../mixer.h ../errors.h ../gui-subs.h \ ../preferences.h -test-output.o: test-output.c ../../config.h ../i18n.h ../driver-out.h \ - ../driver.h ../mixer.h ../errors.h ../gui-subs.h \ - ../preferences.h info-am: info: info-am diff -urN soundtracker-0.3.4/app/drivers/oss-output.c soundtracker-0.3.5/app/drivers/oss-output.c --- soundtracker-0.3.4/app/drivers/oss-output.c Sun Aug 22 17:50:25 1999 +++ soundtracker-0.3.5/app/drivers/oss-output.c Fri Oct 8 13:51:47 1999 @@ -58,6 +58,7 @@ int fragsize; int numfrags; int mf; + gboolean realtimecaps; GMutex *configmutex; @@ -98,9 +99,11 @@ } } - gettimeofday(&tv, NULL); - d->outtime = tv.tv_sec + tv.tv_usec / 1e6; - d->playtime += (double) d->fragsize / d->playrate; + if(!d->realtimecaps) { + gettimeofday(&tv, NULL); + d->outtime = tv.tv_sec + tv.tv_usec / 1e6; + d->playtime += (double) d->fragsize / d->playrate; + } } d->firstpoll = FALSE; @@ -409,6 +412,9 @@ d->fragsize = info.fragsize; d->numfrags = info.fragstotal; + ioctl(d->soundfd, SNDCTL_DSP_GETCAPS, &i); + d->realtimecaps = i & DSP_CAP_REALTIME; + d->sndbuf = calloc(1, d->fragsize); if(d->stereo == 1) { @@ -433,13 +439,22 @@ oss_get_play_time (void *dp) { oss_driver * const d = dp; - struct timeval tv; - double curtime; - gettimeofday(&tv, NULL); - curtime = tv.tv_sec + tv.tv_usec / 1e6; + if(d->realtimecaps) { + count_info info; + + ioctl(d->soundfd, SNDCTL_DSP_GETOPTR, &info); - return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); + return (double)info.bytes / (d->stereo + 1) / (d->bits / 8) / d->playrate; + } else { + struct timeval tv; + double curtime; + + gettimeofday(&tv, NULL); + curtime = tv.tv_sec + tv.tv_usec / 1e6; + + return d->playtime + curtime - d->outtime - d->numfrags * ((double) d->fragsize / d->playrate); + } } static gboolean diff -urN soundtracker-0.3.4/app/gui-settings.c soundtracker-0.3.5/app/gui-settings.c --- soundtracker-0.3.4/app/gui-settings.c Sat Sep 25 12:44:45 1999 +++ soundtracker-0.3.5/app/gui-settings.c Wed Oct 6 12:36:47 1999 @@ -51,6 +51,12 @@ 500000, 0, + + "~/", + "~/", + "~/", + "~/", + "~/", }; static GtkWidget *configwindow = NULL; @@ -280,6 +286,18 @@ prefs_get_int(f, "save-all-non-empty-patterns", &gui_settings.save_all_patterns); fclose(f); } + + sprintf(buf, "%s/settings-always", prefs_get_prefsdir()); + + f = fopen(buf, "rb"); + if(f) { + prefs_get_string(f, "loadmod-path", gui_settings.loadmod_path); + prefs_get_string(f, "savemod-path", gui_settings.savemod_path); + prefs_get_string(f, "loadsmpl-path", gui_settings.loadsmpl_path); + prefs_get_string(f, "savesmpl-path", gui_settings.savesmpl_path); + prefs_get_string(f, "loadinstr-path", gui_settings.loadinstr_path); + fclose(f); + } } void @@ -306,6 +324,28 @@ prefs_put_int(f, "tracker-update-frequency", gui_settings.tracker_update_freq); prefs_put_int(f, "scopes-update-frequency", gui_settings.scopes_update_freq); prefs_put_int(f, "save-all-non-empty-patterns", gui_settings.save_all_patterns); + + fclose(f); +} + +void +gui_settings_save_config_always (void) +{ + char buf[256]; + FILE *f; + + prefs_check_prefs_dir(); + sprintf(buf, "%s/settings-always", prefs_get_prefsdir()); + + f = fopen(buf, "wb"); + if(!f) + return; + + prefs_put_string(f, "loadmod-path", gui_settings.loadmod_path); + prefs_put_string(f, "savemod-path", gui_settings.savemod_path); + prefs_put_string(f, "loadsmpl-path", gui_settings.loadsmpl_path); + prefs_put_string(f, "savesmpl-path", gui_settings.savesmpl_path); + prefs_put_string(f, "loadinstr-path", gui_settings.loadinstr_path); fclose(f); } diff -urN soundtracker-0.3.4/app/gui-settings.h soundtracker-0.3.5/app/gui-settings.h --- soundtracker-0.3.4/app/gui-settings.h Sat Sep 25 12:25:19 1999 +++ soundtracker-0.3.5/app/gui-settings.h Wed Oct 6 12:25:30 1999 @@ -41,6 +41,12 @@ int scopes_buffer_size; gboolean save_all_patterns; + + gchar loadmod_path[128]; + gchar savemod_path[128]; + gchar loadsmpl_path[128]; + gchar savesmpl_path[128]; + gchar loadinstr_path[128]; } gui_prefs; extern gui_prefs gui_settings; @@ -49,5 +55,6 @@ void gui_settings_load_config (void); void gui_settings_save_config (void); +void gui_settings_save_config_always (void); #endif /* _ST_GUI_SETTINGS_H */ diff -urN soundtracker-0.3.4/app/gui-subs.c soundtracker-0.3.5/app/gui-subs.c --- soundtracker-0.3.4/app/gui-subs.c Sun Aug 22 16:44:04 1999 +++ soundtracker-0.3.5/app/gui-subs.c Wed Oct 6 12:34:59 1999 @@ -169,6 +169,18 @@ return window; } +void +file_selection_save_path (const gchar *fn, + gchar *store) +{ + gchar *dn = g_dirname(fn); + + strncpy(store, dn, 127); + strncat(store, "/", 127); + + g_free(dn); +} + static void gui_subs_slider_update_1 (GtkWidget *w, gui_subs_slider *s) diff -urN soundtracker-0.3.4/app/gui-subs.h soundtracker-0.3.5/app/gui-subs.h --- soundtracker-0.3.4/app/gui-subs.h Sat Aug 21 18:23:18 1999 +++ soundtracker-0.3.5/app/gui-subs.h Wed Oct 6 12:34:59 1999 @@ -26,6 +26,8 @@ GtkWidget* file_selection_create (const gchar *title, void(*clickfunc)()); +void file_selection_save_path (const gchar *fn, + gchar *store); int find_current_toggle (GtkWidget **widgets, int count); diff -urN soundtracker-0.3.4/app/gui.c soundtracker-0.3.5/app/gui.c --- soundtracker-0.3.4/app/gui.c Fri Sep 10 12:49:56 1999 +++ soundtracker-0.3.5/app/gui.c Wed Oct 6 12:34:59 1999 @@ -55,6 +55,7 @@ #include "menubar.h" #include "time-buffer.h" #include "tips-dialog.h" +#include "gui-settings.h" int gui_playing_mode = 0; GtkWidget *editing_toggle; @@ -204,6 +205,7 @@ gtk_widget_hide(GTK_WIDGET(fs)); if(fs == GTK_FILE_SELECTION(gui_loadwindow)) { + file_selection_save_path(fn, gui_settings.loadmod_path); if(xm->modified) { gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), _("Are you sure you want to free the current project?\nAll changes will be lost!"), @@ -215,6 +217,8 @@ } else { FILE *f = fopen(fn, "r"); + file_selection_save_path(fn, gui_settings.savemod_path); + if(f != NULL) { fclose(f); gnome_app_ok_cancel_modal(GNOME_APP(mainwindow), @@ -1134,7 +1138,9 @@ GTK_SIGNAL_FUNC (menubar_quit_requested), NULL); gui_loadwindow = file_selection_create(_("Load XM..."), file_selected); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui_loadwindow), gui_settings.loadmod_path); gui_savewindow = file_selection_create(_("Save XM..."), file_selected); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui_savewindow), gui_settings.savemod_path); mainvbox0 = gtk_vbox_new(FALSE, 0); gtk_container_border_width(GTK_CONTAINER(mainvbox0), 0); diff -urN soundtracker-0.3.4/app/instrument-editor.c soundtracker-0.3.5/app/instrument-editor.c --- soundtracker-0.3.4/app/instrument-editor.c Sun Aug 22 18:21:15 1999 +++ soundtracker-0.3.5/app/instrument-editor.c Wed Oct 6 12:34:59 1999 @@ -32,6 +32,7 @@ #include "errors.h" #include "sample-editor.h" #include "tracker.h" +#include "gui-settings.h" static GtkWidget *volenv, *panenv, *disableboxes[3]; static GtkWidget *instrument_editor_vibtype_w[4]; @@ -167,6 +168,7 @@ gtk_widget_hide(GTK_WIDGET(fs)); if(fs == GTK_FILE_SELECTION(instrument_editor_loadwindow)) { + file_selection_save_path(fn, gui_settings.loadinstr_path); instrument_editor_load_instrument(fn); } else { error_warning(_("Saving Instruments not yet supported.")); @@ -216,6 +218,7 @@ gtk_widget_show(box2); instrument_editor_loadwindow = file_selection_create(_("Load Instrument.."), instrument_editor_file_selected); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(instrument_editor_loadwindow), gui_settings.loadinstr_path); instrument_editor_savewindow = file_selection_create(_("Save Instrument.."), instrument_editor_file_selected); thing = gtk_button_new_with_label(_("Load XI")); diff -urN soundtracker-0.3.4/app/main.c soundtracker-0.3.5/app/main.c --- soundtracker-0.3.4/app/main.c Fri Sep 10 13:31:17 1999 +++ soundtracker-0.3.5/app/main.c Wed Oct 6 15:57:47 1999 @@ -34,6 +34,7 @@ #include "audioconfig.h" #include "tips-dialog.h" #include "menubar.h" +#include "track-editor.h" #include #include @@ -53,7 +54,7 @@ #if 0 driver_out_test, #endif - mixer_lqmono; + mixer_integer32; g_thread_init(NULL); @@ -80,8 +81,8 @@ audio_ctlpipe = pipea[1]; audio_backpipe = pipeb[0]; - // The mixer module stuff will probably go away. - mixer = &mixer_lqmono; + /* Mixer modules can't be changed through the GUI at the moment */ + mixer = &mixer_integer32; #if 0 drivers[DRIVER_OUTPUT] = g_list_append(drivers[DRIVER_OUTPUT], @@ -110,6 +111,7 @@ if(gui_init(argc, argv)) { audioconfig_load_config(); + track_editor_load_config(); gtk_main(); @@ -120,7 +122,9 @@ audioconfig_save_config(); } + gui_settings_save_config_always(); tips_dialog_save_settings(); + track_editor_save_config(); return 0; } else { diff -urN soundtracker-0.3.4/app/menubar.c soundtracker-0.3.5/app/menubar.c --- soundtracker-0.3.4/app/menubar.c Fri Sep 10 12:56:24 1999 +++ soundtracker-0.3.5/app/menubar.c Wed Oct 6 16:13:18 1999 @@ -213,7 +213,9 @@ track_editor_mark_selection, track_editor_cut_selection, track_editor_copy_selection, - track_editor_paste_selection + track_editor_paste_selection, + track_editor_insert_track, + track_editor_delete_track }; functions[a](t); @@ -222,9 +224,9 @@ #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_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, @@ -264,6 +266,11 @@ GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_COPY, GDK_F4, GDK_SHIFT_MASK, NULL }, { GNOME_APP_UI_ITEM, N_("_Paste"), NULL, menubar_handle_edit_menu, (gpointer)5, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_PASTE, GDK_F5, GDK_SHIFT_MASK, NULL }, + { GNOME_APP_UI_ITEM, N_("_Insert"), NULL, menubar_handle_edit_menu, (gpointer)10, NULL, + GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, + { GNOME_APP_UI_ITEM, N_("_Delete"), NULL, menubar_handle_edit_menu, (gpointer)11, NULL, + GNOME_APP_PIXMAP_NONE, 0, 0, 0, NULL }, + GNOMEUIINFO_END }; @@ -287,7 +294,7 @@ GNOMEUIINFO_SEPARATOR, - { GNOME_APP_UI_ITEM, N_("_Transposition.."), NULL, transposition_dialog, (gpointer)0, NULL, + { GNOME_APP_UI_ITEM, N_("Transp_osition..."), NULL, transposition_dialog, (gpointer)0, NULL, GNOME_APP_PIXMAP_NONE, 0, 'T', GDK_CONTROL_MASK, NULL }, GNOMEUIINFO_SEPARATOR, @@ -313,7 +320,7 @@ }; 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, @@ -333,13 +340,13 @@ 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_("_Playback Effects.."), NULL, effectsconfig_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_Playback Effects..."), NULL, effectsconfig_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, @@ -353,14 +360,14 @@ }; 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 }, - { GNOME_APP_UI_ITEM, N_("_XM Effects.."), NULL, cheat_sheet_dialog, NULL, NULL, + { GNOME_APP_UI_ITEM, N_("_XM Effects..."), NULL, cheat_sheet_dialog, NULL, NULL, GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BOOK_RED, 'H', GDK_CONTROL_MASK, NULL }, GNOMEUIINFO_END @@ -402,8 +409,8 @@ /* 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/_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, "" }, @@ -413,7 +420,7 @@ { 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_("/Edit/_Transposition..."), "T", transposition_dialog, 0 }, { N_("/Edit/-"), NULL, NULL, 0, "" }, { N_("/Edit/_Pattern"), NULL, NULL, 0, "" }, { N_("/Edit/Pattern/C_ut"), "F3", menubar_handle_edit_menu, 0 }, @@ -423,6 +430,8 @@ { N_("/Edit/Track/C_ut"), "F3", menubar_handle_edit_menu, 3 }, { N_("/Edit/Track/_Copy"), "F4", menubar_handle_edit_menu, 4 }, { N_("/Edit/Track/_Paste"), "F5", menubar_handle_edit_menu, 5 }, + { N_("/Edit/Track/_Insert"), NULL, menubar_handle_edit_menu, 10 }, + { N_("/Edit/Track/_Delete"), NULL, menubar_handle_edit_menu, 11 }, { N_("/Edit/_Selection"), NULL, NULL, 0, "" }, { N_("/Edit/Selection/_Mark"), "B", menubar_handle_edit_menu, 6 }, { N_("/Edit/Selection/C_ut"), "X", menubar_handle_edit_menu, 7 }, @@ -434,25 +443,25 @@ { 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/_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/_Playback Effects.."), NULL, effectsconfig_dialog, 0 }, - { N_("/Settings/_GUI Configuration.."), NULL, gui_settings_dialog, 0 }, + { N_("/Settings/_Keyboard Configuration..."), NULL, keys_dialog, 0 }, + { N_("/Settings/_Audio Configuration..."), NULL, audioconfig_dialog, 0 }, + { N_("/Settings/_Playback Effects..."), NULL, effectsconfig_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/_About..."), NULL, about_dialog, 0 }, { N_("/Help/-"), NULL, NULL, 0, "" }, - { N_("/Help/Show _Tips.."), NULL, tips_dialog_create, 0 }, - { N_("/Help/_XM Effects.."), "H", cheat_sheet_dialog, 0 }, + { N_("/Help/Show _Tips..."), NULL, tips_dialog_create, 0 }, + { N_("/Help/_XM Effects..."), "H", cheat_sheet_dialog, 0 }, }; void diff -urN soundtracker-0.3.4/app/mixer.h soundtracker-0.3.5/app/mixer.h --- soundtracker-0.3.4/app/mixer.h Fri Sep 3 15:30:23 1999 +++ soundtracker-0.3.5/app/mixer.h Sun Sep 26 17:54:49 1999 @@ -126,8 +126,4 @@ ST_MIXER_FORMAT_STEREO = 16, } STMixerFormat; -//void mixer_mix_format (STMixerFormat, int stereo); -//void mixer_set_frequency (guint16); -//void mixer_prepare (void); - #endif /* _MIXER_H */ diff -urN soundtracker-0.3.4/app/mixers/Makefile.am soundtracker-0.3.5/app/mixers/Makefile.am --- soundtracker-0.3.4/app/mixers/Makefile.am Thu Nov 12 19:46:03 1998 +++ soundtracker-0.3.5/app/mixers/Makefile.am Sun Sep 26 18:05:46 1999 @@ -2,6 +2,6 @@ noinst_LIBRARIES = libmixers.a libmixers_a_SOURCES = \ - lqmono.c + integer32.c integer32-asm.S integer32-asm.h INCLUDES = -I.. diff -urN soundtracker-0.3.4/app/mixers/Makefile.in soundtracker-0.3.5/app/mixers/Makefile.in --- soundtracker-0.3.4/app/mixers/Makefile.in Sat Sep 25 17:26:05 1999 +++ soundtracker-0.3.5/app/mixers/Makefile.in Fri Oct 8 16:33:15 1999 @@ -94,7 +94,7 @@ noinst_LIBRARIES = libmixers.a -libmixers_a_SOURCES = lqmono.c +libmixers_a_SOURCES = integer32.c integer32-asm.S integer32-asm.h INCLUDES = -I.. @@ -109,7 +109,7 @@ LDFLAGS = @LDFLAGS@ LIBS = @LIBS@ libmixers_a_LIBADD = -libmixers_a_OBJECTS = lqmono.o +libmixers_a_OBJECTS = integer32.o integer32-asm.o AR = ar CFLAGS = @CFLAGS@ COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @@ -213,7 +213,7 @@ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done -lqmono.o: lqmono.c ../../config.h ../mixer.h +integer32.o: integer32.c ../../config.h ../mixer.h integer32-asm.h info-am: info: info-am diff -urN soundtracker-0.3.4/app/mixers/integer32-asm.S soundtracker-0.3.5/app/mixers/integer32-asm.S --- soundtracker-0.3.4/app/mixers/integer32-asm.S Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/app/mixers/integer32-asm.S Sun Sep 26 18:10:02 1999 @@ -0,0 +1,228 @@ + +/* + * The Real SoundTracker - Assembly routines for the mixer (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. + + -------------------------------------------------------------------------- + + The first code ever that I've written in i386 Assembly. It's not been + optimized for pairing / pipelining, and it's only marginally faster than + the C version on my K6-2 @400 (12-13% instead of 14% CPU usage with + astaris.xm -- stereo_16_scopes, that is). + + -------------------------------------------------------------------------- + */ + +#if defined(__i386__) + +#define ACCURACY 12 + +.text + +.globl mixerasm_stereo_16_scopes +mixerasm_stereo_16_scopes: + pushl %ebp + movl %esp,%ebp + + pushl %edi + pushl %esi + pushl %ebx + pushl %ecx + pushl %edx + + movl 8(%ebp),%eax # eax = fixed-point sample position + movl 16(%ebp),%esi # esi = source sample data + movl 20(%ebp),%ecx # ecx = destination mixed data (32bit) + movl 24(%ebp),%edi # edi = destination scope data (8bit) + movl 40(%ebp),%esp # esp = loop counter + # ebx, edx = working registers +.0: + movl %eax,%ebx # Get sample into edx + sarl $ACCURACY,%ebx + movswl (%esi,%ebx,2),%edx + + imull 28(%ebp),%edx # Apply volume + + movl %edx,%ebx # left channel + imull 32(%ebp),%ebx + sarl $6,%ebx + addl %ebx,(%ecx) + + movl %edx, %ebx # right channel + imull 36(%ebp),%ebx + sarl $6,%ebx + addl %ebx,4(%ecx) + sarl $6,%edx + + addl $8,%ecx # (increment mixed data pointer) + movb %dh,(%edi) # Store scope data + addl 12(%ebp),%eax # (increment sample position pointer) + + inc %edi # (increment scope data pointer) + + decl %esp # loop + jnz .0 + + lea -20(%ebp),%esp + + popl %edx + popl %ecx + popl %ebx + popl %esi + popl %edi + + leave + ret + +.globl mixerasm_mono_16_scopes +mixerasm_mono_16_scopes: + pushl %ebp + movl %esp,%ebp + + pushl %edi + pushl %esi + pushl %ebx + pushl %ecx + pushl %edx + + movl 8(%ebp),%eax # eax = fixed-point sample position + movl 16(%ebp),%esi # esi = source sample data + movl 20(%ebp),%ecx # ecx = destination mixed data (32bit) + movl 24(%ebp),%edi # edi = destination scope data (8bit) + movl 32(%ebp),%esp # esp = loop counter + movl 28(%ebp),%ebx # ebx = volume + # edx = working register +.1: + movl %eax,%edx # Get sample into edx + sarl $ACCURACY,%edx + movswl (%esi,%edx,2),%edx + + imull %ebx,%edx # Apply volume + addl %edx,(%ecx) + + sarl $6,%edx + movb %dh,(%edi) # Store scope data + inc %edi # (increment scope data pointer) + + addl $4,%ecx + addl 12(%ebp),%eax # (increment sample position pointer) + + decl %esp # loop + jnz .1 + + lea -20(%ebp),%esp + + popl %edx + popl %ecx + popl %ebx + popl %esi + popl %edi + + leave + ret + +.globl mixerasm_stereo_16 +mixerasm_stereo_16: + pushl %ebp + movl %esp,%ebp + + pushl %edi + pushl %esi + pushl %ebx + pushl %ecx + pushl %edx + + movl 8(%ebp),%eax # eax = fixed-point sample position + movl 12(%ebp),%ecx # ecx = increment + movl 16(%ebp),%esi # esi = source sample data + movl 20(%ebp),%edi # edi = destination mixed data (32bit) + movl 32(%ebp),%esp # esp = loop counter + # ebx, edx = working registers +.2: + movl %eax,%ebx # Get sample into edx + sarl $ACCURACY,%ebx + movswl (%esi,%ebx,2),%edx + movl %edx,%ebx + + imull 24(%ebp),%ebx # left channel + imull 28(%ebp),%edx # right channel + sarl $6,%ebx + sarl $6,%edx + addl %ebx,(%edi) + addl %edx,4(%edi) + + addl $8,%edi # (increment mixed data pointer) + addl %ecx,%eax # (increment sample position pointer) + + decl %esp # loop + jnz .2 + + lea -20(%ebp),%esp + + popl %edx + popl %ecx + popl %ebx + popl %esi + popl %edi + + leave + ret + +.globl mixerasm_mono_16 +mixerasm_mono_16: + pushl %ebp + movl %esp,%ebp + + pushl %edi + pushl %esi + pushl %ebx + pushl %ecx + pushl %edx + + movl 8(%ebp),%eax # eax = fixed-point sample position + movl 12(%ebp),%ecx # ecx = increment + movl 16(%ebp),%esi # esi = source sample data + movl 20(%ebp),%edi # edi = destination mixed data (32bit) + movl 28(%ebp),%esp # esp = loop counter + movl 24(%ebp),%ebx # ebx = volume + # edx = working register +.3: + movl %eax,%edx # Get sample into edx + sarl $ACCURACY,%edx + movswl (%esi,%edx,2),%edx + + imull %ebx,%edx # Apply volume + addl %ecx,%eax # (increment sample position pointer) + addl %edx,(%edi) + addl $4,%edi + + decl %esp # loop + jnz .3 + + lea -20(%ebp),%esp + + popl %edx + popl %ecx + popl %ebx + popl %esi + popl %edi + + leave + ret + +#endif /* defined(__i386__) */ diff -urN soundtracker-0.3.4/app/mixers/integer32-asm.h soundtracker-0.3.5/app/mixers/integer32-asm.h --- soundtracker-0.3.4/app/mixers/integer32-asm.h Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/app/mixers/integer32-asm.h Sun Sep 26 17:18:14 1999 @@ -0,0 +1,60 @@ + +/* + * The Real SoundTracker - Assembly routines for the mixer (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_MIXERASM_H +#define _ST_MIXERASM_H + +#include + +gint32 mixerasm_stereo_16_scopes (gint32 current, // 8 + gint32 increment, // 12 + gint16 *data, // 16 + gint32 *mixed, // 20 + gint8 *scopedata, // 24 + guint32 volume, // 28 + guint32 leftvol, // 32 + guint32 rightvol, // 36 + guint32 count); // 40 + +gint32 mixerasm_mono_16_scopes (gint32 current, // 8 + gint32 increment, // 12 + gint16 *data, // 16 + gint32 *mixed, // 20 + gint8 *scopedata, // 24 + guint32 volume, // 28 + guint32 count); // 32 + +gint32 mixerasm_stereo_16(gint32 current, // 8 + gint32 increment, // 12 + gint16 *data, // 16 + gint32 *mixed, // 20 + guint32 leftvol, // 24 + guint32 rightvol, // 28 + guint32 count); // 32 + +gint32 mixerasm_mono_16(gint32 current, // 8 + gint32 increment, // 12 + gint16 *data, // 16 + gint32 *mixed, // 20 + guint32 volume, // 24 + guint32 count); // 28 + +#endif /* _ST_MIXERASM_H */ diff -urN soundtracker-0.3.4/app/mixers/integer32.c soundtracker-0.3.5/app/mixers/integer32.c --- soundtracker-0.3.4/app/mixers/integer32.c Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/app/mixers/integer32.c Wed Oct 6 13:18:32 1999 @@ -0,0 +1,593 @@ + +/* + * The Real SoundTracker - Basic 32bit integers mixer. Probably the + * worst which you can come up with. + * + * Copyright (C) 1998-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 + +#include +#include +#include + +#include "mixer.h" +#include "integer32-asm.h" + +static int num_channels, mixfreq, amp = 8; +static gint32 *mixbuf = NULL; +static int mixbufsize = 0, clipflag; +static int stereo; + +/* Reverb control variables */ +#define REVERBERATION 110000L +static int RVc[8]; +static int Ridx[8]; +static gint32 *RVbufL[8]; +static gint32 *RVbufR[8]; +static guint32 md_reverb=0; + +typedef struct integer32_channel { + st_mixer_sample_info *sample; + + void *data; /* copy of sample->data */ + guint32 length; /* length of sample (converted) */ + int type; /* 16 or 8 bits */ + + int running; /* this channel is active */ + guint32 current; /* current playback position in sample (converted) */ + guint32 speed; /* sample playback speed (converted) */ + + guint32 loopstart; /* loop start (converted) */ + guint32 loopend; /* loop end (converted) */ + int loopflags; /* 0 none, 1 forward, 2 pingpong */ + int direction; /* current pingpong direction (+1 forward, -1 backward) */ + + int volume; /* 0..64 */ + float panning; /* -1.0 .. +1.0 */ +} integer32_channel; + +static integer32_channel channels[32]; + +#define ACCURACY 12 /* accuracy of the fixed point stuff, ALSO HARDCODED in the assembly routines!! */ + +#define MAX_SAMPLE_LENGTH ((1 << (32 - ACCURACY)) - 1) + +static void +integer32_setnumch (int n) +{ + g_assert(n >= 1 && n <= 32); + + num_channels = n; +} + +static void +integer32_updatesample (st_mixer_sample_info *si) +{ + int i; + integer32_channel *c; + + for(i = 0; i < 32; i++) { + c = &channels[i]; + if(c->sample != si || !c->running) { + continue; + } + + if(c->data != si->data + || c->length != MIN(si->length, MAX_SAMPLE_LENGTH) << ACCURACY + || c->loopflags != si->looptype) { + c->running = 0; + } + + /* No relevant data has changed. Don't stop the sample, but update + our local loop data instead. */ + c->loopstart = MIN(si->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopend = MIN(si->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopflags = si->looptype; + if(c->loopflags != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { + // we can be more clever here... + c->current = c->loopstart; + c->direction = 1; + } + } +} + +static gboolean +integer32_setmixformat (int format) +{ + if(format != 16) + return FALSE; + + return TRUE; +} + +static gboolean +integer32_setstereo (int on) +{ + stereo = on; + return TRUE; +} + +static void +integer32_setmixfreq (guint16 frequency) +{ + mixfreq = frequency; +} + +static void +integer32_setampfactor (float amplification) +{ + amp = 8 * amplification; +} + +static gboolean +integer32_getclipflag (void) +{ + return clipflag; +} + +static void +integer32_reset (void) +{ + int i; + + memset(channels, 0, sizeof(channels)); + + RVc[0] = (5000L * 44100) / REVERBERATION; + RVc[1] = (5078L * 44100) / REVERBERATION; + RVc[2] = (5313L * 44100) / REVERBERATION; + RVc[3] = (5703L * 44100) / REVERBERATION; + RVc[4] = (6250L * 44100) / REVERBERATION; + RVc[5] = (6953L * 44100) / REVERBERATION; + RVc[6] = (7813L * 44100) / REVERBERATION; + RVc[7] = (8828L * 44100) / REVERBERATION; + + for(i = 0; i <= 7; i++) { + Ridx[i] = 0; + } + + for(i = 0; i <= 7; i++) { + if(!RVbufL[i]) + if(!(RVbufL[i] = (gint32*) calloc((RVc[i]+1),sizeof(gint32)))) + exit(0); + memset(RVbufL[i], 0, (RVc[i]+1)*sizeof(gint32)); + } + + for(i = 0; i <= 7; i++) { + if(!RVbufR[i]) + if(!(RVbufR[i] = (gint32*) calloc((RVc[i]+1),sizeof(gint32)))) + exit(0); + memset(RVbufR[i], 0, (RVc[i]+1)*sizeof(gint32)); + } +} + +static void +integer32_setreverb (int r) +{ + md_reverb = r; + return; +} + +static int +integer32_getreverb (void) +{ + return md_reverb; +} + +static void +integer32_startnote (int channel, + st_mixer_sample_info *s) +{ + integer32_channel *c = &channels[channel]; + + c->sample = s; + c->data = s->data; + c->type = s->type; + c->length = MIN(s->length, MAX_SAMPLE_LENGTH) << ACCURACY; + c->running = 1; + c->speed = 1; + c->current = 0; + c->loopstart = MIN(s->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopend = MIN(s->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; + c->loopflags = s->looptype; + c->direction = 1; +} + +static void +integer32_stopnote (int channel) +{ + integer32_channel *c = &channels[channel]; + + c->running = 0; +} + +static void +integer32_setsmplpos (int channel, + guint32 offset) +{ + integer32_channel *c = &channels[channel]; + + if(offset < c->length >> ACCURACY) { + c->current = offset << ACCURACY; + c->direction = 1; + } else { + c->running = 0; + } +} + +static void +integer32_setfreq (int channel, + float frequency) +{ + integer32_channel *c = &channels[channel]; + + if(frequency > (0x7fffffff >> ACCURACY)) { + frequency = (0x7fffffff >> ACCURACY); + } + + c->speed = frequency * (1 << ACCURACY) / mixfreq; +} + +static void +integer32_setvolume (int channel, + float volume) +{ + integer32_channel *c = &channels[channel]; + + c->volume = 64 * volume; +} + +static void +integer32_setpanning (int channel, + float panning) +{ + integer32_channel *c = &channels[channel]; + + c->panning = panning; +} + +static void * +integer32_mix (void *dest, + guint32 count, + gint8 *scopebufs[], + int scopebuf_offset) +{ + int todo; + int i, j, t, *m, v; + integer32_channel *c; + int done, s; + int val; + int offs2end, oflcnt, looplen; + gint16 *sndbuf; + gint8 *scopedata = NULL; + int vl = 0; + int vr = 0; + gint32 speedup; + gint32 ReverbPct; + + if((stereo + 1) * count > mixbufsize) { + g_free(mixbuf); + mixbuf = g_new(gint32, (stereo + 1) * count); + mixbufsize = (stereo + 1) * count; + } + memset(mixbuf, 0, (stereo + 1) * 4 * count); + + for(i = 0; i < num_channels; i++) { + c = &channels[i]; + t = count; + m = mixbuf; + v = c->volume; + + if(scopebufs) + scopedata = scopebufs[i] + scopebuf_offset; + + if(!c->running) { + if(scopebufs) + memset(scopedata, 0, count); + continue; + } + + g_assert(c->sample->lock); + g_mutex_lock(c->sample->lock); + + while(t) { + /* Check how much of the sample we can fill in one run */ + if(c->loopflags) { + looplen = c->loopend - c->loopstart; + g_assert(looplen > 0); + if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { + offs2end = c->loopend - c->current; + if(offs2end <= 0) { + oflcnt = - offs2end / looplen; + offs2end += oflcnt * looplen; + c->current = c->loopstart - offs2end; + offs2end = c->loopend - c->current; + } + } else /* if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) */ { + if(c->direction == 1) + offs2end = c->loopend - c->current; + else + offs2end = c->current - c->loopstart; + + if(offs2end <= 0) { + oflcnt = - offs2end / looplen; + offs2end += oflcnt * looplen; + if((oflcnt && 1) ^ (c->direction == -1)) { + c->current = c->loopstart - offs2end; + offs2end = c->loopend - c->current; + c->direction = 1; + } else { + c->current = c->loopend + offs2end; + if(c->current == c->loopend) + c->current--; + offs2end = c->current - c->loopstart; + c->direction = -1; + } + } + } + g_assert(offs2end >= 0); + g_assert(c->speed != 0); + done = offs2end / c->speed + 1; + } else /* if(c->loopflags == LOOP_NO) */ { + done = (c->length - c->current) / c->speed; + if(!done) { + c->running = 0; + break; + } + } + + g_assert(done > 0); + + if(done > t) + done = t; + t -= done; + + g_assert(c->current >= 0 && (c->current >> ACCURACY) < c->length); + + if(stereo) { + vl = 64 - ((c->panning + 1.0) * 32); + vr = (c->panning + 1.0) * 32; + } + + /* This one does the actual mixing */ + /* One of the few occasions where templates would be really useful :) */ + if(c->type == ST_MIXER_SAMPLE_TYPE_16) { + gint16 *data = c->data; + if(scopebufs) { + if(stereo) { +#if defined(__i386__) + j = mixerasm_stereo_16_scopes(c->current, c->speed * c->direction, + data, m, scopedata, + v, vl, vr, + done); + + m += 2 * done; + scopedata += done; +#else + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + *scopedata++ = val >> 8 >> 6; + } +#endif + } else { +#if defined(__i386__) + j = mixerasm_mono_16_scopes(c->current, c->speed * c->direction, + data, m, scopedata, + v, + done); + + m += done; + scopedata += done; +#else + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += val; + *scopedata++ = val >> 8 >> 6; + } +#endif + } + } else { + if(stereo) { + vl *= v; + vr *= v; +#if defined(__i386__) + j = mixerasm_stereo_16(c->current, c->speed * c->direction, + data, m, + vl, vr, + done); + + m += 2 * done; + scopedata += done; +#else + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = data[j >> ACCURACY]; + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + } +#endif + } else { +#if defined(__i386__) + j = mixerasm_mono_16(c->current, c->speed * c->direction, + data, m, + v, + done); + + m += done; + scopedata += done; +#else + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * data[j >> ACCURACY]; + *m++ += val; + } +#endif + } + } + } else { + /* I've not done assembly routines for 8 bit mixing, sorry */ + gint8 *data = c->data; + if(scopebufs) { + if(stereo) { + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * (data[j >> ACCURACY] << 8); + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + *scopedata++ = val >> 8 >> 6; + } + } else { + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * (data[j >> ACCURACY] << 8); + *m++ += val; + *scopedata++ = val >> 8 >> 6; + } + } + } else { + if(stereo) { + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * (data[j >> ACCURACY] << 8); + *m++ += vl * val >> 6; + *m++ += vr * val >> 6; + } + } else { + for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { + val = v * (data[j >> ACCURACY] << 8); + *m++ += val; + } + } + } + } + + c->current = j; + } + + g_mutex_unlock(c->sample->lock); + } + +/* + Reverb code incorporated from libmikmod by Giles Constant. + This is absolutely not the right place for this, and we must think + about a general plug-in interface with per-channel effects some time. + */ + +#define COMPUTE_LECHO(n) RVbufL[n-1] [Ridx[n-1] ]=speedup+((ReverbPct*RVbufL[n-1] [Ridx[n-1] ])>>7) +#define COMPUTE_RECHO(n) RVbufR[n-1] [Ridx[n-1] ]=speedup+((ReverbPct*RVbufR[n-1] [Ridx[n-1] ])>>7) +#define INCR_LOOP(n) Ridx[n-1] ++; if (Ridx[n-1] >= RVc[n-1] ) Ridx[n-1] = 0; + + if(md_reverb != 0) { + ReverbPct=92+(md_reverb<<1); + + if (stereo) { + for(todo=0; todo < (count*2); todo+=2) { + + /* Compute the left channel echo buffers */ + speedup = mixbuf[todo]>>3; + COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); + COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); + + speedup = mixbuf[todo+1]>>3; + COMPUTE_RECHO(1); COMPUTE_RECHO(2); COMPUTE_RECHO(3); COMPUTE_RECHO(4); + COMPUTE_RECHO(5); COMPUTE_RECHO(6); COMPUTE_RECHO(7); COMPUTE_RECHO(8); + + INCR_LOOP(1); INCR_LOOP(2); INCR_LOOP(3); INCR_LOOP(4); + INCR_LOOP(5); INCR_LOOP(6); INCR_LOOP(7); INCR_LOOP(8); + + mixbuf[todo] += RVbufL[0][Ridx[0]]-RVbufL[1][Ridx[1]]+RVbufL[2][Ridx[2]]-RVbufL[3][Ridx[3]]+ + RVbufL[4][Ridx[4]]-RVbufL[5][Ridx[5]]+RVbufL[6][Ridx[6]]-RVbufL[7][Ridx[7]]; + mixbuf[todo+1] += RVbufR[0][Ridx[0]]-RVbufR[1][Ridx[1]]+RVbufR[2][Ridx[2]]-RVbufR[3][Ridx[3]]+ + RVbufR[4][Ridx[4]]-RVbufR[5][Ridx[5]]+RVbufR[6][Ridx[6]]-RVbufR[7][Ridx[7]]; + } + } else { // mono + for(todo=0; todo < (count); todo++) { + /* Compute the left channel echo buffers */ + speedup = mixbuf[todo]>>3; + COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); + COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); + + INCR_LOOP(1); INCR_LOOP(2); INCR_LOOP(3); INCR_LOOP(4); + INCR_LOOP(5); INCR_LOOP(6); INCR_LOOP(7); INCR_LOOP(8); + + mixbuf[todo] += RVbufL[0][Ridx[0]]-RVbufL[1][Ridx[1]]+RVbufL[2][Ridx[2]]-RVbufL[3][Ridx[3]]+ + RVbufL[4][Ridx[4]]-RVbufL[5][Ridx[5]]+RVbufL[6][Ridx[6]]-RVbufL[7][Ridx[7]]; + } + } + } + + /* modules with many channels get additional amplification here */ + t = (4 * log(num_channels) / log(4)) * 64 * 8; + + for(sndbuf = dest, clipflag = 0, todo = 0; todo < (stereo + 1) * count; todo++) { + gint32 a, b; + + a = mixbuf[todo]; + a *= amp; /* amplify */ + a /= t; + + b = CLAMP(a, -32768, 32767); + if(a != b) { + clipflag = 1; + } + + *sndbuf++ = b; + } + + return dest + (stereo + 1) * 2 * count; +} + +void +integer32_dumpstatus (st_mixer_channel_status array[]) +{ + int i; + + for(i = 0; i < 32; i++) { + if(channels[i].running) { + array[i].current_sample = channels[i].sample; + array[i].current_position = channels[i].current >> ACCURACY; + } else { + array[i].current_sample = NULL; + } + } +} + +st_mixer mixer_integer32 = { + "integer32", + "Basic 32bit integers mixer", + + integer32_setnumch, + integer32_updatesample, + integer32_setmixformat, + integer32_setstereo, + integer32_setmixfreq, + integer32_setampfactor, + integer32_setreverb, + integer32_getreverb, + integer32_getclipflag, + integer32_reset, + integer32_startnote, + integer32_stopnote, + integer32_setsmplpos, + integer32_setfreq, + integer32_setvolume, + integer32_setpanning, + integer32_mix, + integer32_dumpstatus, + + MAX_SAMPLE_LENGTH, + + NULL +}; diff -urN soundtracker-0.3.4/app/mixers/lqmono.c soundtracker-0.3.5/app/mixers/lqmono.c --- soundtracker-0.3.4/app/mixers/lqmono.c Wed Sep 8 14:32:45 1999 +++ soundtracker-0.3.5/app/mixers/lqmono.c Thu Jan 1 01:00:00 1970 @@ -1,580 +0,0 @@ - -/* - * The Real SoundTracker - Low-quality mono mixer. Probably the worst - * which you can come up with. - * - * Copyright (C) 1998-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 - -#include -#include -#include - -#include "mixer.h" - -static int num_channels, mixfreq, amp = 8; -static gint32 *mixbuf = NULL; -static int mixbufsize = 0, clipflag; -static int stereo; - -/* Reverb control variables */ -#define REVERBERATION 110000L -static int RVc1, RVc2, RVc3, RVc4, RVc5, RVc6, RVc7, RVc8; -static int Ridx1=0, Ridx2=0, Ridx3=0, Ridx4=0, Ridx5=0, Ridx6=0, Ridx7=0, Ridx8=0; -static gint32 *RVbufL1=NULL,*RVbufL2=NULL,*RVbufL3=NULL,*RVbufL4=NULL, - *RVbufL5=NULL,*RVbufL6=NULL,*RVbufL7=NULL,*RVbufL8=NULL; -static gint32 *RVbufR1=NULL,*RVbufR2=NULL,*RVbufR3=NULL,*RVbufR4=NULL, - *RVbufR5=NULL,*RVbufR6=NULL,*RVbufR7=NULL,*RVbufR8=NULL; -static guint32 md_reverb=0; - -typedef struct lqmono_channel { - st_mixer_sample_info *sample; - - void *data; /* copy of sample->data */ - guint32 length; /* length of sample (converted) */ - int type; /* 16 or 8 bits */ - - int running; /* this channel is active */ - guint32 current; /* current playback position in sample (converted) */ - guint32 speed; /* sample playback speed (converted) */ - - guint32 loopstart; /* loop start (converted) */ - guint32 loopend; /* loop end (converted) */ - int loopflags; /* 0 none, 1 forward, 2 pingpong */ - int direction; /* current pingpong direction (+1 forward, -1 backward) */ - - int volume; /* 0..64 */ - float panning; /* -1.0 .. +1.0 */ -} lqmono_channel; - -static lqmono_channel channels[32]; - -#define ACCURACY 12 /* accuracy of the fixed point stuff */ - -#define MAX_SAMPLE_LENGTH ((1 << (32 - ACCURACY)) - 1) - -static void -lqmono_setnumch (int n) -{ - g_assert(n >= 1 && n <= 32); - - num_channels = n; -} - -static void -lqmono_updatesample (st_mixer_sample_info *si) -{ - int i; - lqmono_channel *c; - - for(i = 0; i < 32; i++) { - c = &channels[i]; - if(c->sample != si || !c->running) { - continue; - } - - if(c->data != si->data - || c->length != MIN(si->length, MAX_SAMPLE_LENGTH) << ACCURACY - || c->loopflags != si->looptype) { - c->running = 0; - } - - /* No relevant data has changed. Don't stop the sample, but update - our local loop data instead. */ - c->loopstart = MIN(si->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopend = MIN(si->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopflags = si->looptype; - if(c->loopflags != ST_MIXER_SAMPLE_LOOPTYPE_NONE) { - // we can be more clever here... - c->current = c->loopstart; - c->direction = 1; - } - } -} - -static gboolean -lqmono_setmixformat (int format) -{ - if(format != 16) - return FALSE; - - return TRUE; -} - -static gboolean -lqmono_setstereo (int on) -{ - stereo = on; - return TRUE; -} - -static void -lqmono_setmixfreq (guint16 frequency) -{ - mixfreq = frequency; -} - -static void -lqmono_setampfactor (float amplification) -{ - amp = 8 * amplification; -} - -static gboolean -lqmono_getclipflag (void) -{ - return clipflag; -} - -static void -lqmono_reset (void) -{ - memset(channels, 0, sizeof(channels)); - - RVc1 = (5000L * 44100) / REVERBERATION; - RVc2 = (5078L * 44100) / REVERBERATION; - RVc3 = (5313L * 44100) / REVERBERATION; - RVc4 = (5703L * 44100) / REVERBERATION; - RVc5 = (6250L * 44100) / REVERBERATION; - RVc6 = (6953L * 44100) / REVERBERATION; - RVc7 = (7813L * 44100) / REVERBERATION; - RVc8 = (8828L * 44100) / REVERBERATION; - - Ridx1 = 0, Ridx2 = 0, Ridx3 = 0, Ridx4 = 0; - Ridx5 = 0, Ridx6 = 0, Ridx7 = 0, Ridx8 = 0; - - if(!RVbufL1) - if(!(RVbufL1=(gint32*) calloc((RVc1+1),sizeof(gint32)))) exit(0); - memset(RVbufL1, 0, (RVc1+1)*sizeof(gint32)); - if(!RVbufL2) - if(!(RVbufL2=(gint32*) calloc((RVc2+1),sizeof(gint32)))) exit(0); - memset(RVbufL2, 0, (RVc2+1)*sizeof(gint32)); - if(!RVbufL3) - if(!(RVbufL3=(gint32*) calloc((RVc3+1),sizeof(gint32)))) exit(0); - memset(RVbufL3, 0, (RVc3+1)*sizeof(gint32)); - if(!RVbufL4) - if(!(RVbufL4=(gint32*) calloc((RVc4+1),sizeof(gint32)))) exit(0); - memset(RVbufL4, 0, (RVc4+1)*sizeof(gint32)); - if(!RVbufL5) - if(!(RVbufL5=(gint32*) calloc((RVc5+1),sizeof(gint32)))) exit(0); - memset(RVbufL5, 0, (RVc5+1)*sizeof(gint32)); - if(!RVbufL6) - if(!(RVbufL6=(gint32*) calloc((RVc6+1),sizeof(gint32)))) exit(0); - memset(RVbufL6, 0, (RVc6+1)*sizeof(gint32)); - if(!RVbufL7) - if(!(RVbufL7=(gint32*) calloc((RVc7+1),sizeof(gint32)))) exit(0); - memset(RVbufL7, 0, (RVc7+1)*sizeof(gint32)); - if(!RVbufL8) - if(!(RVbufL8=(gint32*) calloc((RVc8+1),sizeof(gint32)))) exit(0); - memset(RVbufL8, 0, (RVc8+1)*sizeof(gint32)); - - if(!RVbufR1) - if(!(RVbufR1=(gint32*) calloc((RVc1+1),sizeof(gint32)))) exit(0); - memset(RVbufR1, 0, (RVc1+1)*sizeof(gint32)); - if(!RVbufR2) - if(!(RVbufR2=(gint32*) calloc((RVc2+1),sizeof(gint32)))) exit(0); - memset(RVbufR2, 0, (RVc2+1)*sizeof(gint32)); - if(!RVbufR3) - if(!(RVbufR3=(gint32*) calloc((RVc3+1),sizeof(gint32)))) exit(0); - memset(RVbufR3, 0, (RVc3+1)*sizeof(gint32)); - if(!RVbufR4) - if(!(RVbufR4=(gint32*) calloc((RVc4+1),sizeof(gint32)))) exit(0); - memset(RVbufR4, 0, (RVc4+1)*sizeof(gint32)); - if(!RVbufR5) - if(!(RVbufR5=(gint32*) calloc((RVc5+1),sizeof(gint32)))) exit(0); - memset(RVbufR5, 0, (RVc5+1)*sizeof(gint32)); - if(!RVbufR6) - if(!(RVbufR6=(gint32*) calloc((RVc6+1),sizeof(gint32)))) exit(0); - memset(RVbufR6, 0, (RVc6+1)*sizeof(gint32)); - if(!RVbufR7) - if(!(RVbufR7=(gint32*) calloc((RVc7+1),sizeof(gint32)))) exit(0); - memset(RVbufR7, 0, (RVc7+1)*sizeof(gint32)); - if(!RVbufR8) - if(!(RVbufR8=(gint32*) calloc((RVc8+1),sizeof(gint32)))) exit(0); - memset(RVbufR8, 0, (RVc8+1)*sizeof(gint32)); -} - -static void -lqmono_setreverb (int r) -{ - md_reverb = r; - return; -} - -static int -lqmono_getreverb (void) -{ - return md_reverb; -} - -static void -lqmono_startnote (int channel, - st_mixer_sample_info *s) -{ - lqmono_channel *c = &channels[channel]; - - c->sample = s; - c->data = s->data; - c->type = s->type; - c->length = MIN(s->length, MAX_SAMPLE_LENGTH) << ACCURACY; - c->running = 1; - c->speed = 1; - c->current = 0; - c->loopstart = MIN(s->loopstart, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopend = MIN(s->loopend, MAX_SAMPLE_LENGTH) << ACCURACY; - c->loopflags = s->looptype; - c->direction = 1; -} - -static void -lqmono_stopnote (int channel) -{ - lqmono_channel *c = &channels[channel]; - - c->running = 0; -} - -static void -lqmono_setsmplpos (int channel, - guint32 offset) -{ - lqmono_channel *c = &channels[channel]; - - if(offset < c->length >> ACCURACY) { - c->current = offset << ACCURACY; - c->direction = 1; - } else { - c->running = 0; - } -} - -static void -lqmono_setfreq (int channel, - float frequency) -{ - lqmono_channel *c = &channels[channel]; - - if(frequency > (0x7fffffff >> ACCURACY)) { - frequency = (0x7fffffff >> ACCURACY); - } - - c->speed = frequency * (1 << ACCURACY) / mixfreq; -} - -static void -lqmono_setvolume (int channel, - float volume) -{ - lqmono_channel *c = &channels[channel]; - - c->volume = 64 * volume; -} - -static void -lqmono_setpanning (int channel, - float panning) -{ - lqmono_channel *c = &channels[channel]; - - c->panning = panning; -} - -static void * -lqmono_mix (void *dest, - guint32 count, - gint8 *scopebufs[], - int scopebuf_offset) -{ - int todo; - int i, j, t, *m, v; - lqmono_channel *c; - int done, s; - int offs2end, oflcnt, looplen; - int val; - gint16 *sndbuf; - gint8 *scopedata = NULL; - int panleftmul = 0; - int panrightmul = 0; - gint32 speedup; - gint32 ReverbPct; - - if((stereo + 1) * count > mixbufsize) { - g_free(mixbuf); - mixbuf = g_new(gint32, (stereo + 1) * count); - mixbufsize = (stereo + 1) * count; - } - memset(mixbuf, 0, (stereo + 1) * 4 * count); - - for(i = 0; i < num_channels; i++) { - c = &channels[i]; - t = count; - m = mixbuf; - v = c->volume; - - if(scopebufs) - scopedata = scopebufs[i] + scopebuf_offset; - - if(!c->running) { - if(scopebufs) - memset(scopedata, 0, count); - continue; - } - - g_assert(c->sample->lock); - g_mutex_lock(c->sample->lock); - - while(t) { - /* Check how much of the sample we can fill in one run */ - if(c->loopflags) { - looplen = c->loopend - c->loopstart; - g_assert(looplen > 0); - if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_AMIGA) { - offs2end = c->loopend - c->current; - if(offs2end <= 0) { - oflcnt = - offs2end / looplen; - offs2end += oflcnt * looplen; - c->current = c->loopstart - offs2end; - offs2end = c->loopend - c->current; - } - } else /* if(c->loopflags == ST_MIXER_SAMPLE_LOOPTYPE_PINGPONG) */ { - if(c->direction == 1) - offs2end = c->loopend - c->current; - else - offs2end = c->current - c->loopstart; - - if(offs2end <= 0) { - oflcnt = - offs2end / looplen; - offs2end += oflcnt * looplen; - if((oflcnt && 1) ^ (c->direction == -1)) { - c->current = c->loopstart - offs2end; - offs2end = c->loopend - c->current; - c->direction = 1; - } else { - c->current = c->loopend + offs2end; - if(c->current == c->loopend) - c->current--; - offs2end = c->current - c->loopstart; - c->direction = -1; - } - } - } - g_assert(offs2end >= 0); - g_assert(c->speed != 0); - done = offs2end / c->speed + 1; - } else /* if(c->loopflags == LOOP_NO) */ { - done = (c->length - c->current) / c->speed; - if(!done) { - c->running = 0; - break; - } - } - - g_assert(done > 0); - - if(done > t) - done = t; - t -= done; - - g_assert(c->current >= 0 && (c->current >> ACCURACY) < c->length); - - if(stereo) { - panleftmul = 64 - ((c->panning + 1.0) * 32); - panrightmul = (c->panning + 1.0) * 32; - } - - /* This one does the actual mixing */ - /* One of the few occasions where templates would be really useful :) */ - if(c->type == ST_MIXER_SAMPLE_TYPE_16) { - gint16 *data = c->data; - if(scopebufs) { - if(stereo) { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += panleftmul * val >> 6; - *m++ += panrightmul * val >> 6; - *scopedata++ = val >> 8 >> 6; - } - } else { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += val; - *scopedata++ = val >> 8 >> 6; - } - } - } else { - if(stereo) { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += panleftmul * val >> 6; - *m++ += panrightmul * val >> 6; - } - } else { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * data[j >> ACCURACY]; - *m++ += val; - } - } - } - } else { - gint8 *data = c->data; - if(scopebufs) { - if(stereo) { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * (data[j >> ACCURACY] << 8); - *m++ += panleftmul * val >> 6; - *m++ += panrightmul * val >> 6; - *scopedata++ = val >> 8 >> 6; - } - } else { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * (data[j >> ACCURACY] << 8); - *m++ += val; - *scopedata++ = val >> 8 >> 6; - } - } - } else { - if(stereo) { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * (data[j >> ACCURACY] << 8); - *m++ += panleftmul * val >> 6; - *m++ += panrightmul * val >> 6; - } - } else { - for(j = c->current, s = c->speed * c->direction; done; done--, j += s) { - val = v * (data[j >> ACCURACY] << 8); - *m++ += val; - } - } - } - } - - c->current = j; - } - - g_mutex_unlock(c->sample->lock); - } - - /* time for some reverb! (code ripped and optimised from libmikmod) */ - /* Reverb macros.. */ -#define COMPUTE_LECHO(n) RVbufL##n [Ridx##n ]=speedup+((ReverbPct*RVbufL##n [Ridx##n ])>>7) -#define COMPUTE_RECHO(n) RVbufR##n [Ridx##n ]=speedup+((ReverbPct*RVbufR##n [Ridx##n ])>>7) -#define INCR_LOOP(n) Ridx##n ++; if (Ridx##n >= RVc##n ) Ridx##n = 0; - - if(md_reverb != 0) { - ReverbPct=92+(md_reverb<<1); - - if (stereo) { - for(todo=0; todo < (count*2); todo+=2) { - - /* Compute the left channel echo buffers */ - speedup = mixbuf[todo]>>3; - COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); - COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); - - speedup = mixbuf[todo+1]>>3; - COMPUTE_RECHO(1); COMPUTE_RECHO(2); COMPUTE_RECHO(3); COMPUTE_RECHO(4); - COMPUTE_RECHO(5); COMPUTE_RECHO(6); COMPUTE_RECHO(7); COMPUTE_RECHO(8); - - INCR_LOOP(1); INCR_LOOP(2); INCR_LOOP(3); INCR_LOOP(4); - INCR_LOOP(5); INCR_LOOP(6); INCR_LOOP(7); INCR_LOOP(8); - - mixbuf[todo] += RVbufL1[Ridx1]-RVbufL2[Ridx2]+RVbufL3[Ridx3]-RVbufL4[Ridx4]+ - RVbufL5[Ridx5]-RVbufL6[Ridx6]+RVbufL7[Ridx7]-RVbufL8[Ridx8]; - mixbuf[todo+1] += RVbufR1[Ridx1]-RVbufR2[Ridx2]+RVbufR3[Ridx3]-RVbufR4[Ridx4]+ - RVbufR5[Ridx5]-RVbufR6[Ridx6]+RVbufR7[Ridx7]-RVbufR8[Ridx8]; - } - } else { // mono - for(todo=0; todo < (count); todo++) { - /* Compute the left channel echo buffers */ - speedup = mixbuf[todo]>>3; - COMPUTE_LECHO(1); COMPUTE_LECHO(2); COMPUTE_LECHO(3); COMPUTE_LECHO(4); - COMPUTE_LECHO(5); COMPUTE_LECHO(6); COMPUTE_LECHO(7); COMPUTE_LECHO(8); - - INCR_LOOP(1); INCR_LOOP(2); INCR_LOOP(3); INCR_LOOP(4); - INCR_LOOP(5); INCR_LOOP(6); INCR_LOOP(7); INCR_LOOP(8); - - mixbuf[todo] += RVbufL1[Ridx1]-RVbufL2[Ridx2]+RVbufL3[Ridx3]-RVbufL4[Ridx4]+ - RVbufL5[Ridx5]-RVbufL6[Ridx6]+RVbufL7[Ridx7]-RVbufL8[Ridx8]; - } - } - } - - /* modules with many channels get additional amplification here */ - t = (4 * log(num_channels) / log(4)) * 64 * 8; - - for(sndbuf = dest, clipflag = 0, todo = 0; todo < (stereo + 1) * count; todo++) { - gint32 a, b; - - a = mixbuf[todo]; - a *= amp; /* amplify */ - a /= t; - - b = CLAMP(a, -32768, 32767); - if(a != b) { - clipflag = 1; - } - - *sndbuf++ = b; - } - - return dest + (stereo + 1) * 2 * count; -} - -void -lqmono_dumpstatus (st_mixer_channel_status array[]) -{ - int i; - - for(i = 0; i < 32; i++) { - if(channels[i].running) { - array[i].current_sample = channels[i].sample; - array[i].current_position = channels[i].current >> ACCURACY; - } else { - array[i].current_sample = NULL; - } - } -} - -st_mixer mixer_lqmono = { - "lqmono", - "Super low fidelity mixer module", - - lqmono_setnumch, - lqmono_updatesample, - lqmono_setmixformat, - lqmono_setstereo, - lqmono_setmixfreq, - lqmono_setampfactor, - lqmono_setreverb, - lqmono_getreverb, - lqmono_getclipflag, - lqmono_reset, - lqmono_startnote, - lqmono_stopnote, - lqmono_setsmplpos, - lqmono_setfreq, - lqmono_setvolume, - lqmono_setpanning, - lqmono_mix, - lqmono_dumpstatus, - - MAX_SAMPLE_LENGTH, - - NULL -}; diff -urN soundtracker-0.3.4/app/sample-editor.c soundtracker-0.3.5/app/sample-editor.c --- soundtracker-0.3.4/app/sample-editor.c Fri Sep 24 16:08:04 1999 +++ soundtracker-0.3.5/app/sample-editor.c Sun Sep 26 12:26:05 1999 @@ -862,7 +862,7 @@ copybuffertype = oldsample->sample.type; copybuffer = malloc(copybufferlen * mult); if(!copybuffer) { - error_error(_("No memory for copybuffer.\n")); + error_error("Out of memory for copybuffer.\n"); } else { memcpy(copybuffer, oldsample->sample.data + ss * mult, @@ -1057,7 +1057,7 @@ len = frameCount * (sampleWidth/8) * channelCount; if(!(sbuf = malloc(len))) { - error_error(_("Out of memory for sample data.")); + error_error("Out of memory for sample data."); goto errnobuf; } @@ -1249,7 +1249,7 @@ if(currentoffs == recordbuflen) { struct recordbuf *newbuf = malloc(sizeof(struct recordbuf) + recordbuflen * 2); if(!newbuf) { - error_error(_("out of memory while sampling...")); + error_error("Out of memory while sampling!"); sampling = 0; break; } diff -urN soundtracker-0.3.4/app/st-subs.c soundtracker-0.3.5/app/st-subs.c --- soundtracker-0.3.4/app/st-subs.c Thu Aug 12 20:07:13 1999 +++ soundtracker-0.3.5/app/st-subs.c Fri Oct 8 16:17:54 1999 @@ -126,7 +126,35 @@ return NULL; r = malloc(length * sizeof(XMNote)); - memcpy(r, n, length * sizeof(XMNote)); + if(r) { + memcpy(r, n, length * sizeof(XMNote)); + } + + return r; +} + +/* Duplicate part of a track, wrap-around at end is handled */ +XMNote * +st_dup_track_wrap (XMNote *n, + int tracklength, + int copystart, + int copylength) +{ + XMNote *r; + + if(!n || copylength > tracklength || copystart >= tracklength) + return NULL; + + if(copylength > tracklength - copystart) { + r = malloc(copylength * sizeof(XMNote)); + if(r) { + memcpy(r, n + copystart, (tracklength - copystart) * sizeof(XMNote)); + memcpy(r + tracklength - copystart, n, (copylength - (tracklength - copystart)) * sizeof(XMNote)); + } + } else { + r = st_dup_track(n + copystart, copylength); + } + return r; } @@ -140,6 +168,42 @@ memset(n, 0, length * sizeof(*n)); } +/* Clear part of a track, wrap-around at end is handled */ +void +st_clear_track_wrap (XMNote *n, + int tracklength, + int clearstart, + int clearlength) +{ + if(!n || clearlength > tracklength || clearstart >= tracklength) + return; + + if(clearlength > tracklength - clearstart) { + st_clear_track(n + clearstart, tracklength - clearstart); + st_clear_track(n, clearlength - (tracklength - clearstart)); + } else { + st_clear_track(n + clearstart, clearlength); + } +} + +void +st_paste_track_into_track_wrap (XMNote *from, + XMNote *to, + int tolength, + int insertstart, + int fromlength) +{ + if(!from || !to || tolength < fromlength || insertstart >= tolength) + return; + + if(fromlength > tolength - insertstart) { + memcpy(to + insertstart, from, (tolength - insertstart) * sizeof(XMNote)); + memcpy(to, from + tolength - insertstart, (fromlength - (tolength - insertstart)) * sizeof(XMNote)); + } else { + memcpy(to + insertstart, from, fromlength * sizeof(XMNote)); + } +} + void st_clear_pattern (XMPattern *p) { @@ -148,6 +212,47 @@ for(i = 0; i < 32; i++) { st_clear_track(p->channels[i], p->alloc_length); } +} + +void +st_pattern_delete_track (XMPattern *p, + int t) +{ + int i; + XMNote *a; + + a = p->channels[t]; + g_assert(a != NULL); + + for(i = t; i < 31 && p->channels[i + 1] != NULL; i++) { + p->channels[i] = p->channels[i + 1]; + } + + p->channels[i] = a; + st_clear_track(a, p->alloc_length); +} + +void +st_pattern_insert_track (XMPattern *p, + int t) +{ + int i; + XMNote *a; + + a = p->channels[31]; + + for(i = 31; i > t; i--) { + p->channels[i] = p->channels[i - 1]; + } + + if(!a) { + if(!(a = calloc(1, p->alloc_length * sizeof(XMNote)))) { + g_assert_not_reached(); + } + } + + p->channels[t] = a; + st_clear_track(a, p->alloc_length); } gboolean diff -urN soundtracker-0.3.4/app/st-subs.h soundtracker-0.3.5/app/st-subs.h --- soundtracker-0.3.4/app/st-subs.h Sun May 2 16:05:49 1999 +++ soundtracker-0.3.5/app/st-subs.h Fri Oct 8 16:05:31 1999 @@ -33,9 +33,14 @@ XMPattern* st_dup_pattern (XMPattern*); void st_free_pattern_channels (XMPattern *pat); void st_clear_pattern (XMPattern*); +void st_pattern_delete_track (XMPattern*, int); +void st_pattern_insert_track (XMPattern*, int); XMNote* st_dup_track (XMNote*, int length); +XMNote* st_dup_track_wrap (XMNote*, int tracklength, int copystart, int copylength); void st_clear_track (XMNote*, int length); +void st_clear_track_wrap (XMNote*, int tracklength, int clearstart, int clearlength); +void st_paste_track_into_track_wrap (XMNote *from, XMNote *to, int tolength, int insertstart, int fromlength); int st_instrument_num_samples (STInstrument *i); void st_clean_instrument (STInstrument *i, const char *name); diff -urN soundtracker-0.3.4/app/track-editor.c soundtracker-0.3.5/app/track-editor.c --- soundtracker-0.3.4/app/track-editor.c Fri Sep 10 13:18:52 1999 +++ soundtracker-0.3.5/app/track-editor.c Fri Oct 8 16:09:58 1999 @@ -35,6 +35,7 @@ #include "gui-settings.h" #include "sample-editor.h" #include "gui-subs.h" +#include "preferences.h" Tracker *tracker; GtkWidget *vscrollbar; @@ -44,8 +45,9 @@ static XMPattern *pattern_buffer = NULL; static XMNote *track_buffer = NULL; static int track_buffer_length; -static XMNote block_buffer[256]; -static int block_start = -1, block_length; + +static XMPattern block_buffer; +static int block_start_ch = -1, block_start_row = -1; /* this array contains -1 if the note is not running, or the channel number where it is being played. this is necessary to handle the key on/off situation. */ @@ -65,65 +67,6 @@ static void update_hscrollbar(Tracker *t, int leftchan, int numchans, int dispchans); static gboolean track_editor_handle_column_input(Tracker *t, int gdkkey); -#if 0 -static void track_editor_menu_callback(gpointer d, guint a); - -static GtkItemFactoryEntry menu_items[] = { - { N_("/_Pattern"), NULL, NULL, 0, "" }, - { N_("/Pattern/_Cut"), "F3", track_editor_menu_callback, 0 }, - { N_("/Pattern/_Copy"), "F4", track_editor_menu_callback, 1 }, - { N_("/Pattern/_Paste"), "F5", track_editor_menu_callback, 2 }, -}; - -static GtkWidget *tracker_menu; - -static void -track_editor_menu_callback (gpointer d, - guint a) -{ - printf("%d\n", a); -} - - -static void -tracker_create_popup_menu () -{ - int i; - GtkItemFactory *item_factory; - GtkAccelGroup *accel_group; - - accel_group = gtk_accel_group_new (); - - item_factory = gtk_item_factory_new (GTK_TYPE_MENU, - "
", - accel_group); - - for(i = 0; i < sizeof(menu_items) / sizeof(menu_items[0]); i++) { - menu_items[i].path = _(menu_items[i].path); - } - - 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)); - - tracker_menu = gtk_item_factory_get_widget (item_factory, "
"); -} - -static gint -tracker_popup_menu (GtkWidget *w, - GdkEventButton *e) -{ - if(e->button == 3) { - gtk_menu_popup (GTK_MENU (tracker_menu), - NULL, NULL, NULL, NULL, 3, e->time); - } - - return FALSE; -} -#endif - void tracker_page_create (GtkNotebook *nb) { @@ -182,6 +125,8 @@ gtk_notebook_append_page(nb, vbox, gtk_label_new("Tracker")); gtk_container_border_width(GTK_CONTAINER(vbox), 10); + + memset(&block_buffer, 0, sizeof(block_buffer)); } static void update_vscrollbar(Tracker *t, int patpos, int patlen, int disprows) @@ -497,7 +442,6 @@ st_clear_track(n, l); xm->modified = 1; tracker_redraw(t); - } void @@ -519,36 +463,79 @@ } void -track_editor_mark_selection (Tracker *t) +track_editor_delete_track (Tracker *t) { - block_start = t->patpos; + st_pattern_delete_track(t->curpattern, t->cursor_ch); + xm->modified = 1; + tracker_redraw(t); } void -track_editor_copy_selection (Tracker *t) +track_editor_insert_track (Tracker *t) +{ + st_pattern_insert_track(t->curpattern, t->cursor_ch); + xm->modified = 1; + tracker_redraw(t); +} + +void +track_editor_mark_selection (Tracker *t) +{ + block_start_ch = t->cursor_ch; + block_start_row = t->patpos; +} + +static void +track_editor_copy_cut_selection_common (Tracker *t, + gboolean cut) { int i; + int height, width; - if(block_start >= t->curpattern->length) + if(block_start_ch == -1 || block_start_row >= t->curpattern->length || block_start_ch >= xm->num_channels) return; - block_length = t->patpos - block_start + 1; - for(i = 0; i < block_length; i++) { - block_buffer[i] = t->curpattern->channels[t->cursor_ch][i + block_start]; + + width = t->cursor_ch - block_start_ch + 1; + if(width <= 0) { + width += xm->num_channels; + } + height = t->patpos - block_start_row + 1; + if(height <= 0) { + height += t->curpattern->length; + } + + printf("%d %d\n", width, height); + block_buffer.alloc_length = block_buffer.length = height; + + for(i = 0; i < 32; i++) { + free(block_buffer.channels[i]); + block_buffer.channels[i] = NULL; + } + + for(i = 0; i < width; i++) { + block_buffer.channels[i] = st_dup_track_wrap(t->curpattern->channels[(block_start_ch + i) % xm->num_channels], + t->curpattern->length, + block_start_row, + height); + if(cut) { + st_clear_track_wrap(t->curpattern->channels[(block_start_ch + i) % xm->num_channels], + t->curpattern->length, + block_start_row, + height); + } } } void -track_editor_cut_selection (Tracker *t) +track_editor_copy_selection (Tracker *t) { - int i; + track_editor_copy_cut_selection_common(t, FALSE); +} - if(block_start >= t->curpattern->length) - return; - block_length = t->patpos - block_start + 1; - for(i = 0; i < block_length; i++) { - block_buffer[i] = t->curpattern->channels[t->cursor_ch][i + block_start]; - memset(&t->curpattern->channels[t->cursor_ch][i + block_start], 0, sizeof(XMNote)); - } +void +track_editor_cut_selection (Tracker *t) +{ + track_editor_copy_cut_selection_common(t, TRUE); xm->modified = 1; tracker_redraw(t); } @@ -558,13 +545,19 @@ { int i; - if(!GUI_ENABLED) + if(block_buffer.length > t->curpattern->length) return; - for(i = 0; i < block_length; i++) { - t->curpattern->channels[t->cursor_ch][(t->patpos+i)%t->curpattern->length] = block_buffer[i]; + + for(i = 0; i < 32; i++) { + st_paste_track_into_track_wrap(block_buffer.channels[i], + t->curpattern->channels[(t->cursor_ch + i) % xm->num_channels], + t->curpattern->length, + t->patpos, + block_buffer.length); } + xm->modified = 1; - tracker_set_patpos(t, (t->patpos + block_length) % t->curpattern->length); + tracker_set_patpos(t, (t->patpos + block_buffer.length) % t->curpattern->length); tracker_redraw(t); } @@ -723,3 +716,48 @@ tracker_start_updating(); } } + +void +track_editor_load_config (void) +{ + char buf[256]; + FILE *f; + int i, j; + + sprintf(buf, "%s/jazz", prefs_get_prefsdir()); + + f = fopen(buf, "rb"); + if(f) { + for(i = 0; i < 32; i++) { + sprintf(buf, "jazz-toggle-%d", i); + prefs_get_int(f, buf, &j); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(jazztoggles[i]), j); + } + + fclose(f); + } +} + +void +track_editor_save_config (void) +{ + char buf[256]; + FILE *f; + int i; + + prefs_check_prefs_dir(); + sprintf(buf, "%s/jazz", prefs_get_prefsdir()); + + f = fopen(buf, "wb"); + if(!f) + return; + + for(i = 0; i < 32; i++) { + sprintf(buf, "jazz-toggle-%d", i); + prefs_put_int(f, buf, GTK_TOGGLE_BUTTON(jazztoggles[i])->active); + } + + fclose(f); +} + + diff -urN soundtracker-0.3.4/app/track-editor.h soundtracker-0.3.5/app/track-editor.h --- soundtracker-0.3.4/app/track-editor.h Fri Sep 10 11:50:25 1999 +++ soundtracker-0.3.5/app/track-editor.h Wed Oct 6 16:03:37 1999 @@ -47,6 +47,9 @@ void track_editor_toggle_jazz_edit (void); +void track_editor_load_config (void); +void track_editor_save_config (void); + /* Handling of real-time scrolling */ void tracker_start_updating (void); void tracker_stop_updating (void); @@ -60,6 +63,8 @@ void track_editor_copy_track (Tracker *t); void track_editor_cut_track (Tracker *t); void track_editor_paste_track (Tracker *t); +void track_editor_delete_track (Tracker *t); +void track_editor_insert_track (Tracker *t); void track_editor_mark_selection (Tracker *t); void track_editor_copy_selection (Tracker *t); void track_editor_cut_selection (Tracker *t); diff -urN soundtracker-0.3.4/app/xm-player.c soundtracker-0.3.5/app/xm-player.c --- soundtracker-0.3.4/app/xm-player.c Fri Aug 13 13:51:01 1999 +++ soundtracker-0.3.5/app/xm-player.c Fri Oct 8 14:46:06 1999 @@ -250,42 +250,6 @@ static int realgvol; -static gint16 sintab[256]= -{ - 0, 50, 100, 151, 201, 251, 301, 350, - 400, 449, 498, 546, 595, 642, 690, 737, - 784, 830, 876, 921, 965, 1009, 1053, 1096, - 1138, 1179, 1220, 1260, 1299, 1338, 1375, 1412, - 1448, 1483, 1517, 1551, 1583, 1615, 1645, 1674, - 1703, 1730, 1757, 1782, 1806, 1829, 1851, 1872, - 1892, 1911, 1928, 1945, 1960, 1974, 1987, 1998, - 2009, 2018, 2026, 2033, 2038, 2042, 2046, 2047, - 2048, 2047, 2046, 2042, 2038, 2033, 2026, 2018, - 2009, 1998, 1987, 1974, 1960, 1945, 1928, 1911, - 1892, 1872, 1851, 1829, 1806, 1782, 1757, 1730, - 1703, 1674, 1645, 1615, 1583, 1551, 1517, 1483, - 1448, 1412, 1375, 1338, 1299, 1260, 1220, 1179, - 1138, 1096, 1053, 1009, 965, 921, 876, 830, - 784, 737, 690, 642, 595, 546, 498, 449, - 400, 350, 301, 251, 201, 151, 100, 50, - 0, -50, -100, -151, -201, -251, -301, -350, - -400, -449, -498, -546, -595, -642, -690, -737, - -784, -830, -876, -921, -965, -1009, -1053, -1096, - -1138, -1179, -1220, -1260, -1299, -1338, -1375, -1412, - -1448, -1483, -1517, -1551, -1583, -1615, -1645, -1674, - -1703, -1730, -1757, -1782, -1806, -1829, -1851, -1872, - -1892, -1911, -1928, -1945, -1960, -1974, -1987, -1998, - -2009, -2018, -2026, -2033, -2038, -2042, -2046, -2047, - -2048, -2047, -2046, -2042, -2038, -2033, -2026, -2018, - -2009, -1998, -1987, -1974, -1960, -1945, -1928, -1911, - -1892, -1872, -1851, -1829, -1806, -1782, -1757, -1730, - -1703, -1674, -1645, -1615, -1583, -1551, -1517, -1483, - -1448, -1412, -1375, -1338, -1299, -1260, -1220, -1179, - -1138, -1096, -1053, -1009, -965, -921, -876, -830, - -784, -737, -690, -642, -595, -546, -498, -449, - -400, -350, -301, -251, -201, -151, -100, -50 -}; - static guint32 hnotetab6848[16]={11131415,4417505,1753088,695713,276094,109568,43482,17256,6848,2718,1078,428,170,67,27,11}; static guint32 hnotetab8363[16]={13594045,5394801,2140928,849628,337175,133808,53102,21073,8363,3319,1317,523,207,82,33,13}; static guint16 notetab[16]={32768,30929,29193,27554,26008,24548,23170,21870,20643,19484,18390,17358,16384,15464,14596,13777}; @@ -725,7 +689,7 @@ int dep=0; switch (ch->curins->vibtype) { case 0: - dep=(sintab[ch->chAVibPos>>8] * (ch->curins->vibdepth << 2))>>11; + dep = sin(2 * M_PI * (double)ch->chAVibPos / 256 / 256) * (double)(ch->curins->vibdepth << 2); break; case 1: dep=(ch->chAVibPos&0x8000)? -(ch->curins->vibdepth << 2) : (ch->curins->vibdepth << 2); @@ -1163,7 +1127,7 @@ case xmpVCmdVibDep: // KB says "FICKEN" :) switch (ch->chVibType) { case 0: - ch->chFinalPitch=freqrange((( sintab[ch->chVibPos] *ch->chVibDep)>>7)+ch->chPitch); + ch->chFinalPitch = freqrange(( 16 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep) + (double)ch->chPitch); break; case 1: ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>3)+ch->chPitch); @@ -1244,7 +1208,7 @@ case xmpCmdVibrato: switch (ch->chVibType) { case 0: - ch->chFinalPitch=freqrange((( sintab[ch->chVibPos] *ch->chVibDep)>>8)+ch->chPitch); + ch->chFinalPitch=freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); break; case 1: ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>4)+ch->chPitch); @@ -1276,7 +1240,7 @@ case xmpCmdVibVol: switch (ch->chVibType) { case 0: - ch->chFinalPitch=freqrange((( sintab[ch->chVibPos] *ch->chVibDep)>>8)+ch->chPitch); + ch->chFinalPitch=freqrange(8 * sin(2 * M_PI * (double)ch->chVibPos / 256) * (double)ch->chVibDep + (double)ch->chPitch); break; case 1: ch->chFinalPitch=freqrange((( (ch->chVibPos-0x80) *ch->chVibDep)>>4)+ch->chPitch); @@ -1295,7 +1259,7 @@ case xmpCmdTremolo: switch (ch->chTremType) { case 0: - ch->chFinalVol+=(( sintab[ch->chTremPos] *ch->chTremDep)>>11); + ch->chFinalVol += sin(2 * M_PI * (double)ch->chTremPos / 256) * (double)ch->chTremDep; break; case 1: ch->chFinalVol+=(( (ch->chTremPos-0x80) *ch->chTremDep)>>7); diff -urN soundtracker-0.3.4/configure soundtracker-0.3.5/configure --- soundtracker-0.3.4/configure Sat Sep 25 17:25:43 1999 +++ soundtracker-0.3.5/configure Wed Oct 6 13:37:09 1999 @@ -714,7 +714,7 @@ PACKAGE=soundtracker -VERSION=0.3.4 +VERSION=0.3.5 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; } @@ -801,7 +801,7 @@ -ALL_LINGUAS="de it pl ja" +ALL_LINGUAS="de es it pl ja" echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:807: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. @@ -4259,7 +4259,6 @@ HAVE_POLL="yes" else echo "$ac_t""no" 1>&6 -{ echo "configure: error: sys/poll.h without poll" 1>&2; exit 1; } fi done @@ -4273,12 +4272,12 @@ for ac_func in select do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:4277: checking for $ac_func" >&5 +echo "configure:4276: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:4304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -4330,14 +4329,14 @@ echo $ac_n "checking whether byte ordering is bigendian""... $ac_c" 1>&6 -echo "configure:4334: checking whether byte ordering is bigendian" >&5 +echo "configure:4333: checking whether byte ordering is bigendian" >&5 if eval "test \"`echo '$''{'ac_cv_c_bigendian'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_bigendian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat > conftest.$ac_ext < #include @@ -4348,11 +4347,11 @@ #endif ; return 0; } EOF -if { (eval echo configure:4352: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4351: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* # It does; now see whether it defined to BIG_ENDIAN or not. cat > conftest.$ac_ext < #include @@ -4363,7 +4362,7 @@ #endif ; return 0; } EOF -if { (eval echo configure:4367: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:4366: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_bigendian=yes else @@ -4383,7 +4382,7 @@ { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:4399: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_bigendian=no else @@ -4528,6 +4527,7 @@ app/mixers/Makefile intl/Makefile po/Makefile.in +doc/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF diff -urN soundtracker-0.3.4/configure.in soundtracker-0.3.5/configure.in --- soundtracker-0.3.4/configure.in Sat Sep 25 17:25:22 1999 +++ soundtracker-0.3.5/configure.in Wed Oct 6 13:35:49 1999 @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(app/endian-conv.h) -AM_INIT_AUTOMAKE(soundtracker, 0.3.4) +AM_INIT_AUTOMAKE(soundtracker, 0.3.5) AM_CONFIG_HEADER(config.h) dnl ----------------------------------------------------------------------- @@ -9,7 +9,7 @@ dnl ----------------------------------------------------------------------- dnl Also add new catalogs to soundtracker.spec (%build)! -ALL_LINGUAS="de it pl ja" +ALL_LINGUAS="de es it pl ja" AM_GNU_GETTEXT dnl ----------------------------------------------------------------------- @@ -120,7 +120,7 @@ dnl ----------------------------------------------------------------------- HAVE_POLL="no" -AC_CHECK_HEADERS(sys/poll.h, AC_CHECK_FUNCS(poll, HAVE_POLL="yes", AC_MSG_ERROR(sys/poll.h without poll))) +AC_CHECK_HEADERS(sys/poll.h, AC_CHECK_FUNCS(poll, HAVE_POLL="yes")) if test $HAVE_POLL != yes; then AC_CHECK_FUNCS(select,, AC_MSG_ERROR(no poll and no select?!?)) @@ -136,4 +136,5 @@ app/mixers/Makefile intl/Makefile po/Makefile.in +doc/Makefile ]) diff -urN soundtracker-0.3.4/doc/Makefile.am soundtracker-0.3.5/doc/Makefile.am --- soundtracker-0.3.4/doc/Makefile.am Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/doc/Makefile.am Wed Oct 6 13:48:42 1999 @@ -0,0 +1,10 @@ + +EXTRA_DIST = hacking.texi hacking.html hacking.txt + +dist-hook: + texi2html -monolithic hacking.texi + makeinfo --no-headers hacking.texi > hacking.txt + +clean: + rm -f hacking.html hacking.txt + diff -urN soundtracker-0.3.4/doc/Makefile.in soundtracker-0.3.5/doc/Makefile.in --- soundtracker-0.3.4/doc/Makefile.in Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/doc/Makefile.in Fri Oct 8 16:33:10 1999 @@ -0,0 +1,205 @@ +# Makefile.in generated automatically by automake 1.4a from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_FLAG = +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +AUDIOFILE_CFLAGS = @AUDIOFILE_CFLAGS@ +AUDIOFILE_CONFIG = @AUDIOFILE_CONFIG@ +AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +DATADIRNAME = @DATADIRNAME@ +GENCAT = @GENCAT@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +gnomepath = @gnomepath@ +l = @l@ +sedpath = @sedpath@ + +EXTRA_DIST = hacking.texi hacking.html hacking.txt +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = gtar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps doc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = doc + +distdir: $(DISTFILES) + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: tags distdir info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +dist-hook: + texi2html -monolithic hacking.texi + makeinfo --no-headers hacking.texi > hacking.txt + +clean: + rm -f hacking.html hacking.txt + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -urN soundtracker-0.3.4/doc/hacking.html soundtracker-0.3.5/doc/hacking.html --- soundtracker-0.3.4/doc/hacking.html Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/doc/hacking.html Fri Oct 8 16:33:10 1999 @@ -0,0 +1,294 @@ + + + + +SoundTracker internals + + +

SoundTracker internals

+

+


+

Table of Contents

+ +


+ + +

General Architecture

+ +

+SoundTracker (short: ST) consists of two threads: the GUI (or main) +thread, and the audio (or mixer / player) thread. The reason for not +handling both jobs in one process via select() is obvious: the GUI can +sometimes block the process for quite a long time. For example when the +window is resized, widgets have to be redrawn, which can take a +while. To provide continous sound output, we're using a separate thread. + + +

+Communication between the threads is accomplished using two pipes. The +communication codes for this pipe are defined in audio.h. When messages +are received, they are handled in gui.c::read_mixer_pipe() and +audio.c::audio_thread(), respectively. + + +

+In its current form, the code is limited to dealing with one module at +the same time, with one editing window. Some of the GUI code has already +been modularized, since some of the editing facilities have been +encapsulated in custom GTK+ widgets, for example sample-display.c, +clavier.c, envelope-box.c and tracker.c. Noteworthy exceptions and +containers of generous amounts of global variables are gui.c, +sample-editor.c, instrument-editor.c and xm-player.c. + + +

+For ST to be made fully multi-module capable ("object-oriented"), large +parts of the GUI will have to be changed. Unfortunately, references to +the global "tracker" and "xm" variables can be found virtually +everywhere in the source code. + + + + +

Synchronization of Audio and GUI

+ +

+Since mixing buffer sizes can't be turned down as low as under primitive +operating systems such as DOS, special care must been taken to take the +audio latency into account. + + +

+The audio thread thus keeps a list of recently reached pattern positions +and their occurence in the mixed audio output stream. The GUI thread +then checks periodically (track-editor.c::tracker_timeout(), +scope-group.c::scope_group_timeout()) for the current position of the +soundcard in the output stream and calculates which pattern position +corresponds to that time. The get_play_time() method in output drivers +is the key for this to work correctly. The lists are handled through the +time buffer interface, see time-buffer.[ch]. + + +

+The oscilloscope monitors are handled in a similar way through some ring +buffers. This is documented in audio.h, for example. time-buffer can't +be used here because scope data is continuous and is accessed from the +GUI thread in more than one location. + + + + +

How the audio subsystem works

+ +

+Module playing is initialized by the GUI thread sending a message +AUDIO_CTLPIPE_PLAY_SONG, for example. The audio thread then opens the +driver module, which in turn installs a callback method, which will be +called as soon as the sound card is accepting new data. The OSS driver, +for example, instructs the audio subsystem, through +audio.c::audio_poll_add(), to call +oss-output.c::oss_poll_ready_playing() once OSS accepts new data from +ST. + + +

+After opening the output driver, various other things are initialized in +audio.c::audio_prepare_for_playing(). After that, an acknowledgement +message is sent back to the GUI thread, which is in playing mode from +then on (indicated by the global variable gui.c::gui_playing_mode). + + +

+After that, the audio thread goes back into its main poll() loop, which +also waits for the driver callback action now. Once this callback is +triggered, it calls audio.c::audio_mix() (defined in driver-out.h) to +request a new part of the sample output stream in any format and bitrate +it desires, which is then output. + + +

+Calling the XM player at the right moment and handling the pitch bending +feature is all done in audio_mix() which should be rather +straight-forward to read. + + +

+Interesting is also the interaction between xm-player.c and the rest of +the audio subsystem. There are some routines in audio.c starting with +driver_*, like driver_startnote, driver_setfreq. xm-player.c calls these +instead of the corresponding routines in the mixer because this way, a +modularized mixer system could be installed lateron. You can find more +about the Mixer API later in this document. + + + + +

Driver API

+ +

+The driver API is separated into two branches: output and input +(sampling) drivers. Input drivers are usually simpler, because they +don't have to include the mechanisms necessary for synchronization of +the audio output stream with the GUI. Also, currently only 16bit mono +sampling is supported (though changing this would require only some +changes to sample-editor.c), so a good amount of the settings widgets +are missing in input drivers. + + +

+Note that the current API doesn't make any provisions for MIDI input / +output. First and foremost, it must be thought about the synchronization +of MIDI output with mixed (DSP) output as the most important aspect; the +central audio code in audio.c hasn't been designed with this in mind +either. + + +

+Also not accounted for, but related to the MIDI issue, are wavetable +devices like the GUS which can play multiple samples on their own. But +since hardware like this is more and more becoming extinct and CPU power +rises, I don't think that supporting this is important any longer, +especially once ST will be extended to support effect plug-ins which +can't be rendered by the audio hardware but must be calculated using the +CPU! + + + + +

Adding drivers to the source tree

+ +

+You must add checks for any libs and includes in configure.in, add a +corresponding driver define to acconfig.h, add the driver to the drivers +list in main.c, and finally add all the files belonging to your driver +(should be only one) to drivers/Makefile.am. Now you still have to write +the code, that's what the two next sections are about. + + + + +

Output drivers

+ +

+The st_out_driver structure, defined driver-out.h must be globally +defined in your source file. It must contain valid pointers to all the +functions and a unique entry in the name field. The rest of the +variables and functions in your source file should be defined static so +as to hide them from the rest of the program. + + +

+You can keep the *settings functions empty at first, adding the right +code here shouldn't be a problem when you compare with oss-output.c. + + +

+The first function you should write is new(), which allocates a new +object and initializes it with default settings. getwidget() can stay +empty for as long as you don't want the user to change settings. + + +

+The next function you write should be open(), which opens the device +according to the settings in the object structure. release() does the +opposite. open() should install the callback mentioned earlier, which is +the function you're going to write now. That's it, you should have a +working minimal driver now. + + +

+The next important function is getplaytime() which is necessary for the +GUI to synchronize with the audio output. This might require some +experimentation to get right. + + +

+Now you can start adding the settings widget and add code to the load / +save settings functions. + + + + +

Input drivers

+ + + +

Mixer API

+ + + +

Contributing Code

+ +

+Please follow these rules if you want to donate code to the +SoundTracker project: + + + +

    +
  • Coding Style. I prefer 4-space tabulators, and an indentation style + +like this: + + +
    +	if(something) {
    +	    work();
    +	}
    +
    + +instead of: + + +
    +	if (something)
    +	  {
    +	    work ();
    +	  }
    +
    + +If you're using Emacs, you can simply use "M-x c-set-style cc-mode" + +
  • Add yourself to the AUTHORS file. + +
  • Add a ChangeLog entry. + +
  • Do a "make dist" in the main directory. This generates a new archive + +containing your changes. Do NOT send me the whole archive, instead: + +
  • Generate a patch. Unpack the previously generated archive and the + +original archive (into some other directory), and use + + +
    +	diff -urN {original-directory} {your-directory} > patch
    +
    + +to generate a file containing only your changes, and no auto-generated +files. + +
  • Send the patch to the `soundtracker-discuss' mailing-list. If you're + +not subscribed, then subscribe first (see README file). + +
+ +


+This document was generated on 8 October 1999 using +texi2html 1.56k. + + diff -urN soundtracker-0.3.4/doc/hacking.texi soundtracker-0.3.5/doc/hacking.texi --- soundtracker-0.3.4/doc/hacking.texi Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/doc/hacking.texi Fri Oct 8 16:33:05 1999 @@ -0,0 +1,216 @@ +\input texinfo @c -*-texinfo-*- +@setfilename hacking.info +@settitle SoundTracker internals + +@node Top, , (dir), (dir) +@top + +@menu +* General Architecture:: +* Synchronization of Audio and GUI:: +* How the audio subsystem works:: +* Driver API:: +* Mixer API:: +* Contributing Code:: +@end menu + +@chapter General Architecture +@node General Architecture, , Top, Top + +SoundTracker (short: ST) consists of two threads: the GUI (or main) +thread, and the audio (or mixer / player) thread. The reason for not +handling both jobs in one process via select() is obvious: the GUI can +sometimes block the process for quite a long time. For example when the +window is resized, widgets have to be redrawn, which can take a +while. To provide continous sound output, we're using a separate thread. + +Communication between the threads is accomplished using two pipes. The +communication codes for this pipe are defined in audio.h. When messages +are received, they are handled in gui.c::read_mixer_pipe() and +audio.c::audio_thread(), respectively. + +In its current form, the code is limited to dealing with one module at +the same time, with one editing window. Some of the GUI code has already +been modularized, since some of the editing facilities have been +encapsulated in custom GTK+ widgets, for example sample-display.c, +clavier.c, envelope-box.c and tracker.c. Noteworthy exceptions and +containers of generous amounts of global variables are gui.c, +sample-editor.c, instrument-editor.c and xm-player.c. + +For ST to be made fully multi-module capable ("object-oriented"), large +parts of the GUI will have to be changed. Unfortunately, references to +the global "tracker" and "xm" variables can be found virtually +everywhere in the source code. + +@chapter Synchronization of Audio and GUI +@node Synchronization of Audio and GUI, , Top, Top + +Since mixing buffer sizes can't be turned down as low as under primitive +operating systems such as DOS, special care must been taken to take the +audio latency into account. + +The audio thread thus keeps a list of recently reached pattern positions +and their occurence in the mixed audio output stream. The GUI thread +then checks periodically (track-editor.c::tracker_timeout(), +scope-group.c::scope_group_timeout()) for the current position of the +soundcard in the output stream and calculates which pattern position +corresponds to that time. The get_play_time() method in output drivers +is the key for this to work correctly. The lists are handled through the +time buffer interface, see time-buffer.[ch]. + +The oscilloscope monitors are handled in a similar way through some ring +buffers. This is documented in audio.h, for example. time-buffer can't +be used here because scope data is continuous and is accessed from the +GUI thread in more than one location. + +@chapter How the audio subsystem works +@node How the audio subsystem works, , Top, Top + +Module playing is initialized by the GUI thread sending a message +AUDIO_CTLPIPE_PLAY_SONG, for example. The audio thread then opens the +driver module, which in turn installs a callback method, which will be +called as soon as the sound card is accepting new data. The OSS driver, +for example, instructs the audio subsystem, through +audio.c::audio_poll_add(), to call +oss-output.c::oss_poll_ready_playing() once OSS accepts new data from +ST. + +After opening the output driver, various other things are initialized in +audio.c::audio_prepare_for_playing(). After that, an acknowledgement +message is sent back to the GUI thread, which is in playing mode from +then on (indicated by the global variable gui.c::gui_playing_mode). + +After that, the audio thread goes back into its main poll() loop, which +also waits for the driver callback action now. Once this callback is +triggered, it calls audio.c::audio_mix() (defined in driver-out.h) to +request a new part of the sample output stream in any format and bitrate +it desires, which is then output. + +Calling the XM player at the right moment and handling the pitch bending +feature is all done in audio_mix() which should be rather +straight-forward to read. + +Interesting is also the interaction between xm-player.c and the rest of +the audio subsystem. There are some routines in audio.c starting with +driver_*, like driver_startnote, driver_setfreq. xm-player.c calls these +instead of the corresponding routines in the mixer because this way, a +modularized mixer system could be installed lateron. You can find more +about the Mixer API later in this document. + +@chapter Driver API +@node Driver API, , Top, Top + +The driver API is separated into two branches: output and input +(sampling) drivers. Input drivers are usually simpler, because they +don't have to include the mechanisms necessary for synchronization of +the audio output stream with the GUI. Also, currently only 16bit mono +sampling is supported (though changing this would require only some +changes to sample-editor.c), so a good amount of the settings widgets +are missing in input drivers. + +Note that the current API doesn't make any provisions for MIDI input / +output. First and foremost, it must be thought about the synchronization +of MIDI output with mixed (DSP) output as the most important aspect; the +central audio code in audio.c hasn't been designed with this in mind +either. + +Also not accounted for, but related to the MIDI issue, are wavetable +devices like the GUS which can play multiple samples on their own. But +since hardware like this is more and more becoming extinct and CPU power +rises, I don't think that supporting this is important any longer, +especially once ST will be extended to support effect plug-ins which +can't be rendered by the audio hardware but must be calculated using the +CPU! + +@section Adding drivers to the source tree + +You must add checks for any libs and includes in configure.in, add a +corresponding driver define to acconfig.h, add the driver to the drivers +list in main.c, and finally add all the files belonging to your driver +(should be only one) to drivers/Makefile.am. Now you still have to write +the code, that's what the two next sections are about. + +@section Output drivers + +The st_out_driver structure, defined driver-out.h must be globally +defined in your source file. It must contain valid pointers to all the +functions and a unique entry in the name field. The rest of the +variables and functions in your source file should be defined static so +as to hide them from the rest of the program. + +You can keep the *settings functions empty at first, adding the right +code here shouldn't be a problem when you compare with oss-output.c. + +The first function you should write is new(), which allocates a new +object and initializes it with default settings. getwidget() can stay +empty for as long as you don't want the user to change settings. + +The next function you write should be open(), which opens the device +according to the settings in the object structure. release() does the +opposite. open() should install the callback mentioned earlier, which is +the function you're going to write now. That's it, you should have a +working minimal driver now. + +The next important function is getplaytime() which is necessary for the +GUI to synchronize with the audio output. This might require some +experimentation to get right. + +Now you can start adding the settings widget and add code to the load / +save settings functions. + +@section Input drivers + +@chapter Mixer API +@node Mixer API, , Top, Top + +@chapter Contributing Code +@node Contributing Code, , Top, Top + +Please follow these rules if you want to donate code to the +SoundTracker project: + +@itemize +@item Coding Style. I prefer 4-space tabulators, and an indentation style +like this: + +@example + if(something) @{ + work(); + @} +@end example + +instead of: + +@example + if (something) + @{ + work (); + @} +@end example + +If you're using Emacs, you can simply use "M-x c-set-style cc-mode" + +@item Add yourself to the AUTHORS file. + +@item Add a ChangeLog entry. + +@item Do a "make dist" in the main directory. This generates a new archive +containing your changes. Do NOT send me the whole archive, instead: + +@item Generate a patch. Unpack the previously generated archive and the +original archive (into some other directory), and use + +@example + diff -urN @{original-directory@} @{your-directory@} > patch +@end example + +to generate a file containing only your changes, and no auto-generated +files. + +@item Send the patch to the `soundtracker-discuss' mailing-list. If you're +not subscribed, then subscribe first (see README file). + +@end itemize + +@bye + diff -urN soundtracker-0.3.4/doc/hacking.txt soundtracker-0.3.5/doc/hacking.txt --- soundtracker-0.3.4/doc/hacking.txt Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/doc/hacking.txt Fri Oct 8 16:33:10 1999 @@ -0,0 +1,197 @@ + + +General Architecture +******************** + + SoundTracker (short: ST) consists of two threads: the GUI (or main) +thread, and the audio (or mixer / player) thread. The reason for not +handling both jobs in one process via select() is obvious: the GUI can +sometimes block the process for quite a long time. For example when the +window is resized, widgets have to be redrawn, which can take a while. +To provide continous sound output, we're using a separate thread. + + Communication between the threads is accomplished using two pipes. +The communication codes for this pipe are defined in audio.h. When +messages are received, they are handled in gui.c::read_mixer_pipe() and +audio.c::audio_thread(), respectively. + + In its current form, the code is limited to dealing with one module +at the same time, with one editing window. Some of the GUI code has +already been modularized, since some of the editing facilities have been +encapsulated in custom GTK+ widgets, for example sample-display.c, +clavier.c, envelope-box.c and tracker.c. Noteworthy exceptions and +containers of generous amounts of global variables are gui.c, +sample-editor.c, instrument-editor.c and xm-player.c. + + For ST to be made fully multi-module capable ("object-oriented"), +large parts of the GUI will have to be changed. Unfortunately, +references to the global "tracker" and "xm" variables can be found +virtually everywhere in the source code. + +Synchronization of Audio and GUI +******************************** + + Since mixing buffer sizes can't be turned down as low as under +primitive operating systems such as DOS, special care must been taken +to take the audio latency into account. + + The audio thread thus keeps a list of recently reached pattern +positions and their occurence in the mixed audio output stream. The GUI +thread then checks periodically (track-editor.c::tracker_timeout(), +scope-group.c::scope_group_timeout()) for the current position of the +soundcard in the output stream and calculates which pattern position +corresponds to that time. The get_play_time() method in output drivers +is the key for this to work correctly. The lists are handled through the +time buffer interface, see time-buffer.[ch]. + + The oscilloscope monitors are handled in a similar way through some +ring buffers. This is documented in audio.h, for example. time-buffer +can't be used here because scope data is continuous and is accessed +from the GUI thread in more than one location. + +How the audio subsystem works +***************************** + + Module playing is initialized by the GUI thread sending a message +AUDIO_CTLPIPE_PLAY_SONG, for example. The audio thread then opens the +driver module, which in turn installs a callback method, which will be +called as soon as the sound card is accepting new data. The OSS driver, +for example, instructs the audio subsystem, through +audio.c::audio_poll_add(), to call +oss-output.c::oss_poll_ready_playing() once OSS accepts new data from +ST. + + After opening the output driver, various other things are +initialized in audio.c::audio_prepare_for_playing(). After that, an +acknowledgement message is sent back to the GUI thread, which is in +playing mode from then on (indicated by the global variable +gui.c::gui_playing_mode). + + After that, the audio thread goes back into its main poll() loop, +which also waits for the driver callback action now. Once this callback +is triggered, it calls audio.c::audio_mix() (defined in driver-out.h) to +request a new part of the sample output stream in any format and bitrate +it desires, which is then output. + + Calling the XM player at the right moment and handling the pitch +bending feature is all done in audio_mix() which should be rather +straight-forward to read. + + Interesting is also the interaction between xm-player.c and the rest +of the audio subsystem. There are some routines in audio.c starting with +driver_*, like driver_startnote, driver_setfreq. xm-player.c calls these +instead of the corresponding routines in the mixer because this way, a +modularized mixer system could be installed lateron. You can find more +about the Mixer API later in this document. + +Driver API +********** + + The driver API is separated into two branches: output and input +(sampling) drivers. Input drivers are usually simpler, because they +don't have to include the mechanisms necessary for synchronization of +the audio output stream with the GUI. Also, currently only 16bit mono +sampling is supported (though changing this would require only some +changes to sample-editor.c), so a good amount of the settings widgets +are missing in input drivers. + + Note that the current API doesn't make any provisions for MIDI input +/ output. First and foremost, it must be thought about the +synchronization of MIDI output with mixed (DSP) output as the most +important aspect; the central audio code in audio.c hasn't been +designed with this in mind either. + + Also not accounted for, but related to the MIDI issue, are wavetable +devices like the GUS which can play multiple samples on their own. But +since hardware like this is more and more becoming extinct and CPU power +rises, I don't think that supporting this is important any longer, +especially once ST will be extended to support effect plug-ins which +can't be rendered by the audio hardware but must be calculated using the +CPU! + +Adding drivers to the source tree +================================= + + You must add checks for any libs and includes in configure.in, add a +corresponding driver define to acconfig.h, add the driver to the drivers +list in main.c, and finally add all the files belonging to your driver +(should be only one) to drivers/Makefile.am. Now you still have to write +the code, that's what the two next sections are about. + +Output drivers +============== + + The st_out_driver structure, defined driver-out.h must be globally +defined in your source file. It must contain valid pointers to all the +functions and a unique entry in the name field. The rest of the +variables and functions in your source file should be defined static so +as to hide them from the rest of the program. + + You can keep the *settings functions empty at first, adding the right +code here shouldn't be a problem when you compare with oss-output.c. + + The first function you should write is new(), which allocates a new +object and initializes it with default settings. getwidget() can stay +empty for as long as you don't want the user to change settings. + + The next function you write should be open(), which opens the device +according to the settings in the object structure. release() does the +opposite. open() should install the callback mentioned earlier, which is +the function you're going to write now. That's it, you should have a +working minimal driver now. + + The next important function is getplaytime() which is necessary for +the GUI to synchronize with the audio output. This might require some +experimentation to get right. + + Now you can start adding the settings widget and add code to the +load / save settings functions. + +Input drivers +============= + +Mixer API +********* + +Contributing Code +***************** + + Please follow these rules if you want to donate code to the +SoundTracker project: + + * Coding Style. I prefer 4-space tabulators, and an indentation style + like this: + + if(something) { + work(); + } + + instead of: + + if (something) + { + work (); + } + + If you're using Emacs, you can simply use "M-x c-set-style cc-mode" + + * Add yourself to the AUTHORS file. + + * Add a ChangeLog entry. + + * Do a "make dist" in the main directory. This generates a new + archive containing your changes. Do NOT send me the whole archive, + instead: + + * Generate a patch. Unpack the previously generated archive and the + original archive (into some other directory), and use + + diff -urN {original-directory} {your-directory} > patch + + to generate a file containing only your changes, and no + auto-generated files. + + * Send the patch to the `soundtracker-discuss' mailing-list. If + you're not subscribed, then subscribe first (see README file). + + diff -urN soundtracker-0.3.4/po/POTFILES.in soundtracker-0.3.5/po/POTFILES.in --- soundtracker-0.3.4/po/POTFILES.in Sat Sep 4 18:43:41 1999 +++ soundtracker-0.3.5/po/POTFILES.in Sun Sep 26 17:57:41 1999 @@ -16,7 +16,7 @@ app/keys.c app/main.c app/menubar.c -app/mixers/lqmono.c +app/mixers/integer32.c app/module-info.c app/poll.c app/preferences.c diff -urN soundtracker-0.3.4/po/cat-id-tbl.c soundtracker-0.3.5/po/cat-id-tbl.c --- soundtracker-0.3.4/po/cat-id-tbl.c Sat Sep 25 17:25:55 1999 +++ soundtracker-0.3.5/po/cat-id-tbl.c Wed Oct 6 16:20:11 1999 @@ -149,8 +149,8 @@ {"\ Are you sure you want to quit?\n\ All changes will be lost!", 110}, - {"_Open..", 111}, - {"Save _as..", 112}, + {"_Open...", 111}, + {"Save _as...", 112}, {"_Quit", 113}, {"Clear _All", 114}, {"Clear _Patterns Only", 115}, @@ -158,210 +158,208 @@ {"C_ut", 117}, {"_Copy", 118}, {"_Paste", 119}, - {"_Mark", 120}, - {"_Jazz Edit Mode", 121}, - {"_Transposition..", 122}, - {"_Pattern", 123}, - {"_Track", 124}, - {"_Selection", 125}, - {"_Find Unused Pattern", 126}, - {"_Copy Current to Unused Pattern", 127}, - {"C_lear Unused Patterns", 128}, - {"_Pack Patterns", 129}, - {"_Load XI..", 130}, - {"_Delete Unused Instruments", 131}, - {"Display _Oscilloscopes", 132}, - {"Use _Backing Store", 133}, - {"_Keyboard Configuration..", 134}, - {"_Audio Configuration..", 135}, - {"_Playback Effects..", 136}, - {"_GUI Configuration..", 137}, - {"_Save Settings now", 138}, - {"Save Settings on _Exit", 139}, - {"_About..", 140}, - {"Show _Tips..", 141}, - {"_XM Effects..", 142}, - {"_File", 143}, - {"_Module", 144}, - {"_Edit", 145}, - {"_Instrument", 146}, - {"_Settings", 147}, - {"_Help", 148}, - {"/_File", 149}, - {"/File/_Open..", 150}, - {"/File/Save _as..", 151}, - {"/File/-", 152}, - {"/File/_Quit", 153}, - {"/_Module", 154}, - {"/Module/Clear _All", 155}, - {"/Module/Clear _Patterns Only", 156}, - {"/Module/_Optimize Module", 157}, - {"/_Edit", 158}, - {"/Edit/_Jazz Edit Mode", 159}, - {"/Edit/-", 160}, - {"/Edit/_Transposition..", 161}, - {"/Edit/_Pattern", 162}, - {"/Edit/Pattern/C_ut", 163}, - {"/Edit/Pattern/_Copy", 164}, - {"/Edit/Pattern/_Paste", 165}, - {"/Edit/_Track", 166}, - {"/Edit/Track/C_ut", 167}, - {"/Edit/Track/_Copy", 168}, - {"/Edit/Track/_Paste", 169}, - {"/Edit/_Selection", 170}, - {"/Edit/Selection/_Mark", 171}, - {"/Edit/Selection/C_ut", 172}, - {"/Edit/Selection/_Copy", 173}, - {"/Edit/Selection/_Paste", 174}, - {"/_Pattern", 175}, - {"/Pattern/_Find Unused Pattern", 176}, - {"/Pattern/_Copy Current to Unused Pattern", 177}, - {"/Pattern/C_lear Unused Patterns", 178}, - {"/Pattern/_Pack Patterns", 179}, - {"/_Instrument", 180}, - {"/Instrument/_Load XI..", 181}, - {"/Instrument/-", 182}, - {"/Instrument/_Delete Unused Instruments", 183}, - {"/_Settings", 184}, - {"/Settings/Display _Oscilloscopes", 185}, - {"/Settings/Use _Backing Store", 186}, - {"/Settings/-", 187}, - {"/Settings/_Keyboard Configuration..", 188}, - {"/Settings/_Audio Configuration..", 189}, - {"/Settings/_Playback Effects..", 190}, - {"/Settings/_GUI Configuration..", 191}, - {"/Settings/_Save Settings now", 192}, - {"/Settings/Save Settings on _Exit", 193}, - {"/_Help", 194}, - {"/Help/_About..", 195}, - {"/Help/-", 196}, - {"/Help/Show _Tips..", 197}, - {"/Help/_XM Effects..", 198}, - {"/Settings/Display Oscilloscopes", 199}, - {"/Settings/Use Backing Store", 200}, - {"/Settings/Save Settings on Exit", 201}, - {"Instrument Name", 202}, - {"#smpl", 203}, - {"Sample Name", 204}, - {"Linear", 205}, - {"Amiga", 206}, - {"Module Info", 207}, - {"Songname:", 208}, - {"Frequencies:", 209}, - {"ProTracker Mode", 210}, + {"_Insert", 120}, + {"_Delete", 121}, + {"_Mark", 122}, + {"_Jazz Edit Mode", 123}, + {"Transp_osition...", 124}, + {"_Pattern", 125}, + {"_Track", 126}, + {"_Selection", 127}, + {"_Find Unused Pattern", 128}, + {"_Copy Current to Unused Pattern", 129}, + {"C_lear Unused Patterns", 130}, + {"_Pack Patterns", 131}, + {"_Load XI...", 132}, + {"_Delete Unused Instruments", 133}, + {"Display _Oscilloscopes", 134}, + {"Use _Backing Store", 135}, + {"_Keyboard Configuration...", 136}, + {"_Audio Configuration...", 137}, + {"_Playback Effects...", 138}, + {"_GUI Configuration...", 139}, + {"_Save Settings now", 140}, + {"Save Settings on _Exit", 141}, + {"_About...", 142}, + {"Show _Tips...", 143}, + {"_XM Effects...", 144}, + {"_File", 145}, + {"_Module", 146}, + {"_Edit", 147}, + {"_Instrument", 148}, + {"_Settings", 149}, + {"_Help", 150}, + {"/_File", 151}, + {"/File/_Open...", 152}, + {"/File/Save _as...", 153}, + {"/File/-", 154}, + {"/File/_Quit", 155}, + {"/_Module", 156}, + {"/Module/Clear _All", 157}, + {"/Module/Clear _Patterns Only", 158}, + {"/Module/_Optimize Module", 159}, + {"/_Edit", 160}, + {"/Edit/_Jazz Edit Mode", 161}, + {"/Edit/-", 162}, + {"/Edit/_Transposition...", 163}, + {"/Edit/_Pattern", 164}, + {"/Edit/Pattern/C_ut", 165}, + {"/Edit/Pattern/_Copy", 166}, + {"/Edit/Pattern/_Paste", 167}, + {"/Edit/_Track", 168}, + {"/Edit/Track/C_ut", 169}, + {"/Edit/Track/_Copy", 170}, + {"/Edit/Track/_Paste", 171}, + {"/Edit/Track/_Insert", 172}, + {"/Edit/Track/_Delete", 173}, + {"/Edit/_Selection", 174}, + {"/Edit/Selection/_Mark", 175}, + {"/Edit/Selection/C_ut", 176}, + {"/Edit/Selection/_Copy", 177}, + {"/Edit/Selection/_Paste", 178}, + {"/_Pattern", 179}, + {"/Pattern/_Find Unused Pattern", 180}, + {"/Pattern/_Copy Current to Unused Pattern", 181}, + {"/Pattern/C_lear Unused Patterns", 182}, + {"/Pattern/_Pack Patterns", 183}, + {"/_Instrument", 184}, + {"/Instrument/_Load XI...", 185}, + {"/Instrument/-", 186}, + {"/Instrument/_Delete Unused Instruments", 187}, + {"/_Settings", 188}, + {"/Settings/Display _Oscilloscopes", 189}, + {"/Settings/Use _Backing Store", 190}, + {"/Settings/-", 191}, + {"/Settings/_Keyboard Configuration...", 192}, + {"/Settings/_Audio Configuration...", 193}, + {"/Settings/_Playback Effects...", 194}, + {"/Settings/_GUI Configuration...", 195}, + {"/Settings/_Save Settings now", 196}, + {"/Settings/Save Settings on _Exit", 197}, + {"/_Help", 198}, + {"/Help/_About...", 199}, + {"/Help/-", 200}, + {"/Help/Show _Tips...", 201}, + {"/Help/_XM Effects...", 202}, + {"/Settings/Display Oscilloscopes", 203}, + {"/Settings/Use Backing Store", 204}, + {"/Settings/Save Settings on Exit", 205}, + {"Instrument Name", 206}, + {"#smpl", 207}, + {"Sample Name", 208}, + {"Linear", 209}, + {"Amiga", 210}, + {"Module Info", 211}, + {"Songname:", 212}, + {"Frequencies:", 213}, + {"ProTracker Mode", 214}, {"\ A directory called '.soundtracker' has been created in your\n\ -home directory to store configuration files.\n", 211}, - {"No loop", 212}, - {"PingPong", 213}, - {"8 bits", 214}, - {"16 bits", 215}, - {"Sample Editor", 216}, - {"Volume", 217}, - {"Panning", 218}, - {"Finetune", 219}, - {"SelStart", 220}, - {"SelEnd", 221}, - {"Reset Sel", 222}, - {"RelNote", 223}, - {"Length: 0", 224}, - {"Load Sample..", 225}, - {"Save WAV..", 226}, - {"Load Sample", 227}, - {"Save WAV", 228}, - {"Clear", 229}, - {"Monitor", 230}, - {"Volume Ramp", 231}, - {"Zoom to selection", 232}, - {"Show all", 233}, - {"Zoom in (+50%)", 234}, - {"Zoom out (-50%)", 235}, - {"Resample", 236}, - {"Cut", 237}, - {"Remove", 238}, - {"Copy", 239}, - {"Paste", 240}, - {"Filter", 241}, - {"Length: %d", 242}, - {"No memory for copybuffer.\n", 243}, - {"", 244}, - {"Can't read sample", 245}, - {"Sample is too long for current mixer module. Loading anyway.", 246}, - {"Can only handle mono 8 and 16 bit samples", 247}, - {"Out of memory for sample data.", 248}, - {"Read error.", 249}, - {"Can't open file for writing.", 250}, - {"OK", 251}, - {"Start sampling", 252}, - {"Sampling Window", 253}, - {"out of memory while sampling...", 254}, - {"", 255}, - {"Recorded sample is too long for current mixer module. Using it anyway.", 256}, - {"Normalize", 257}, - {"Execute", 258}, - {"Close", 259}, - {"Volume Ramping", 260}, - {"Perform linear volume fade on Selection", 261}, - {"Left [%]:", 262}, - {"Right [%]:", 263}, - {"SoundTracker Tip of the day", 264}, - {"Previous Tip", 265}, - {"Next Tip", 266}, - {"Show tip next time", 267}, +home directory to store configuration files.\n", 215}, + {"No loop", 216}, + {"PingPong", 217}, + {"8 bits", 218}, + {"16 bits", 219}, + {"Sample Editor", 220}, + {"Volume", 221}, + {"Panning", 222}, + {"Finetune", 223}, + {"SelStart", 224}, + {"SelEnd", 225}, + {"Reset Sel", 226}, + {"RelNote", 227}, + {"Length: 0", 228}, + {"Load Sample..", 229}, + {"Save WAV..", 230}, + {"Load Sample", 231}, + {"Save WAV", 232}, + {"Clear", 233}, + {"Monitor", 234}, + {"Volume Ramp", 235}, + {"Zoom to selection", 236}, + {"Show all", 237}, + {"Zoom in (+50%)", 238}, + {"Zoom out (-50%)", 239}, + {"Resample", 240}, + {"Cut", 241}, + {"Remove", 242}, + {"Copy", 243}, + {"Paste", 244}, + {"Filter", 245}, + {"Length: %d", 246}, + {"", 247}, + {"Can't read sample", 248}, + {"Sample is too long for current mixer module. Loading anyway.", 249}, + {"Can only handle mono 8 and 16 bit samples", 250}, + {"Read error.", 251}, + {"Can't open file for writing.", 252}, + {"OK", 253}, + {"Start sampling", 254}, + {"Sampling Window", 255}, + {"", 256}, + {"Recorded sample is too long for current mixer module. Using it anyway.", 257}, + {"Normalize", 258}, + {"Execute", 259}, + {"Close", 260}, + {"Volume Ramping", 261}, + {"Perform linear volume fade on Selection", 262}, + {"Left [%]:", 263}, + {"Right [%]:", 264}, + {"SoundTracker Tip of the day", 265}, + {"Previous Tip", 266}, + {"Next Tip", 267}, + {"Show tip next time", 268}, {"\ Welcome to SoundTracker!\n\ \n\ If you are new to this type of program, you will want to get hold of\n\ -some XM or MOD files first and play with them.", 268}, +some XM or MOD files first and play with them.", 269}, {"\ You can make SoundTracker's edit mode more responsive to keyboard\n\ input by decreasing the mixing buffer size of the \"Editing\" object in\n\ -the Audio Configuration.", 269}, +the Audio Configuration.", 270}, {"\ You can adjust the loop points in the sample editor by holding Shift\n\ -and using the left and right mousebuttons.\n", 270}, +and using the left and right mousebuttons.\n", 271}, {"\ If you want to know more about tracking, and how the various commands\n\ -work, have a look at http://www.united-trackers.org/", 271}, +work, have a look at http://www.united-trackers.org/", 272}, {"\ You can assign samples of an instrument to the individual keys by\n\ activating its sample and then clicking on the keyboard in the\n\ -instrument editor page.", 272}, - {"/Pattern/_Cut", 273}, - {"/Pattern/_Copy", 274}, - {"/Pattern/_Paste", 275}, - {"Jazz Edit:", 276}, - {"Whole Song", 277}, - {"All Patterns", 278}, - {"Current Pattern", 279}, - {"Current Track", 280}, - {"Current Instrument", 281}, - {"All Instruments", 282}, - {"Half note up", 283}, - {"Half note down", 284}, - {"Octave up", 285}, - {"Octave down", 286}, - {"Exchange 1 <-> 2", 287}, - {"Change 1 -> 2", 288}, - {"Transposition Tools", 289}, - {"Scope of the operation:", 290}, - {"Note Transposition", 291}, - {"Instrument Changing", 292}, - {"Instrument 1:", 293}, - {"Current instrument", 294}, - {"Instrument 2:", 295}, - {"Pattern length out of range: %d.\n", 296}, - {"Invalid vibtype %d, using Sine.\n", 297}, - {"File is no XI instrument.", 298}, - {"Unknown XI version 0x%x\n", 299}, - {"No FastTracker XM and no supported MOD format!", 300}, - {"Error while loading patterns.", 301}, - {"Can't open file", 302}, - {"XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n", 303}, - {"Error while loading instruments.", 304}, +instrument editor page.", 273}, + {"Jazz Edit:", 274}, + {"Whole Song", 275}, + {"All Patterns", 276}, + {"Current Pattern", 277}, + {"Current Track", 278}, + {"Current Instrument", 279}, + {"All Instruments", 280}, + {"Half note up", 281}, + {"Half note down", 282}, + {"Octave up", 283}, + {"Octave down", 284}, + {"Exchange 1 <-> 2", 285}, + {"Change 1 -> 2", 286}, + {"Transposition Tools", 287}, + {"Scope of the operation:", 288}, + {"Note Transposition", 289}, + {"Instrument Changing", 290}, + {"Instrument 1:", 291}, + {"Current instrument", 292}, + {"Instrument 2:", 293}, + {"Pattern length out of range: %d.\n", 294}, + {"Invalid vibtype %d, using Sine.\n", 295}, + {"File is no XI instrument.", 296}, + {"Unknown XI version 0x%x\n", 297}, + {"No FastTracker XM and no supported MOD format!", 298}, + {"Error while loading patterns.", 299}, + {"Can't open file", 300}, + {"XM header length != 276. Maybe a pre-0.0.12 SoundTracker module? :-)\n", 301}, + {"Error while loading instruments.", 302}, {"\ Module contains sample(s) that are too long for the current mixer.\n\ -Maximum sample length is %d.", 305}, +Maximum sample length is %d.", 303}, }; -int _msg_tbl_length = 305; +int _msg_tbl_length = 303; Binary files soundtracker-0.3.4/po/de.gmo and soundtracker-0.3.5/po/de.gmo differ diff -urN soundtracker-0.3.4/po/de.po soundtracker-0.3.5/po/de.po --- soundtracker-0.3.4/po/de.po Sat Sep 25 17:25:55 1999 +++ soundtracker-0.3.5/po/de.po Fri Oct 8 16:33:09 1999 @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: soundtracker-0.3.3\n" -"POT-Creation-Date: 1999-09-25 17:25+0200\n" +"POT-Creation-Date: 1999-10-08 16:31+0200\n" "PO-Revision-Date: 1999-09-21 23:00+02:00\n" "Last-Translator: Colin Marquardt \n" "Language-Team: German \n" @@ -25,11 +25,11 @@ msgid "Sampling" msgstr "Samplen" -#: app/audioconfig.c:179 +#: app/audioconfig.c:178 msgid "Driver Module" msgstr "Treibermodul" -#: app/audioconfig.c:187 app/audioconfig.c:190 +#: app/audioconfig.c:186 app/audioconfig.c:189 msgid "Audio Configuration" msgstr "Audio-Konfiguration" @@ -39,33 +39,33 @@ msgstr "(%d Bytes)" #: app/drivers/alsa-input.c:128 app/drivers/alsa-output.c:138 -#: app/drivers/oss-output.c:136 +#: app/drivers/oss-output.c:139 #, c-format msgid "Estimated audio delay: %f microseconds" msgstr "Geschätzte Audio-Verzögerung: %f Mikrosekunden" #: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:200 -#: app/drivers/oss-output.c:185 +#: app/drivers/oss-output.c:188 msgid "These changes won't take effect until you restart playing." msgstr "Diese Änderungen werden erst beim nächsten Neustart wirksam." #: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:212 -#: app/drivers/oss-output.c:197 +#: app/drivers/oss-output.c:200 msgid "Resolution:" msgstr "Auflösung:" #: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:222 -#: app/drivers/oss-output.c:207 +#: app/drivers/oss-output.c:210 msgid "Channels:" msgstr "Kanäle:" #: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:232 -#: app/drivers/oss-output.c:217 +#: app/drivers/oss-output.c:220 msgid "Frequency [Hz]:" msgstr "Frequenz [Hz]:" #: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:242 -#: app/drivers/oss-output.c:227 +#: app/drivers/oss-output.c:230 msgid "Buffer Size:" msgstr "Puffergröße:" @@ -87,7 +87,7 @@ "%s" #: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:427 -#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 +#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:390 msgid "Required sound output format not supported.\n" msgstr "Erforderliches Soundausgabeformat nicht unterstützt.\n" @@ -117,12 +117,12 @@ "Konnte /dev/dsp nicht zum Samplen öffnen:\n" "%s" -#: app/drivers/oss-output.c:170 +#: app/drivers/oss-output.c:173 #, c-format msgid "(%d samples)" msgstr "(%d Samples)" -#: app/drivers/oss-output.c:354 +#: app/drivers/oss-output.c:357 #, c-format msgid "" "Couldn't open /dev/dsp for sound output:\n" @@ -155,11 +155,11 @@ msgid "Value" msgstr "Wert" -#: app/envelope-box.c:749 app/gui.c:1074 +#: app/envelope-box.c:749 app/gui.c:1078 msgid "Insert" msgstr "Einfügen" -#: app/envelope-box.c:755 app/gui.c:1081 +#: app/envelope-box.c:755 app/gui.c:1085 msgid "Delete" msgstr "Löschen" @@ -197,68 +197,68 @@ msgid "End" msgstr "Ende" -#: app/gui-settings.c:69 +#: app/gui-settings.c:75 msgid "Scopes Frequency" msgstr "Scope-Frequenz" -#: app/gui-settings.c:72 +#: app/gui-settings.c:78 msgid "Tracker Frequency" msgstr "Tracker-Frequenz" -#: app/gui-settings.c:155 app/gui-settings.c:158 +#: app/gui-settings.c:161 app/gui-settings.c:164 msgid "GUI Configuration" msgstr "GUI-Konfiguration" -#: app/gui-settings.c:183 +#: app/gui-settings.c:189 msgid "Use Hexadecimal Numbers" msgstr "Verwende hexadezimale Zahlen" -#: app/gui-settings.c:190 +#: app/gui-settings.c:196 msgid "Advance Cursor in FX Columns" msgstr "Lasse Cursor in FX-Spalten mitlaufen" -#: app/gui-settings.c:197 +#: app/gui-settings.c:203 msgid "Use anti-aliased envelope editor" msgstr "Verwende Antialiasing im Hüllkurven-Editor" -#: app/gui-settings.c:203 +#: app/gui-settings.c:209 msgid "You need to restart SoundTracker for this change to come into effect." msgstr "" "Sie müssen SoundTracker neustarten, damit diese Änderungen wirksam werden." -#: app/gui-settings.c:212 +#: app/gui-settings.c:218 msgid "Scopes buffer size [MB]" msgstr "Puffergröße der Scopes [MB]" -#: app/gui-settings.c:231 +#: app/gui-settings.c:237 msgid "Highlight rows:" msgstr "" -#: app/gui-settings.c:249 +#: app/gui-settings.c:255 msgid "`Save XM' saves all non-empty patterns" msgstr "`Speichere XM' speichert alle nicht-leeren Pattern" -#: app/gui-subs.c:374 +#: app/gui-subs.c:386 msgid "Question" msgstr "Frage" -#: app/gui-subs.c:391 app/sample-editor.c:1172 +#: app/gui-subs.c:403 app/sample-editor.c:1172 msgid "Cancel" msgstr "Abbrechen" -#: app/gui-subs.c:409 +#: app/gui-subs.c:421 msgid "Warning" msgstr "Warnung" -#: app/gui-subs.c:435 +#: app/gui-subs.c:447 msgid "Error!" msgstr "Fehler!" -#: app/gui.c:81 +#: app/gui.c:82 msgid "Tempo" msgstr "Tempo" -#: app/gui.c:209 +#: app/gui.c:211 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" @@ -266,147 +266,147 @@ "Sind Sie sicher, daß Sie das aktuelle Projekt schließen wollen?\n" "Alle Änderungen gehen verloren!" -#: app/gui.c:221 +#: app/gui.c:225 msgid "Are you sure you want to overwrite the file?" msgstr "Sind sie sicher, daß Sie die Datei überschreiben wollen?" -#: app/gui.c:1065 +#: app/gui.c:1069 msgid "Song length" msgstr "Song-Länge" -#: app/gui.c:1066 +#: app/gui.c:1070 msgid "Current pos" msgstr "Aktuelle Pos" -#: app/gui.c:1067 app/gui.c:1222 +#: app/gui.c:1071 app/gui.c:1228 msgid "Pattern" msgstr "Pattern" -#: app/gui.c:1068 +#: app/gui.c:1072 msgid "Restart pos" msgstr "Restart-Pos" -#: app/gui.c:1136 +#: app/gui.c:1140 msgid "Load XM..." msgstr "Lade XM..." -#: app/gui.c:1137 +#: app/gui.c:1142 msgid "Save XM..." msgstr "Speichere XM..." -#: app/gui.c:1175 +#: app/gui.c:1181 msgid "Play Song" msgstr "Spiele Song" -#: app/gui.c:1181 +#: app/gui.c:1187 msgid "Play Pattern" msgstr "Spiele Pattern" -#: app/gui.c:1187 +#: app/gui.c:1193 msgid "Stop" msgstr "Stop" -#: app/gui.c:1206 +#: app/gui.c:1212 msgid "Number of Channels:" msgstr "Anzahl der Kanäle:" -#: app/gui.c:1238 +#: app/gui.c:1244 msgid "PatLength" msgstr "PatLänge" -#: app/gui.c:1330 +#: app/gui.c:1336 msgid "Octave" msgstr "Oktave" -#: app/gui.c:1338 +#: app/gui.c:1344 msgid "Jump" msgstr "Springe" -#: app/gui.c:1346 +#: app/gui.c:1352 msgid "Instr" msgstr "Instr" -#: app/gui.c:1361 +#: app/gui.c:1367 msgid "Sample" msgstr "Sample" -#: app/instrument-editor.c:74 +#: app/instrument-editor.c:75 msgid "VolFade" msgstr "VolFade" -#: app/instrument-editor.c:75 +#: app/instrument-editor.c:76 msgid "VibSpeed" msgstr "VibSpeed" -#: app/instrument-editor.c:76 +#: app/instrument-editor.c:77 msgid "VibDepth" msgstr "VibTiefe" -#: app/instrument-editor.c:77 +#: app/instrument-editor.c:78 msgid "VibSweep" msgstr "VibSweep" -#: app/instrument-editor.c:153 +#: app/instrument-editor.c:154 msgid "Can't open file." msgstr "Kann Datei nicht öffnen." -#: app/instrument-editor.c:172 +#: app/instrument-editor.c:174 msgid "Saving Instruments not yet supported." msgstr "Speichern von Instrumenten noch nicht unterstützt." -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Sine" msgstr "Sinus" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Square" msgstr "Rechteck" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Saw Down" msgstr "Säge Fall" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Saw Up" msgstr "Säge Steig" -#: app/instrument-editor.c:184 +#: app/instrument-editor.c:186 msgid "Instrument Editor" msgstr "Instrumenten-Editor" -#: app/instrument-editor.c:193 +#: app/instrument-editor.c:195 msgid "Volume envelope" msgstr "Lautstärken-Hüllkurve" -#: app/instrument-editor.c:201 +#: app/instrument-editor.c:203 msgid "Panning envelope" msgstr "Balance-Hüllkurve" -#: app/instrument-editor.c:218 +#: app/instrument-editor.c:220 msgid "Load Instrument.." msgstr "Lade Instrument..." -#: app/instrument-editor.c:219 +#: app/instrument-editor.c:222 msgid "Save Instrument.." msgstr "Speichere Instrument..." -#: app/instrument-editor.c:221 +#: app/instrument-editor.c:224 msgid "Load XI" msgstr "Lade XI" -#: app/instrument-editor.c:227 +#: app/instrument-editor.c:230 msgid "Save XI" msgstr "Speichere XI" -#: app/instrument-editor.c:247 +#: app/instrument-editor.c:250 msgid "Vibrato Type:" msgstr "Vibrato-Typ:" -#: app/instrument-editor.c:319 +#: app/instrument-editor.c:322 msgid "Note:" msgstr "Note:" -#: app/instrument-editor.c:337 +#: app/instrument-editor.c:340 msgid "Initialize" msgstr "Initialisieren" @@ -530,367 +530,409 @@ "Sind Sie sicher, daß Sie das Programm beenden wollen?\n" "Alle Änderungen gehen verloren!" -#: app/menubar.c:225 -msgid "_Open.." +#: app/menubar.c:227 +#, fuzzy +msgid "_Open..." msgstr "Ö_ffnen..." -#: app/menubar.c:227 -msgid "Save _as.." +#: app/menubar.c:229 +#, fuzzy +msgid "Save _as..." msgstr "Speichern _unter..." -#: app/menubar.c:232 +#: app/menubar.c:234 msgid "_Quit" msgstr "_Beenden" -#: app/menubar.c:239 +#: app/menubar.c:241 msgid "Clear _All" msgstr "_Alles löschen" -#: app/menubar.c:241 +#: app/menubar.c:243 msgid "Clear _Patterns Only" msgstr "Nur _Pattern löschen" -#: app/menubar.c:243 +#: app/menubar.c:245 msgid "_Optimize Module" msgstr "Modul _optimieren" -#: app/menubar.c:250 app/menubar.c:261 app/menubar.c:274 +#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:281 msgid "C_ut" msgstr "_Ausschneiden" -#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:276 +#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:283 msgid "_Copy" msgstr "_Kopieren" -#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:278 +#: app/menubar.c:256 app/menubar.c:267 app/menubar.c:285 msgid "_Paste" msgstr "E_infügen" -#: app/menubar.c:272 +#: app/menubar.c:269 +#, fuzzy +msgid "_Insert" +msgstr "Einfügen" + +#: app/menubar.c:271 +#, fuzzy +msgid "_Delete" +msgstr "Löschen" + +#: app/menubar.c:279 msgid "_Mark" msgstr "_Markieren" -#: app/menubar.c:285 +#: app/menubar.c:292 msgid "_Jazz Edit Mode" msgstr "_Jazz-Edit-Modus" -#: app/menubar.c:290 -msgid "_Transposition.." +#: app/menubar.c:297 +#, fuzzy +msgid "Transp_osition..." msgstr "_Transposition..." -#: app/menubar.c:295 app/menubar.c:373 +#: app/menubar.c:302 app/menubar.c:380 msgid "_Pattern" msgstr "_Pattern" -#: app/menubar.c:296 +#: app/menubar.c:303 msgid "_Track" msgstr "_Track" -#: app/menubar.c:297 +#: app/menubar.c:304 msgid "_Selection" msgstr "_Auswahl" -#: app/menubar.c:303 +#: app/menubar.c:310 msgid "_Find Unused Pattern" msgstr "_Finde unbenutztes Pattern" -#: app/menubar.c:305 +#: app/menubar.c:312 msgid "_Copy Current to Unused Pattern" msgstr "_Kopiere aktuelles zu unbenutztem Pattern" -#: app/menubar.c:307 +#: app/menubar.c:314 msgid "C_lear Unused Patterns" msgstr "_Lösche unbenutzte Pattern" -#: app/menubar.c:309 +#: app/menubar.c:316 msgid "_Pack Patterns" msgstr "_Packe Pattern" -#: app/menubar.c:316 -msgid "_Load XI.." +#: app/menubar.c:323 +#, fuzzy +msgid "_Load XI..." msgstr "_Lade XI..." -#: app/menubar.c:321 +#: app/menubar.c:328 msgid "_Delete Unused Instruments" msgstr "Lösche unbenutzte _Instrumente" -#: app/menubar.c:329 +#: app/menubar.c:336 msgid "Display _Oscilloscopes" msgstr "Zeige _Oszilloskope" -#: app/menubar.c:331 +#: app/menubar.c:338 msgid "Use _Backing Store" msgstr "Verwende _Backing Store" -#: app/menubar.c:336 -msgid "_Keyboard Configuration.." +#: app/menubar.c:343 +#, fuzzy +msgid "_Keyboard Configuration..." msgstr "_Tastatur-Konfiguration..." -#: app/menubar.c:338 -msgid "_Audio Configuration.." +#: app/menubar.c:345 +#, fuzzy +msgid "_Audio Configuration..." msgstr "_Audio-Konfiguration..." -#: app/menubar.c:340 -msgid "_Playback Effects.." +#: app/menubar.c:347 +#, fuzzy +msgid "_Playback Effects..." msgstr "_Playback-Effekte..." -#: app/menubar.c:342 -msgid "_GUI Configuration.." +#: app/menubar.c:349 +#, fuzzy +msgid "_GUI Configuration..." msgstr "_GUI-Konfiguration..." -#: app/menubar.c:347 +#: app/menubar.c:354 msgid "_Save Settings now" msgstr "_Speichere Einstellungen jetzt" -#: app/menubar.c:349 +#: app/menubar.c:356 msgid "Save Settings on _Exit" msgstr "Speichere Einstellungen beim _Verlassen" -#: app/menubar.c:356 -msgid "_About.." +#: app/menubar.c:363 +#, fuzzy +msgid "_About..." msgstr "Ü_ber..." -#: app/menubar.c:361 -msgid "Show _Tips.." +#: app/menubar.c:368 +#, fuzzy +msgid "Show _Tips..." msgstr "Zeige _Tips..." -#: app/menubar.c:363 -msgid "_XM Effects.." +#: app/menubar.c:370 +#, fuzzy +msgid "_XM Effects..." msgstr "_XM-Effekte..." -#: app/menubar.c:370 +#: app/menubar.c:377 msgid "_File" msgstr "_Datei" -#: app/menubar.c:371 +#: app/menubar.c:378 msgid "_Module" msgstr "_Modul" -#: app/menubar.c:372 +#: app/menubar.c:379 msgid "_Edit" msgstr "_Bearbeiten" -#: app/menubar.c:374 +#: app/menubar.c:381 msgid "_Instrument" msgstr "_Instrument" -#: app/menubar.c:375 +#: app/menubar.c:382 msgid "_Settings" msgstr "_Einstellungen" -#: app/menubar.c:376 +#: app/menubar.c:383 msgid "_Help" msgstr "_Hilfe" -#: app/menubar.c:404 +#: app/menubar.c:411 msgid "/_File" msgstr "/_Datei" -#: app/menubar.c:405 -msgid "/File/_Open.." +#: app/menubar.c:412 +#, fuzzy +msgid "/File/_Open..." msgstr "/Datei/Ö_ffnen..." -#: app/menubar.c:406 -msgid "/File/Save _as.." +#: app/menubar.c:413 +#, fuzzy +msgid "/File/Save _as..." msgstr "/Datei/Speichern _unter..." -#: app/menubar.c:407 +#: app/menubar.c:414 msgid "/File/-" msgstr "/Datei/-" -#: app/menubar.c:408 +#: app/menubar.c:415 msgid "/File/_Quit" msgstr "/Datei/_Beenden" -#: app/menubar.c:409 +#: app/menubar.c:416 msgid "/_Module" msgstr "/_Modul" -#: app/menubar.c:410 +#: app/menubar.c:417 msgid "/Module/Clear _All" msgstr "/Modul/Lösche _alle" -#: app/menubar.c:411 +#: app/menubar.c:418 msgid "/Module/Clear _Patterns Only" msgstr "/Modul/Lösche nur _Pattern" -#: app/menubar.c:412 +#: app/menubar.c:419 msgid "/Module/_Optimize Module" msgstr "/Modul/_Optimiere Modul" -#: app/menubar.c:413 +#: app/menubar.c:420 msgid "/_Edit" msgstr "/_Bearbeiten" -#: app/menubar.c:414 +#: app/menubar.c:421 msgid "/Edit/_Jazz Edit Mode" msgstr "/Bearbeiten/_Jazz-Edit-Mode" -#: app/menubar.c:415 app/menubar.c:417 +#: app/menubar.c:422 app/menubar.c:424 msgid "/Edit/-" msgstr "/Bearbeiten/-" -#: app/menubar.c:416 -msgid "/Edit/_Transposition.." +#: app/menubar.c:423 +#, fuzzy +msgid "/Edit/_Transposition..." msgstr "/Bearbeiten/_Transposition..." -#: app/menubar.c:418 +#: app/menubar.c:425 msgid "/Edit/_Pattern" msgstr "/Bearbeiten/_Pattern" -#: app/menubar.c:419 +#: app/menubar.c:426 msgid "/Edit/Pattern/C_ut" msgstr "/Bearbeiten/Pattern/_Ausschneiden" -#: app/menubar.c:420 +#: app/menubar.c:427 msgid "/Edit/Pattern/_Copy" msgstr "/Bearbeiten/Pattern/_Kopieren" -#: app/menubar.c:421 +#: app/menubar.c:428 msgid "/Edit/Pattern/_Paste" msgstr "/Bearbeiten/Pattern/E_infügen" -#: app/menubar.c:422 +#: app/menubar.c:429 msgid "/Edit/_Track" msgstr "/Bearbeiten/_Track" -#: app/menubar.c:423 +#: app/menubar.c:430 msgid "/Edit/Track/C_ut" msgstr "/Bearbeiten/Track/_Ausschneiden" -#: app/menubar.c:424 +#: app/menubar.c:431 msgid "/Edit/Track/_Copy" msgstr "/Bearbeiten/Track/_Kopieren" -#: app/menubar.c:425 +#: app/menubar.c:432 msgid "/Edit/Track/_Paste" msgstr "/Bearbeiten/Track/E_infügen" -#: app/menubar.c:426 +#: app/menubar.c:433 +#, fuzzy +msgid "/Edit/Track/_Insert" +msgstr "/Bearbeiten/Track/E_infügen" + +#: app/menubar.c:434 +#, fuzzy +msgid "/Edit/Track/_Delete" +msgstr "/Bearbeiten/Track/E_infügen" + +#: app/menubar.c:435 msgid "/Edit/_Selection" msgstr "/Bearbeiten/_Auswahl" -#: app/menubar.c:427 +#: app/menubar.c:436 msgid "/Edit/Selection/_Mark" msgstr "/Bearbeiten/Auswahl/_Markieren" -#: app/menubar.c:428 +#: app/menubar.c:437 msgid "/Edit/Selection/C_ut" msgstr "/Bearbeiten/Auswahl/_Ausschneiden" -#: app/menubar.c:429 +#: app/menubar.c:438 msgid "/Edit/Selection/_Copy" msgstr "/Bearbeiten/Auswahl/_Kopieren" -#: app/menubar.c:430 +#: app/menubar.c:439 msgid "/Edit/Selection/_Paste" msgstr "/Bearbeiten/Auswahl/E_infügen" -#: app/menubar.c:431 app/track-editor.c:72 +#: app/menubar.c:440 msgid "/_Pattern" msgstr "/_Pattern" -#: app/menubar.c:432 +#: app/menubar.c:441 msgid "/Pattern/_Find Unused Pattern" msgstr "/Pattern/_Finde unbenutztes Pattern" -#: app/menubar.c:433 +#: app/menubar.c:442 msgid "/Pattern/_Copy Current to Unused Pattern" msgstr "/Pattern/_Kopiere aktuelles zu unbenutztem Pattern" -#: app/menubar.c:434 +#: app/menubar.c:443 msgid "/Pattern/C_lear Unused Patterns" msgstr "/Pattern/_Lösche unbenutzte Pattern" -#: app/menubar.c:435 +#: app/menubar.c:444 msgid "/Pattern/_Pack Patterns" msgstr "/Pattern/_Packe Pattern" -#: app/menubar.c:436 +#: app/menubar.c:445 msgid "/_Instrument" msgstr "/_Instrument" -#: app/menubar.c:437 -msgid "/Instrument/_Load XI.." +#: app/menubar.c:446 +#, fuzzy +msgid "/Instrument/_Load XI..." msgstr "/Instrument/_Lade XI..." -#: app/menubar.c:438 +#: app/menubar.c:447 msgid "/Instrument/-" msgstr "/Instrument/-" -#: app/menubar.c:439 +#: app/menubar.c:448 msgid "/Instrument/_Delete Unused Instruments" msgstr "/Instrument/_Lösche unbenutzte Instrumente" -#: app/menubar.c:440 +#: app/menubar.c:449 msgid "/_Settings" msgstr "/_Einstellungen" -#: app/menubar.c:441 +#: app/menubar.c:450 msgid "/Settings/Display _Oscilloscopes" msgstr "/Einstellungen/Zeige _Oszilloskope" -#: app/menubar.c:442 +#: app/menubar.c:451 msgid "/Settings/Use _Backing Store" msgstr "/Einstellungen/Verwende _Backing Store" -#: app/menubar.c:443 app/menubar.c:448 +#: app/menubar.c:452 app/menubar.c:457 msgid "/Settings/-" msgstr "/Einstellungen/-" -#: app/menubar.c:444 -msgid "/Settings/_Keyboard Configuration.." +#: app/menubar.c:453 +#, fuzzy +msgid "/Settings/_Keyboard Configuration..." msgstr "/Einstellungen/_Tastatur-Konfiguration..." -#: app/menubar.c:445 -msgid "/Settings/_Audio Configuration.." +#: app/menubar.c:454 +#, fuzzy +msgid "/Settings/_Audio Configuration..." msgstr "/Einstellungen/_Audio-Konfiguration..." -#: app/menubar.c:446 -msgid "/Settings/_Playback Effects.." +#: app/menubar.c:455 +#, fuzzy +msgid "/Settings/_Playback Effects..." msgstr "/Einstellungen/_Playback-Effekte..." -#: app/menubar.c:447 -msgid "/Settings/_GUI Configuration.." +#: app/menubar.c:456 +#, fuzzy +msgid "/Settings/_GUI Configuration..." msgstr "/Einstellungen/_GUI-Konfiguration..." -#: app/menubar.c:449 +#: app/menubar.c:458 msgid "/Settings/_Save Settings now" msgstr "/Einstellungen/_Speichere Einstellungen jetzt" -#: app/menubar.c:450 +#: app/menubar.c:459 msgid "/Settings/Save Settings on _Exit" msgstr "/Einstellungen/Speichere Einstellungen beim _Verlassen" -#: app/menubar.c:451 +#: app/menubar.c:460 msgid "/_Help" msgstr "/_Hilfe" -#: app/menubar.c:452 -msgid "/Help/_About.." +#: app/menubar.c:461 +#, fuzzy +msgid "/Help/_About..." msgstr "/Hilfe/Ü_ber..." -#: app/menubar.c:453 +#: app/menubar.c:462 msgid "/Help/-" msgstr "/Hilfe/-" -#: app/menubar.c:454 -msgid "/Help/Show _Tips.." +#: app/menubar.c:463 +#, fuzzy +msgid "/Help/Show _Tips..." msgstr "/Hilfe/Zeige _Tips..." -#: app/menubar.c:455 -msgid "/Help/_XM Effects.." +#: app/menubar.c:464 +#, fuzzy +msgid "/Help/_XM Effects..." msgstr "/Hilfe/_XM-Effekte..." -#: app/menubar.c:469 +#: app/menubar.c:478 msgid "/Settings/Display Oscilloscopes" msgstr "/Einstellungen/Zeige Oszilloskope" -#: app/menubar.c:471 +#: app/menubar.c:480 msgid "/Settings/Use Backing Store" msgstr "/Einstellungen/Verwende Backing Store" -#: app/menubar.c:473 +#: app/menubar.c:482 msgid "/Settings/Save Settings on Exit" msgstr "/Einstellungen/Speichere Einstellungen beim Verlassen" @@ -1063,10 +1105,6 @@ msgid "Length: %d" msgstr "Länge: %d" -#: app/sample-editor.c:865 -msgid "No memory for copybuffer.\n" -msgstr "Kein Speicherplatz für Kopienpuffer.\n" - #: app/sample-editor.c:957 msgid "" msgstr "" @@ -1083,10 +1121,6 @@ msgid "Can only handle mono 8 and 16 bit samples" msgstr "Kann nur mono- 8 und 16 Bit Samples verarbeiten" -#: app/sample-editor.c:1060 -msgid "Out of memory for sample data." -msgstr "Kein Speicherplatz für Sampledaten." - #: app/sample-editor.c:1065 msgid "Read error." msgstr "Lesefehler." @@ -1107,10 +1141,6 @@ msgid "Sampling Window" msgstr "Sampling-Fenster" -#: app/sample-editor.c:1252 -msgid "out of memory while sampling..." -msgstr "Kein Speicherplatz mehr während Sampling..." - #: app/sample-editor.c:1303 msgid "" msgstr "" @@ -1217,19 +1247,7 @@ "das Sample aktivieren und dann auf die Tastatur im Instrumenten-Editor " "klicken." -#: app/track-editor.c:73 -msgid "/Pattern/_Cut" -msgstr "/Pattern/_Ausschneiden" - -#: app/track-editor.c:74 -msgid "/Pattern/_Copy" -msgstr "/Pattern/_Kopieren" - -#: app/track-editor.c:75 -msgid "/Pattern/_Paste" -msgstr "/Pattern/E_infügen" - -#: app/track-editor.c:139 +#: app/track-editor.c:82 msgid "Jazz Edit:" msgstr "Jazz-Edit:" @@ -1357,3 +1375,21 @@ msgstr "" "Modul enthält Sample(s), die zu lang für den aktuellen Mixer sind..\n" "Maximale Sample-Länge ist %d." + +#~ msgid "/Pattern/_Cut" +#~ msgstr "/Pattern/_Ausschneiden" + +#~ msgid "/Pattern/_Copy" +#~ msgstr "/Pattern/_Kopieren" + +#~ msgid "/Pattern/_Paste" +#~ msgstr "/Pattern/E_infügen" + +#~ msgid "No memory for copybuffer.\n" +#~ msgstr "Kein Speicherplatz für Kopienpuffer.\n" + +#~ msgid "Out of memory for sample data." +#~ msgstr "Kein Speicherplatz für Sampledaten." + +#~ msgid "out of memory while sampling..." +#~ msgstr "Kein Speicherplatz mehr während Sampling..." Binary files soundtracker-0.3.4/po/es.gmo and soundtracker-0.3.5/po/es.gmo differ diff -urN soundtracker-0.3.4/po/es.po soundtracker-0.3.5/po/es.po --- soundtracker-0.3.4/po/es.po Thu Jan 1 01:00:00 1970 +++ soundtracker-0.3.5/po/es.po Wed Oct 6 12:00:08 1999 @@ -0,0 +1,1321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 1999-10-02 23:58+0200\n" +"PO-Revision-Date: 1999-10-02 23:58+0200\n" +"Last-Translator: German Gomez >\n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: app/audioconfig.c:55 +msgid "Playback Output" +msgstr "Salida para reproducción" + +#: app/audioconfig.c:61 +msgid "Editing Output" +msgstr "Salida para edición" + +#: app/audioconfig.c:67 +msgid "Sampling" +msgstr "Muestreo" + +#: app/audioconfig.c:179 +msgid "Driver Module" +msgstr "Módulo de dispositivo" + +#: app/audioconfig.c:187 app/audioconfig.c:190 +msgid "Audio Configuration" +msgstr "Configuración de Audio" + +#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:135 +#, c-format +msgid "(%d bytes)" +msgstr "" + +#: app/drivers/alsa-input.c:128 app/drivers/alsa-output.c:138 +#: app/drivers/oss-output.c:136 +#, c-format +msgid "Estimated audio delay: %f microseconds" +msgstr "Retraso de audio estimado: %f microsegundos" + +#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:200 +#: app/drivers/oss-output.c:185 +msgid "These changes won't take effect until you restart playing." +msgstr "Estos cambios no tendrán efecto hasta la próxima reproducción" + +#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:212 +#: app/drivers/oss-output.c:197 +msgid "Resolution:" +msgstr "Resolución:" + +#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:222 +#: app/drivers/oss-output.c:207 +msgid "Channels:" +msgstr "Canales:" + +#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:232 +#: app/drivers/oss-output.c:217 +msgid "Frequency [Hz]:" +msgstr "Frecuencia [Hz]:" + +#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:242 +#: app/drivers/oss-output.c:227 +msgid "Buffer Size:" +msgstr "Tamaño del buffer:" + +#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:275 +msgid "ALSA card number:" +msgstr "Número de la tarjeta ALSA" + +#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:290 +msgid "ALSA device number:" +msgstr "Número de dispositvo ALSA" + +#: app/drivers/alsa-input.c:374 +#, c-format +msgid "" +"Couldn't open ALSA device for sound input (card:%d, device:%d):\n" +"%s" +msgstr "" +"No se pudo abrir el dispositivo ALSA para entrada de sonido (tarjeta:%d, dispositivo:%d):\n" +"%s" + +#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:427 +#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 +msgid "Required sound output format not supported.\n" +msgstr "El formato sonoro solicitado no esta soportado.\n" + +#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:442 +msgid "Required sound output parameters not supported.\n" +msgstr "Los parámetros de salida de sonido no estan soportados.\n" + +#: app/drivers/alsa-output.c:378 +#, c-format +msgid "" +"Couldn't open ALSA device for sound output (card:%d, device:%d):\n" +"%s" +msgstr "" +"No se pudo abrir el dispositivo ALSA para salida de sonido (tarjeta:%d, dispositivo:%d):\n" +"%s" + +#: app/drivers/oss-input.c:90 +msgid "no settings (yet), sorry!" +msgstr "no hay preferencias (todavía), ¡lo siento!" + +#: app/drivers/oss-input.c:188 +#, c-format +msgid "" +"Couldn't open /dev/dsp for sampling:\n" +"%s" +msgstr "" +"No se pudo abrir /dev/dsp para muestreo:\n" +"%s" + +#: app/drivers/oss-output.c:170 +#, c-format +msgid "(%d samples)" +msgstr "(%d muestras)" + +#: app/drivers/oss-output.c:354 +#, c-format +msgid "" +"Couldn't open /dev/dsp for sound output:\n" +"%s" +msgstr "" +"No se pudo abrir /dev/dsp para salida de sonido:\n" +"%s" + +#: app/effectsconfig.c:56 +msgid "Master Reverb" +msgstr "Reverberación principal" + +#: app/effectsconfig.c:153 app/effectsconfig.c:156 +msgid "Playback Effects Configuration" +msgstr "Configuración de Efectos de Reproducción" + +#: app/envelope-box.c:740 +msgid "Length" +msgstr "Longitud" + +#: app/envelope-box.c:741 +msgid "Current" +msgstr "Actual" + +#: app/envelope-box.c:742 +msgid "Offset" +msgstr "Desplazamiento" + +#: app/envelope-box.c:743 +msgid "Value" +msgstr "Valor" + +#: app/envelope-box.c:749 app/gui.c:1074 +msgid "Insert" +msgstr "Insertar" + +#: app/envelope-box.c:755 app/gui.c:1081 +msgid "Delete" +msgstr "Eliminar" + +#: app/envelope-box.c:843 +msgid "" +"Graphical\n" +"Envelope\n" +"Editor\n" +"only in\n" +"GNOME Version" +msgstr "" +"Editor\n" +"Grafico\n" +"de la Envolvente\n" +"solo en la\n" +"Version GNOME" + +#: app/envelope-box.c:858 +msgid "Sustain" +msgstr "Sostenido" + +#: app/envelope-box.c:866 +msgid "Point" +msgstr "Punto" + +#: app/envelope-box.c:868 +msgid "Loop" +msgstr "Ciclo" + +#: app/envelope-box.c:876 app/sample-editor.c:207 +msgid "Start" +msgstr "Comienzo" + +#: app/envelope-box.c:877 app/sample-editor.c:208 +msgid "End" +msgstr "Final" + +#: app/gui-settings.c:69 +msgid "Scopes Frequency" +msgstr "Frecuencia de los osciloscopios" + +#: app/gui-settings.c:72 +msgid "Tracker Frequency" +msgstr "Frecuencia del Tracker" + +#: app/gui-settings.c:155 app/gui-settings.c:158 +msgid "GUI Configuration" +msgstr "Configuracion del GUI" + +#: app/gui-settings.c:183 +msgid "Use Hexadecimal Numbers" +msgstr "Usar números hexadecimales" + +#: app/gui-settings.c:190 +msgid "Advance Cursor in FX Columns" +msgstr "Avanzar el cursor en las columnas de efectos" + +#: app/gui-settings.c:197 +msgid "Use anti-aliased envelope editor" +msgstr "Usar antialias en el editor de envolvente" + +#: app/gui-settings.c:203 +msgid "You need to restart SoundTracker for this change to come into effect." +msgstr "Necesita reinicar SoundTracker para que este cambio tenga efecto" + +#: app/gui-settings.c:212 +msgid "Scopes buffer size [MB]" +msgstr "Tamaño del buffer para los osciloscopios [MB]" + +#: app/gui-settings.c:231 +msgid "Highlight rows:" +msgstr "Iluminar filas:" + +#: app/gui-settings.c:249 +msgid "`Save XM' saves all non-empty patterns" +msgstr "Guardar XM' guarda todos los patrones no vacios" + +#: app/gui-subs.c:374 +msgid "Question" +msgstr "Pregunta" + +#: app/gui-subs.c:391 app/sample-editor.c:1172 +msgid "Cancel" +msgstr "Cancelar" + +#: app/gui-subs.c:409 +msgid "Warning" +msgstr "Aviso" + +#: app/gui-subs.c:435 +msgid "Error!" +msgstr "¡Error!" + +#: 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 "" +"¿Seguro que quiere descartar el projecto actual?\n" +"¡Se perderan todos los cambios!" + +#: app/gui.c:221 +msgid "Are you sure you want to overwrite the file?" +msgstr "¿Seguro que quiere sobrescribir el fichero?" + +#: app/gui.c:1065 +msgid "Song length" +msgstr "Longitud de la cancion" + +#: app/gui.c:1066 +msgid "Current pos" +msgstr "Posicion actual" + +#: app/gui.c:1067 app/gui.c:1222 +msgid "Pattern" +msgstr "Patrón" + +#: app/gui.c:1068 +msgid "Restart pos" +msgstr "Poscion para recomenzar" + +#: app/gui.c:1136 +msgid "Load XM..." +msgstr "Abrir XM..." + +#: app/gui.c:1137 +msgid "Save XM..." +msgstr "Guardar XM..." + +#: app/gui.c:1175 +msgid "Play Song" +msgstr "Reproducir Cancion" + +#: app/gui.c:1181 +msgid "Play Pattern" +msgstr "Reproducir Patrón" + +#: app/gui.c:1187 +msgid "Stop" +msgstr "Parar" + +#: app/gui.c:1206 +msgid "Number of Channels:" +msgstr "Número de Canales:" + +#: app/gui.c:1238 +msgid "PatLength" +msgstr "Longitud del Patrón" + +#: app/gui.c:1330 +msgid "Octave" +msgstr "Octava" + +#: app/gui.c:1338 +msgid "Jump" +msgstr "Saltar" + +#: app/gui.c:1346 +msgid "Instr" +msgstr "Instrumento" + +#: app/gui.c:1361 +msgid "Sample" +msgstr "Muestra" + +#: app/instrument-editor.c:74 +msgid "VolFade" +msgstr "Apagado de volumen" + +#: app/instrument-editor.c:75 +msgid "VibSpeed" +msgstr "Velocidad del vibrato" + +#: app/instrument-editor.c:76 +msgid "VibDepth" +msgstr "Profundidad del vibrato" + +#: app/instrument-editor.c:77 +msgid "VibSweep" +msgstr "Barrido del vibrato" + +#: app/instrument-editor.c:153 +msgid "Can't open file." +msgstr "No se puede abrir el fichero" + +#: app/instrument-editor.c:172 +msgid "Saving Instruments not yet supported." +msgstr "Guardar Instrumentos no esta soportado todavía." + +#: app/instrument-editor.c:180 +msgid "Sine" +msgstr "Senosoidal" + +#: app/instrument-editor.c:180 +msgid "Square" +msgstr "Cuadrada" + +#: app/instrument-editor.c:180 +msgid "Saw Down" +msgstr "Sierra abajo" + +#: app/instrument-editor.c:180 +msgid "Saw Up" +msgstr "Sierra arriba" + +#: app/instrument-editor.c:184 +msgid "Instrument Editor" +msgstr "Editor de Instrumentos" + +#: app/instrument-editor.c:193 +msgid "Volume envelope" +msgstr "Envolvente de Volumen" + +#: app/instrument-editor.c:201 +msgid "Panning envelope" +msgstr "Envolvente de Balance" + +#: app/instrument-editor.c:218 +msgid "Load Instrument.." +msgstr "Abrir Instrumento.." + +#: app/instrument-editor.c:219 +msgid "Save Instrument.." +msgstr "Guardar Instrumento.." + +#: app/instrument-editor.c:221 +msgid "Load XI" +msgstr "Abrir XI" + +#: app/instrument-editor.c:227 +msgid "Save XI" +msgstr "Guardar XI" + +#: app/instrument-editor.c:247 +msgid "Vibrato Type:" +msgstr "Tipo de Vibrato" + +#: app/instrument-editor.c:319 +msgid "Note:" +msgstr "Nota:" + +#: app/instrument-editor.c:337 +msgid "Initialize" +msgstr "Inicialicar" + +#: app/keys.c:123 +msgid "The key that inserts the special keyoff note for FastTracker modules." +msgstr "La tecla que inserta la nota special 'keyoff' en modulos FastTracker." + +#: app/keys.c:135 +msgid "Upper Octave Keys.." +msgstr "Teclas de la Octava Superior.." + +#: 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 "" +"Estas son las teclas de la mitad superior del teclado. La nota c es normalmente " +"la tecla a la derecha de la tecla TAB. El resto de las notas deberían estar" +"ordenadas de la misma forma que en un piano, incluyendo la fila númerica." + +#: app/keys.c:142 +msgid "Lower Octave Keys.." +msgstr "Teclas de la Octava Inferior.." + +#: 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 "" +"Estas son las teclas de la mitad inferior del teclado. La nota c es normalmente " +"la tecla a la derecha de la tecla TAB. El resto de las notas deberían estar" +"ordenadas de la misma forma que en un piano, incluyendo la fila númerica." + +#: app/keys.c:149 +msgid "Other Keys.." +msgstr "Otras Teclas.." + +#: app/keys.c:150 +msgid "Various other keys" +msgstr "Varias teclas adicionales" + +#: app/keys.c:433 +msgid "Function" +msgstr "Función" + +#: app/keys.c:434 +msgid "Assignment" +msgstr "Asignación" + +#: app/keys.c:443 app/keys.c:446 +msgid "Keyboard Configuration" +msgstr "Configuración del Teclado" + +#: app/keys.c:491 +msgid "Key Group Explanation" +msgstr "Información sobre el Grupo de Teclas" + +#: app/keys.c:508 +msgid "Key Explanation" +msgstr "Información sobre la tecla" + +#: app/keys.c:539 +msgid "Modifiers:" +msgstr "Modificadores" + +#: app/keys.c:565 +msgid "Learn selected key" +msgstr "Aprender la tecla seleccionada" + +#: 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 "" + +#: app/keys.c:635 +msgid "" +"The keyboard configuration file is defective.\n" +"Please use the Keyboard Configuration dialog." +msgstr "" + +#: app/keys.c:845 +msgid "" +"Automatic key configuration unsuccessful.\n" +"Please use the Keyboard Configuration dialog\n" +"in the Settings menu." +msgstr "" + +#: app/menubar.c:98 +msgid "Ok" +msgstr "" + +#: app/menubar.c:134 +msgid "" +"Are you sure you want to do this?\n" +"All changes will be lost!" +msgstr "" + +#: app/menubar.c:156 +msgid "" +"Are you sure you want to quit?\n" +"All changes will be lost!" +msgstr "" + +#: app/menubar.c:225 +msgid "_Open.." +msgstr "" + +#: app/menubar.c:227 +msgid "Save _as.." +msgstr "" + +#: app/menubar.c:232 +msgid "_Quit" +msgstr "" + +#: app/menubar.c:239 +msgid "Clear _All" +msgstr "" + +#: app/menubar.c:241 +msgid "Clear _Patterns Only" +msgstr "" + +#: app/menubar.c:243 +msgid "_Optimize Module" +msgstr "" + +#: app/menubar.c:250 app/menubar.c:261 app/menubar.c:274 +msgid "C_ut" +msgstr "" + +#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:276 +msgid "_Copy" +msgstr "" + +#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:278 +msgid "_Paste" +msgstr "" + +#: app/menubar.c:272 +msgid "_Mark" +msgstr "" + +#: app/menubar.c:285 +msgid "_Jazz Edit Mode" +msgstr "" + +#: app/menubar.c:290 +msgid "_Transposition.." +msgstr "" + +#: app/menubar.c:295 app/menubar.c:373 +msgid "_Pattern" +msgstr "" + +#: app/menubar.c:296 +msgid "_Track" +msgstr "" + +#: app/menubar.c:297 +msgid "_Selection" +msgstr "" + +#: app/menubar.c:303 +msgid "_Find Unused Pattern" +msgstr "" + +#: app/menubar.c:305 +msgid "_Copy Current to Unused Pattern" +msgstr "" + +#: app/menubar.c:307 +msgid "C_lear Unused Patterns" +msgstr "" + +#: app/menubar.c:309 +msgid "_Pack Patterns" +msgstr "" + +#: app/menubar.c:316 +msgid "_Load XI.." +msgstr "" + +#: app/menubar.c:321 +msgid "_Delete Unused Instruments" +msgstr "" + +#: app/menubar.c:329 +msgid "Display _Oscilloscopes" +msgstr "" + +#: app/menubar.c:331 +msgid "Use _Backing Store" +msgstr "" + +#: app/menubar.c:336 +msgid "_Keyboard Configuration.." +msgstr "" + +#: app/menubar.c:338 +msgid "_Audio Configuration.." +msgstr "" + +#: app/menubar.c:340 +msgid "_Playback Effects.." +msgstr "" + +#: app/menubar.c:342 +msgid "_GUI Configuration.." +msgstr "" + +#: app/menubar.c:347 +msgid "_Save Settings now" +msgstr "" + +#: app/menubar.c:349 +msgid "Save Settings on _Exit" +msgstr "" + +#: app/menubar.c:356 +msgid "_About.." +msgstr "" + +#: app/menubar.c:361 +msgid "Show _Tips.." +msgstr "" + +#: app/menubar.c:363 +msgid "_XM Effects.." +msgstr "" + +#: app/menubar.c:370 +msgid "_File" +msgstr "" + +#: app/menubar.c:371 +msgid "_Module" +msgstr "" + +#: app/menubar.c:372 +msgid "_Edit" +msgstr "" + +#: app/menubar.c:374 +msgid "_Instrument" +msgstr "" + +#: app/menubar.c:375 +msgid "_Settings" +msgstr "" + +#: app/menubar.c:376 +msgid "_Help" +msgstr "" + +#: app/menubar.c:404 +msgid "/_File" +msgstr "" + +#: app/menubar.c:405 +msgid "/File/_Open.." +msgstr "" + +#: app/menubar.c:406 +msgid "/File/Save _as.." +msgstr "" + +#: app/menubar.c:407 +msgid "/File/-" +msgstr "" + +#: app/menubar.c:408 +msgid "/File/_Quit" +msgstr "" + +#: app/menubar.c:409 +msgid "/_Module" +msgstr "" + +#: app/menubar.c:410 +msgid "/Module/Clear _All" +msgstr "" + +#: app/menubar.c:411 +msgid "/Module/Clear _Patterns Only" +msgstr "" + +#: app/menubar.c:412 +msgid "/Module/_Optimize Module" +msgstr "" + +#: app/menubar.c:413 +msgid "/_Edit" +msgstr "" + +#: app/menubar.c:414 +msgid "/Edit/_Jazz Edit Mode" +msgstr "" + +#: app/menubar.c:415 app/menubar.c:417 +msgid "/Edit/-" +msgstr "" + +#: app/menubar.c:416 +msgid "/Edit/_Transposition.." +msgstr "" + +#: app/menubar.c:418 +msgid "/Edit/_Pattern" +msgstr "" + +#: app/menubar.c:419 +msgid "/Edit/Pattern/C_ut" +msgstr "" + +#: app/menubar.c:420 +msgid "/Edit/Pattern/_Copy" +msgstr "" + +#: app/menubar.c:421 +msgid "/Edit/Pattern/_Paste" +msgstr "" + +#: app/menubar.c:422 +msgid "/Edit/_Track" +msgstr "" + +#: app/menubar.c:423 +msgid "/Edit/Track/C_ut" +msgstr "" + +#: app/menubar.c:424 +msgid "/Edit/Track/_Copy" +msgstr "" + +#: app/menubar.c:425 +msgid "/Edit/Track/_Paste" +msgstr "" + +#: app/menubar.c:426 +msgid "/Edit/_Selection" +msgstr "" + +#: app/menubar.c:427 +msgid "/Edit/Selection/_Mark" +msgstr "" + +#: app/menubar.c:428 +msgid "/Edit/Selection/C_ut" +msgstr "" + +#: app/menubar.c:429 +msgid "/Edit/Selection/_Copy" +msgstr "" + +#: app/menubar.c:430 +msgid "/Edit/Selection/_Paste" +msgstr "" + +#: app/menubar.c:431 app/track-editor.c:72 +msgid "/_Pattern" +msgstr "" + +#: app/menubar.c:432 +msgid "/Pattern/_Find Unused Pattern" +msgstr "" + +#: app/menubar.c:433 +msgid "/Pattern/_Copy Current to Unused Pattern" +msgstr "" + +#: app/menubar.c:434 +msgid "/Pattern/C_lear Unused Patterns" +msgstr "" + +#: app/menubar.c:435 +msgid "/Pattern/_Pack Patterns" +msgstr "" + +#: app/menubar.c:436 +msgid "/_Instrument" +msgstr "" + +#: app/menubar.c:437 +msgid "/Instrument/_Load XI.." +msgstr "" + +#: app/menubar.c:438 +msgid "/Instrument/-" +msgstr "" + +#: app/menubar.c:439 +msgid "/Instrument/_Delete Unused Instruments" +msgstr "" + +#: app/menubar.c:440 +msgid "/_Settings" +msgstr "" + +#: app/menubar.c:441 +msgid "/Settings/Display _Oscilloscopes" +msgstr "" + +#: app/menubar.c:442 +msgid "/Settings/Use _Backing Store" +msgstr "" + +#: app/menubar.c:443 app/menubar.c:448 +msgid "/Settings/-" +msgstr "" + +#: app/menubar.c:444 +msgid "/Settings/_Keyboard Configuration.." +msgstr "" + +#: app/menubar.c:445 +msgid "/Settings/_Audio Configuration.." +msgstr "" + +#: app/menubar.c:446 +msgid "/Settings/_Playback Effects.." +msgstr "" + +#: app/menubar.c:447 +msgid "/Settings/_GUI Configuration.." +msgstr "" + +#: app/menubar.c:449 +msgid "/Settings/_Save Settings now" +msgstr "" + +#: app/menubar.c:450 +msgid "/Settings/Save Settings on _Exit" +msgstr "" + +#: app/menubar.c:451 +msgid "/_Help" +msgstr "" + +#: app/menubar.c:452 +msgid "/Help/_About.." +msgstr "" + +#: app/menubar.c:453 +msgid "/Help/-" +msgstr "" + +#: app/menubar.c:454 +msgid "/Help/Show _Tips.." +msgstr "" + +#: app/menubar.c:455 +msgid "/Help/_XM Effects.." +msgstr "" + +#: app/menubar.c:469 +msgid "/Settings/Display Oscilloscopes" +msgstr "" + +#: app/menubar.c:471 +msgid "/Settings/Use Backing Store" +msgstr "" + +#: app/menubar.c:473 +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:167 +msgid "Amiga" +msgstr "" + +#: 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 "" + +#: app/preferences.c:58 +msgid "" +"A directory called '.soundtracker' has been created in your\n" +"home directory to store configuration files.\n" +msgstr "" + +#: app/sample-editor.c:166 +msgid "No loop" +msgstr "" + +#: app/sample-editor.c:168 +msgid "PingPong" +msgstr "" + +#: app/sample-editor.c:172 +msgid "8 bits" +msgstr "" + +#: app/sample-editor.c:173 +msgid "16 bits" +msgstr "" + +#: app/sample-editor.c:179 +msgid "Sample Editor" +msgstr "" + +#: app/sample-editor.c:219 +msgid "Volume" +msgstr "" + +#: app/sample-editor.c:220 +msgid "Panning" +msgstr "" + +#: app/sample-editor.c:221 +msgid "Finetune" +msgstr "" + +#: app/sample-editor.c:232 +msgid "SelStart" +msgstr "" + +#: app/sample-editor.c:233 +msgid "SelEnd" +msgstr "" + +#: app/sample-editor.c:236 +msgid "Reset Sel" +msgstr "" + +#: app/sample-editor.c:241 +msgid "RelNote" +msgstr "" + +#: app/sample-editor.c:242 +msgid "Length: 0" +msgstr "" + +#: app/sample-editor.c:255 +msgid "Load Sample.." +msgstr "" + +#: app/sample-editor.c:256 +msgid "Save WAV.." +msgstr "" + +#: app/sample-editor.c:259 +msgid "Load Sample" +msgstr "" + +#: app/sample-editor.c:268 +msgid "Save WAV" +msgstr "" + +#: app/sample-editor.c:278 +msgid "Clear" +msgstr "" + +#: app/sample-editor.c:284 +msgid "Monitor" +msgstr "" + +#: app/sample-editor.c:290 +msgid "Volume Ramp" +msgstr "" + +#: app/sample-editor.c:300 +msgid "Zoom to selection" +msgstr "" + +#: app/sample-editor.c:306 +msgid "Show all" +msgstr "" + +#: app/sample-editor.c:312 +msgid "Zoom in (+50%)" +msgstr "" + +#: app/sample-editor.c:318 +msgid "Zoom out (-50%)" +msgstr "" + +#: app/sample-editor.c:324 +msgid "Resample" +msgstr "" + +#: app/sample-editor.c:335 +msgid "Cut" +msgstr "" + +#: app/sample-editor.c:341 +msgid "Remove" +msgstr "" + +#: app/sample-editor.c:347 +msgid "Copy" +msgstr "" + +#: app/sample-editor.c:353 +msgid "Paste" +msgstr "" + +#: app/sample-editor.c:359 +msgid "Filter" +msgstr "" + +#: app/sample-editor.c:459 +#, c-format +msgid "Length: %d" +msgstr "" + +#: app/sample-editor.c:865 +msgid "No memory for copybuffer.\n" +msgstr "" + +#: app/sample-editor.c:957 +msgid "" +msgstr "" + +#: app/sample-editor.c:1034 +msgid "Can't read sample" +msgstr "" + +#: app/sample-editor.c:1040 +msgid "Sample is too long for current mixer module. Loading anyway." +msgstr "" + +#: app/sample-editor.c:1054 +msgid "Can only handle mono 8 and 16 bit samples" +msgstr "" + +#: app/sample-editor.c:1060 +msgid "Out of memory for sample data." +msgstr "" + +#: app/sample-editor.c:1065 +msgid "Read error." +msgstr "" + +#: app/sample-editor.c:1120 +msgid "Can't open file for writing." +msgstr "" + +#: app/sample-editor.c:1157 +msgid "OK" +msgstr "" + +#: app/sample-editor.c:1165 +msgid "Start sampling" +msgstr "" + +#: app/sample-editor.c:1200 app/sample-editor.c:1203 +msgid "Sampling Window" +msgstr "" + +#: app/sample-editor.c:1252 +msgid "out of memory while sampling..." +msgstr "" + +#: app/sample-editor.c:1303 +msgid "" +msgstr "" + +#: app/sample-editor.c:1333 +msgid "Recorded sample is too long for current mixer module. Using it anyway." +msgstr "" + +#: app/sample-editor.c:1365 +msgid "Normalize" +msgstr "" + +#: app/sample-editor.c:1366 +msgid "Execute" +msgstr "" + +#: app/sample-editor.c:1367 app/tips-dialog.c:165 +msgid "Close" +msgstr "" + +#: app/sample-editor.c:1376 app/sample-editor.c:1379 +msgid "Volume Ramping" +msgstr "" + +#: app/sample-editor.c:1396 +msgid "Perform linear volume fade on Selection" +msgstr "" + +#: app/sample-editor.c:1408 +msgid "Left [%]:" +msgstr "" + +#: app/sample-editor.c:1413 +msgid "Right [%]:" +msgstr "" + +#: app/tips-dialog.c:87 +msgid "SoundTracker Tip of the day" +msgstr "" + +#: app/tips-dialog.c:149 +msgid "Previous Tip" +msgstr "" + +#: app/tips-dialog.c:157 +msgid "Next Tip" +msgstr "" + +#: app/tips-dialog.c:177 +msgid "Show tip next time" +msgstr "" + +#: app/tips-dialog.c:251 +msgid "" +"Welcome to SoundTracker!\n" +"\n" +"If you are new to this type of program, you will want to get hold of\n" +"some XM or MOD files first and play with them." +msgstr "" + +#: app/tips-dialog.c:256 +msgid "" +"You can make SoundTracker's edit mode more responsive to keyboard\n" +"input by decreasing the mixing buffer size of the \"Editing\" object in\n" +"the Audio Configuration." +msgstr "" + +#: app/tips-dialog.c:260 +msgid "" +"You can adjust the loop points in the sample editor by holding Shift\n" +"and using the left and right mousebuttons.\n" +msgstr "" + +#: app/tips-dialog.c:263 +msgid "" +"If you want to know more about tracking, and how the various commands\n" +"work, have a look at http://www.united-trackers.org/" +msgstr "" + +#: app/tips-dialog.c:266 +msgid "" +"You can assign samples of an instrument to the individual keys by\n" +"activating its sample and then clicking on the keyboard in the\n" +"instrument editor page." +msgstr "" + +#: app/track-editor.c:73 +msgid "/Pattern/_Cut" +msgstr "" + +#: app/track-editor.c:74 +msgid "/Pattern/_Copy" +msgstr "" + +#: app/track-editor.c:75 +msgid "/Pattern/_Paste" +msgstr "" + +#: app/track-editor.c:139 +msgid "Jazz Edit:" +msgstr "" + +#: app/transposition.c:165 +msgid "Whole Song" +msgstr "" + +#: app/transposition.c:166 +msgid "All Patterns" +msgstr "" + +#: app/transposition.c:167 +msgid "Current Pattern" +msgstr "" + +#: app/transposition.c:168 +msgid "Current Track" +msgstr "" + +#: app/transposition.c:172 +msgid "Current Instrument" +msgstr "" + +#: app/transposition.c:173 +msgid "All Instruments" +msgstr "" + +#: app/transposition.c:177 +msgid "Half note up" +msgstr "" + +#: app/transposition.c:178 +msgid "Half note down" +msgstr "" + +#: app/transposition.c:179 +msgid "Octave up" +msgstr "" + +#: app/transposition.c:180 +msgid "Octave down" +msgstr "" + +#: app/transposition.c:183 +msgid "Exchange 1 <-> 2" +msgstr "" + +#: app/transposition.c:184 +msgid "Change 1 -> 2" +msgstr "" + +#: app/transposition.c:193 app/transposition.c:196 +msgid "Transposition Tools" +msgstr "" + +#: app/transposition.c:216 +msgid "Scope of the operation:" +msgstr "" + +#: app/transposition.c:223 +msgid "Note Transposition" +msgstr "" + +#: app/transposition.c:253 +msgid "Instrument Changing" +msgstr "" + +#: app/transposition.c:268 +msgid "Instrument 1:" +msgstr "" + +#: app/transposition.c:270 app/transposition.c:280 +msgid "Current instrument" +msgstr "" + +#: app/transposition.c:278 +msgid "Instrument 2:" +msgstr "" + +#: app/xm.c:161 +#, c-format +msgid "Pattern length out of range: %d.\n" +msgstr "" + +#: app/xm.c:441 app/xm.c:510 +#, c-format +msgid "Invalid vibtype %d, using Sine.\n" +msgstr "" + +#: app/xm.c:472 +msgid "File is no XI instrument." +msgstr "" + +#: app/xm.c:482 +#, c-format +msgid "Unknown XI version 0x%x\n" +msgstr "" + +#: app/xm.c:702 +msgid "No FastTracker XM and no supported MOD format!" +msgstr "" + +#: 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 "" + +#: 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 "" Binary files soundtracker-0.3.4/po/it.gmo and soundtracker-0.3.5/po/it.gmo differ diff -urN soundtracker-0.3.4/po/it.po soundtracker-0.3.5/po/it.po --- soundtracker-0.3.4/po/it.po Mon Sep 6 15:03:01 1999 +++ soundtracker-0.3.5/po/it.po Wed Oct 6 11:49:06 1999 @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: soundtracker-0.3.0\n" -"POT-Creation-Date: 1999-09-04 23:08+0200\n" -"PO-Revision-Date: 1999-09-04 16:19+01:00\n" +"Project-Id-Version: soundtracker-0.3.4\n" +"POT-Creation-Date: 1999-09-25 17:25+0200\n" +"PO-Revision-Date: 1999-09-25 19:19+01:00\n" "Last-Translator: Yuri Bongiorno \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" @@ -26,87 +26,85 @@ msgid "Sampling" msgstr "Campionamento" -#: app/audioconfig.c:168 +#: app/audioconfig.c:179 msgid "Driver Module" msgstr "Modulo del Driver" -#: app/audioconfig.c:176 app/audioconfig.c:179 +#: app/audioconfig.c:187 app/audioconfig.c:190 msgid "Audio Configuration" msgstr "Configurazione dell'Audio" -#: app/drivers/alsa-input.c:124 app/drivers/alsa-output.c:141 +#: app/drivers/alsa-input.c:125 app/drivers/alsa-output.c:135 +#, c-format +msgid "(%d bytes)" +msgstr "(%d byte)" + +#: app/drivers/alsa-input.c:128 app/drivers/alsa-output.c:138 #: app/drivers/oss-output.c:136 #, c-format msgid "Estimated audio delay: %f microseconds" msgstr "Ritardo stimato dell'audio: %f microsecondi" -#: app/drivers/alsa-input.c:158 app/drivers/alsa-output.c:175 -#: app/drivers/oss-output.c:170 -#, c-format -msgid "(%d samples)" -msgstr "(%d campioni)" - -#: app/drivers/alsa-input.c:192 app/drivers/alsa-output.c:204 +#: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:200 #: app/drivers/oss-output.c:185 msgid "These changes won't take effect until you restart playing." -msgstr "Questi cambiamenti avranno effetto al prossimo riavvio della canzone." +msgstr "Questi cambiamenti avranno effetto alla prossima riproduzione." -#: app/drivers/alsa-input.c:204 app/drivers/alsa-output.c:216 +#: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:212 #: app/drivers/oss-output.c:197 msgid "Resolution:" msgstr "Risoluzione:" -#: app/drivers/alsa-input.c:214 app/drivers/alsa-output.c:226 +#: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:222 #: app/drivers/oss-output.c:207 msgid "Channels:" msgstr "Canali:" -#: app/drivers/alsa-input.c:224 app/drivers/alsa-output.c:236 +#: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:232 #: app/drivers/oss-output.c:217 msgid "Frequency [Hz]:" msgstr "Frequenza [Hz]:" -#: app/drivers/alsa-input.c:234 app/drivers/alsa-output.c:246 +#: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:242 #: app/drivers/oss-output.c:227 msgid "Buffer Size:" msgstr "Dimensione del Buffer:" -#: app/drivers/alsa-input.c:267 app/drivers/alsa-output.c:279 +#: app/drivers/alsa-input.c:268 app/drivers/alsa-output.c:275 msgid "ALSA card number:" msgstr "Numero della scheda ALSA:" -#: app/drivers/alsa-input.c:282 app/drivers/alsa-output.c:294 +#: app/drivers/alsa-input.c:283 app/drivers/alsa-output.c:290 msgid "ALSA device number:" -msgstr "Numero del device ALSA:" +msgstr "Numero del dispositivo ALSA:" -#: app/drivers/alsa-input.c:373 -#, fuzzy, c-format +#: app/drivers/alsa-input.c:374 +#, c-format msgid "" "Couldn't open ALSA device for sound input (card:%d, device:%d):\n" "%s" msgstr "" -"Non posso aprire il device ALSA per l'entrata del suono " -"(scheda:%d, device:%d):\n" +"Impossibile aprire il dispositivo ALSA per l'ingresso del suono (scheda:%d, " +"dispositivo:%d):\n" "%s" -#: app/drivers/alsa-input.c:425 app/drivers/alsa-output.c:430 +#: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:427 #: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 msgid "Required sound output format not supported.\n" msgstr "Il formato sonoro d'uscita richiesto non è supportato.\n" -#: app/drivers/alsa-input.c:440 app/drivers/alsa-output.c:445 -#, fuzzy +#: app/drivers/alsa-input.c:439 app/drivers/alsa-output.c:442 msgid "Required sound output parameters not supported.\n" -msgstr "Il formato sonoro d'uscita richiesto non è supportato.\n" +msgstr "I parametri sonori d'uscita richiesti non sono supportati.\n" -#: app/drivers/alsa-output.c:382 -#, fuzzy, c-format +#: app/drivers/alsa-output.c:378 +#, c-format msgid "" "Couldn't open ALSA device for sound output (card:%d, device:%d):\n" "%s" msgstr "" -"Non posso aprire il device ALSA per l'uscita del suono " -"(scheda:%d, device:%d):\n" +"Non posso aprire il dispositivo ALSA per l'uscita del suono (scheda:%d, " +"dispositivo:%d):\n" "%s" #: app/drivers/oss-input.c:90 @@ -119,16 +117,21 @@ "Couldn't open /dev/dsp for sampling:\n" "%s" msgstr "" -"Non posso aprire /dev/dsp per il campionamento:\n" +"Impossibile aprire /dev/dsp per il campionamento:\n" "%s" +#: app/drivers/oss-output.c:170 +#, c-format +msgid "(%d samples)" +msgstr "(%d campioni)" + #: app/drivers/oss-output.c:354 #, c-format msgid "" "Couldn't open /dev/dsp for sound output:\n" "%s" msgstr "" -"Non posso aprire /dev/dsp per l'uscita del suono:\n" +"Impossibile aprire /dev/dsp per l'uscita del suono:\n" "%s" #: app/effectsconfig.c:56 @@ -136,7 +139,6 @@ msgstr "Riverbero Principale" #: app/effectsconfig.c:153 app/effectsconfig.c:156 -#, fuzzy msgid "Playback Effects Configuration" msgstr "Configurazione degli effetti di Playback" @@ -156,11 +158,11 @@ msgid "Value" msgstr "Valore" -#: app/envelope-box.c:749 app/gui.c:1080 +#: app/envelope-box.c:749 app/gui.c:1074 msgid "Insert" msgstr "Inserisce" -#: app/envelope-box.c:755 app/gui.c:1087 +#: app/envelope-box.c:755 app/gui.c:1081 msgid "Delete" msgstr "Cancella" @@ -188,7 +190,7 @@ #: app/envelope-box.c:868 msgid "Loop" -msgstr "Ciclico" +msgstr "Ciclo" #: app/envelope-box.c:876 app/sample-editor.c:207 msgid "Start" @@ -198,39 +200,43 @@ msgid "End" msgstr "Fine" -#: app/gui-settings.c:66 +#: app/gui-settings.c:69 msgid "Scopes Frequency" msgstr "Frequenza degli Oscilloscopi" -#: app/gui-settings.c:69 +#: app/gui-settings.c:72 msgid "Tracker Frequency" msgstr "Frequenza del Tracker" -#: app/gui-settings.c:134 app/gui-settings.c:137 +#: app/gui-settings.c:155 app/gui-settings.c:158 msgid "GUI Configuration" -msgstr "Configurazione del GUI" +msgstr "Configurazione della GUI" -#: app/gui-settings.c:162 +#: app/gui-settings.c:183 msgid "Use Hexadecimal Numbers" msgstr "Usa Numeri Esadecimali" -#: app/gui-settings.c:169 +#: app/gui-settings.c:190 msgid "Advance Cursor in FX Columns" msgstr "Fa avanzare il Cursore nelle Colonne FX" -#: app/gui-settings.c:176 +#: app/gui-settings.c:197 msgid "Use anti-aliased envelope editor" -msgstr "" +msgstr "Usa l'editor di inviluppo anti-aliased" -#: app/gui-settings.c:182 +#: app/gui-settings.c:203 msgid "You need to restart SoundTracker for this change to come into effect." -msgstr "Devi riavviare SoundTracker affinch` questo cambiamento abbia effetto." +msgstr "Devi riavviare SoundTracker affinchè questo cambiamento abbia effetto." -#: app/gui-settings.c:191 +#: app/gui-settings.c:212 msgid "Scopes buffer size [MB]" msgstr "Dimensione del buffer degli oscilloscopi [MB]" -#: app/gui-settings.c:206 +#: app/gui-settings.c:231 +msgid "Highlight rows:" +msgstr "Righe evidenziate:" + +#: app/gui-settings.c:249 msgid "`Save XM' saves all non-empty patterns" msgstr "`Salva XM' salva tutti i pattern non vuoti" @@ -260,69 +266,69 @@ "All changes will be lost!" msgstr "" "Sei sicuro di volerti liberare dell'attuale progetto?\n" -"Tutti i cambiamenti saranno persi!" +"Tutti i cambiamenti andranno persi!" #: app/gui.c:221 msgid "Are you sure you want to overwrite the file?" msgstr "Sei sicuro di voler sovrascrivere il file?" -#: app/gui.c:1071 +#: app/gui.c:1065 msgid "Song length" -msgstr "Lunghezza della canzone" +msgstr "Lunghezza del brano" -#: app/gui.c:1072 +#: app/gui.c:1066 msgid "Current pos" msgstr "Posizione attuale" -#: app/gui.c:1073 app/gui.c:1228 +#: app/gui.c:1067 app/gui.c:1222 msgid "Pattern" msgstr "Pattern" -#: app/gui.c:1074 +#: app/gui.c:1068 msgid "Restart pos" msgstr "Ricomincia dalla posizione" -#: app/gui.c:1142 +#: app/gui.c:1136 msgid "Load XM..." msgstr "Carica XM..." -#: app/gui.c:1143 +#: app/gui.c:1137 msgid "Save XM..." msgstr "Salva XM..." -#: app/gui.c:1181 +#: app/gui.c:1175 msgid "Play Song" -msgstr "Suona la Canzone" +msgstr "Suona il brano" -#: app/gui.c:1187 +#: app/gui.c:1181 msgid "Play Pattern" msgstr "Suona il Pattern" -#: app/gui.c:1193 +#: app/gui.c:1187 msgid "Stop" msgstr "Stop" -#: app/gui.c:1212 +#: app/gui.c:1206 msgid "Number of Channels:" msgstr "Numero di Canali:" -#: app/gui.c:1244 +#: app/gui.c:1238 msgid "PatLength" msgstr "Lunghezza del Pattern" -#: app/gui.c:1336 +#: app/gui.c:1330 msgid "Octave" msgstr "Ottava" -#: app/gui.c:1344 +#: app/gui.c:1338 msgid "Jump" msgstr "Passo" -#: app/gui.c:1352 +#: app/gui.c:1346 msgid "Instr" msgstr "Strumento" -#: app/gui.c:1367 +#: app/gui.c:1361 msgid "Sample" msgstr "Campione" @@ -344,7 +350,7 @@ #: app/instrument-editor.c:153 msgid "Can't open file." -msgstr "Non posso aprire il file." +msgstr "Impossibile aprire il file." #: app/instrument-editor.c:172 msgid "Saving Instruments not yet supported." @@ -352,19 +358,19 @@ #: app/instrument-editor.c:180 msgid "Sine" -msgstr "Seno" +msgstr "Sinusoidale" #: app/instrument-editor.c:180 msgid "Square" -msgstr "Quadrato" +msgstr "Quadro" #: app/instrument-editor.c:180 msgid "Saw Down" -msgstr "Sega Giù" +msgstr "Sega giù" #: app/instrument-editor.c:180 msgid "Saw Up" -msgstr "Sega Su" +msgstr "Sega su" #: app/instrument-editor.c:184 msgid "Instrument Editor" @@ -380,11 +386,11 @@ #: app/instrument-editor.c:218 msgid "Load Instrument.." -msgstr "Carica lo Strumento.." +msgstr "Carica lo strumento.." #: app/instrument-editor.c:219 msgid "Save Instrument.." -msgstr "Salva lo Strumento.." +msgstr "Salva lo strumento.." #: app/instrument-editor.c:221 msgid "Load XI" @@ -396,7 +402,7 @@ #: app/instrument-editor.c:247 msgid "Vibrato Type:" -msgstr "Tipo di Vibrato:" +msgstr "Tipo di vibrato:" #: app/instrument-editor.c:319 msgid "Note:" @@ -409,6 +415,7 @@ #: app/keys.c:123 msgid "The key that inserts the special keyoff note for FastTracker modules." msgstr "" +"Il tasto che inserisce il rilascio della nota per i moduli di FastTracker." #: app/keys.c:135 msgid "Upper Octave Keys.." @@ -420,10 +427,10 @@ "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 "" -"Questi sono i tasti della parte superiore della tastiera. Il DO è " +"Questi sono i tasti della parte superiore della tastiera. Il DO ( C ) è " "normalmente il tasto alla destra del TAB. Il resto dei tasti dovrebbe essere " -"ordinato come la tastiera del pianoforte, includendo la fila sopra dei " -"numeri." +"ordinato come la tastiera del pianoforte, compresa la riga coi numeri, " +"quella sopra." #: app/keys.c:142 msgid "Lower Octave Keys.." @@ -435,10 +442,10 @@ "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 "" -"Questi sono i tasti della parte inferiore della tastiera. Il DO è " +"Questi sono i tasti della parte inferiore della tastiera. Il DO ( C ) è " "normalmente il primo tasto alla destra dello Shift sinistro. Il resto dei " -"tasti dovrebbe essere ordinato come la tastiera del pianoforte, includendo " -"la fila sopra." +"tasti dovrebbe essere ordinato come la tastiera del pianoforte, compresa la " +"riga sopra." #: app/keys.c:149 msgid "Other Keys.." @@ -448,11 +455,11 @@ msgid "Various other keys" msgstr "Altri tasti vari" -#: app/keys.c:434 +#: app/keys.c:433 msgid "Function" msgstr "Funzione" -#: app/keys.c:435 +#: app/keys.c:434 msgid "Assignment" msgstr "Assegnazione" @@ -493,8 +500,8 @@ "The keyboard configuration file is defective.\n" "Please use the Keyboard Configuration dialog." msgstr "" -"Il file della configurazione della tastiera è difettoso.\n" -"Per favore usa il menu Configurazione della Tastiera." +"Il file di configurazione della tastiera è difettoso.\n" +"Per favore usa la finestra di dialogo Configurazione della Tastiera." #: app/keys.c:845 msgid "" @@ -502,7 +509,7 @@ "Please use the Keyboard Configuration dialog\n" "in the Settings menu." msgstr "" -"Configurazione automatica del tasto mal riuscita.\n" +"Configurazione automatica del tasto fallita.\n" "Per favore usa Configurazione della Tastiera\n" "nel menu Impostazioni." @@ -516,7 +523,7 @@ "All changes will be lost!" msgstr "" "Sei sicuro di volerlo fare?\n" -"Tutti i cambiamenti saranno persi!" +"Tutti i cambiamenti andranno persi!" #: app/menubar.c:156 msgid "" @@ -524,345 +531,369 @@ "All changes will be lost!" msgstr "" "Sei sicuro di voler abbandonare?\n" -"Tutti i cambiamenti saranno persi!" +"Tutti i cambiamenti andranno persi!" -#: app/menubar.c:203 -#, fuzzy +#: app/menubar.c:225 msgid "_Open.." msgstr "_Apri.." -#: app/menubar.c:205 -#, fuzzy +#: app/menubar.c:227 msgid "Save _as.." msgstr "Salva _come.." -#: app/menubar.c:210 -#, fuzzy +#: app/menubar.c:232 msgid "_Quit" -msgstr "_Abbandona" +msgstr "_Esci" -#: app/menubar.c:217 -#, fuzzy +#: app/menubar.c:239 msgid "Clear _All" msgstr "Cancella _Tutto" -#: app/menubar.c:219 -#, fuzzy +#: app/menubar.c:241 msgid "Clear _Patterns Only" -msgstr "Cancella Solamente i _Pattern" +msgstr "Cancella solamente i _Pattern" -#: app/menubar.c:221 -#, fuzzy +#: app/menubar.c:243 msgid "_Optimize Module" msgstr "_Ottimizza il Modulo" -#: app/menubar.c:228 +#: app/menubar.c:250 app/menubar.c:261 app/menubar.c:274 +msgid "C_ut" +msgstr "_Taglia" + +#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:276 +msgid "_Copy" +msgstr "_Copia" + +#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:278 +msgid "_Paste" +msgstr "_Incolla" + +#: app/menubar.c:272 +msgid "_Mark" +msgstr "_Marca" + +#: app/menubar.c:285 msgid "_Jazz Edit Mode" -msgstr "Modo _Jazz Edit" +msgstr "Modalità _Jazz Edit" -#: app/menubar.c:233 +#: app/menubar.c:290 msgid "_Transposition.." -msgstr "_Trasporto di tono.." +msgstr "Tr_asposizione.." + +#: app/menubar.c:295 app/menubar.c:373 +msgid "_Pattern" +msgstr "_Pattern" + +#: app/menubar.c:296 +msgid "_Track" +msgstr "T_raccia" + +#: app/menubar.c:297 +msgid "_Selection" +msgstr "_Selezione" -#: app/menubar.c:240 -#, fuzzy +#: app/menubar.c:303 msgid "_Find Unused Pattern" msgstr "_Trova i Pattern non usati" -#: app/menubar.c:242 -#, fuzzy +#: app/menubar.c:305 msgid "_Copy Current to Unused Pattern" msgstr "_Copia l'attuale in un Pattern non usato" -#: app/menubar.c:244 -#, fuzzy +#: app/menubar.c:307 msgid "C_lear Unused Patterns" msgstr "Cance_lla i Pattern non usati" -#: app/menubar.c:246 -#, fuzzy +#: app/menubar.c:309 msgid "_Pack Patterns" -msgstr "_Raggruppa i Pattern" +msgstr "Com_primi i Pattern" -#: app/menubar.c:253 -#, fuzzy +#: app/menubar.c:316 msgid "_Load XI.." msgstr "_Carica XI.." -#: app/menubar.c:258 -#, fuzzy +#: app/menubar.c:321 msgid "_Delete Unused Instruments" msgstr "_Elimina gli Strumenti non usati" -#: app/menubar.c:266 -#, fuzzy +#: app/menubar.c:329 msgid "Display _Oscilloscopes" msgstr "Mostra gli _Oscilloscopi" -#: app/menubar.c:268 +#: app/menubar.c:331 msgid "Use _Backing Store" msgstr "Usa il _Backing Store" -#: app/menubar.c:273 -#, fuzzy +#: app/menubar.c:336 msgid "_Keyboard Configuration.." msgstr "_Configurazione della Tastiera.." -#: app/menubar.c:275 -#, fuzzy +#: app/menubar.c:338 msgid "_Audio Configuration.." msgstr "Configurazione dell'_Audio.." -#: app/menubar.c:277 +#: app/menubar.c:340 msgid "_Playback Effects.." msgstr "Effetti di _Playback" -#: app/menubar.c:279 -#, fuzzy +#: app/menubar.c:342 msgid "_GUI Configuration.." -msgstr "Configurazione del _GUI.." +msgstr "Configurazione della _GUI.." -#: app/menubar.c:284 -#, fuzzy +#: app/menubar.c:347 msgid "_Save Settings now" msgstr "_Salva le Impostazioni ora" -#: app/menubar.c:286 -#, fuzzy +#: app/menubar.c:349 msgid "Save Settings on _Exit" msgstr "Salva le Impostazioni all'_Uscita" -#: app/menubar.c:293 -#, fuzzy +#: app/menubar.c:356 msgid "_About.." msgstr "_Informazioni su.." -#: app/menubar.c:298 -#, fuzzy +#: app/menubar.c:361 msgid "Show _Tips.." msgstr "Mostra i suggerimen_ti.." -#: app/menubar.c:300 +#: app/menubar.c:363 msgid "_XM Effects.." msgstr "Effetti _XM.." -#: app/menubar.c:307 +#: app/menubar.c:370 msgid "_File" msgstr "_File" -#: app/menubar.c:308 +#: app/menubar.c:371 msgid "_Module" msgstr "_Modulo" -#: app/menubar.c:309 +#: app/menubar.c:372 msgid "_Edit" msgstr "_Edit" -#: app/menubar.c:310 -msgid "_Pattern" -msgstr "_Pattern" - -#: app/menubar.c:311 +#: app/menubar.c:374 msgid "_Instrument" msgstr "_Strumento" -#: app/menubar.c:312 +#: app/menubar.c:375 msgid "_Settings" msgstr "_Impostazioni" -#: app/menubar.c:313 +#: app/menubar.c:376 msgid "_Help" msgstr "_Aiuto" -#: app/menubar.c:341 -#, fuzzy +#: app/menubar.c:404 msgid "/_File" msgstr "/_File" -#: app/menubar.c:342 -#, fuzzy +#: app/menubar.c:405 msgid "/File/_Open.." msgstr "/File/_Apri.." -#: app/menubar.c:343 -#, fuzzy +#: app/menubar.c:406 msgid "/File/Save _as.." msgstr "/File/Salva _come.." -#: app/menubar.c:344 -#, fuzzy +#: app/menubar.c:407 msgid "/File/-" msgstr "/File/-" -#: app/menubar.c:345 +#: app/menubar.c:408 msgid "/File/_Quit" -msgstr "/File/_Abbandona" +msgstr "/File/_Esci" -#: app/menubar.c:346 -#, fuzzy +#: app/menubar.c:409 msgid "/_Module" msgstr "/_Modulo" -#: app/menubar.c:347 -#, fuzzy +#: app/menubar.c:410 msgid "/Module/Clear _All" msgstr "/Modulo/Cancella _Tutto" -#: app/menubar.c:348 -#, fuzzy +#: app/menubar.c:411 msgid "/Module/Clear _Patterns Only" msgstr "/Modulo/Cancella Solamente i _Pattern" -#: app/menubar.c:349 -#, fuzzy +#: app/menubar.c:412 msgid "/Module/_Optimize Module" msgstr "/Modulo/_Ottimizza il Modulo" -#: app/menubar.c:350 +#: app/menubar.c:413 msgid "/_Edit" msgstr "/_Edit" -#: app/menubar.c:351 +#: app/menubar.c:414 msgid "/Edit/_Jazz Edit Mode" -msgstr "/Edit/Modo _Jazz Edit" +msgstr "/Edit/Modalità _Jazz Edit" -#: app/menubar.c:352 +#: app/menubar.c:415 app/menubar.c:417 msgid "/Edit/-" msgstr "/Edit/-" -#: app/menubar.c:353 +#: app/menubar.c:416 msgid "/Edit/_Transposition.." -msgstr "/Edit/_Trasporto di tono.." +msgstr "/Edit/Tr_asposizione.." + +#: app/menubar.c:418 +msgid "/Edit/_Pattern" +msgstr "/Edit/_Pattern" + +#: app/menubar.c:419 +msgid "/Edit/Pattern/C_ut" +msgstr "/Edit/Pattern/_Taglia" + +#: app/menubar.c:420 +msgid "/Edit/Pattern/_Copy" +msgstr "/Edit/Pattern/_Copia" -#: app/menubar.c:354 -#, fuzzy +#: app/menubar.c:421 +msgid "/Edit/Pattern/_Paste" +msgstr "/Edit/Pattern/_Incolla" + +#: app/menubar.c:422 +msgid "/Edit/_Track" +msgstr "/Edit/T_raccia" + +#: app/menubar.c:423 +msgid "/Edit/Track/C_ut" +msgstr "/Edit/Traccia/_Taglia" + +#: app/menubar.c:424 +msgid "/Edit/Track/_Copy" +msgstr "/Edit/Traccia/_Copia" + +#: app/menubar.c:425 +msgid "/Edit/Track/_Paste" +msgstr "/Edit/Traccia/_Incolla" + +#: app/menubar.c:426 +msgid "/Edit/_Selection" +msgstr "/Edit/_Selezione" + +#: app/menubar.c:427 +msgid "/Edit/Selection/_Mark" +msgstr "/Edit/Selezione/_Marca" + +#: app/menubar.c:428 +msgid "/Edit/Selection/C_ut" +msgstr "/Edit/Selezione/_Taglia" + +#: app/menubar.c:429 +msgid "/Edit/Selection/_Copy" +msgstr "/Edit/Selezione/_Copia" + +#: app/menubar.c:430 +msgid "/Edit/Selection/_Paste" +msgstr "/Edit/Selezione/_Incolla" + +#: app/menubar.c:431 app/track-editor.c:72 msgid "/_Pattern" msgstr "/_Pattern" -#: app/menubar.c:355 -#, fuzzy +#: app/menubar.c:432 msgid "/Pattern/_Find Unused Pattern" msgstr "/Pattern/_Trova i Pattern non usati" -#: app/menubar.c:356 -#, fuzzy +#: app/menubar.c:433 msgid "/Pattern/_Copy Current to Unused Pattern" msgstr "/Pattern/_Copia l'attuale in un Pattern non usato" -#: app/menubar.c:357 -#, fuzzy +#: app/menubar.c:434 msgid "/Pattern/C_lear Unused Patterns" msgstr "/Pattern/Cance_lla i Pattern non usati" -#: app/menubar.c:358 -#, fuzzy +#: app/menubar.c:435 msgid "/Pattern/_Pack Patterns" -msgstr "/Pattern/_Raggruppa i Pattern" +msgstr "/Pattern/Com_primi i Pattern" -#: app/menubar.c:359 -#, fuzzy +#: app/menubar.c:436 msgid "/_Instrument" msgstr "/_Strumento" -#: app/menubar.c:360 -#, fuzzy +#: app/menubar.c:437 msgid "/Instrument/_Load XI.." msgstr "/Strumento/_Carica XI.." -#: app/menubar.c:361 -#, fuzzy +#: app/menubar.c:438 msgid "/Instrument/-" msgstr "/Strumento/-" -#: app/menubar.c:362 -#, fuzzy +#: app/menubar.c:439 msgid "/Instrument/_Delete Unused Instruments" msgstr "/Strumento/_Elimina gli Strumenti non usati" -#: app/menubar.c:363 -#, fuzzy +#: app/menubar.c:440 msgid "/_Settings" msgstr "/_Impostazioni" -#: app/menubar.c:364 -#, fuzzy +#: app/menubar.c:441 msgid "/Settings/Display _Oscilloscopes" msgstr "/Impostazioni/Mostra gli _Oscilloscopi" -#: app/menubar.c:365 +#: app/menubar.c:442 msgid "/Settings/Use _Backing Store" msgstr "/Impostazioni/Usa il _Backing Store" -#: app/menubar.c:366 app/menubar.c:371 -#, fuzzy +#: app/menubar.c:443 app/menubar.c:448 msgid "/Settings/-" msgstr "/Impostazioni/-" -#: app/menubar.c:367 -#, fuzzy +#: app/menubar.c:444 msgid "/Settings/_Keyboard Configuration.." msgstr "/Impostazioni/_Configurazione della Tastiera.." -#: app/menubar.c:368 -#, fuzzy +#: app/menubar.c:445 msgid "/Settings/_Audio Configuration.." msgstr "/Impostazioni/Configurazione dell'_Audio.." -#: app/menubar.c:369 +#: app/menubar.c:446 msgid "/Settings/_Playback Effects.." msgstr "/Impostazioni/Effetti di _Playback" -#: app/menubar.c:370 -#, fuzzy +#: app/menubar.c:447 msgid "/Settings/_GUI Configuration.." -msgstr "Impostazioni/Configurazione del _GUI.." +msgstr "Impostazioni/Configurazione della _GUI.." -#: app/menubar.c:372 -#, fuzzy +#: app/menubar.c:449 msgid "/Settings/_Save Settings now" msgstr "/Impostazioni/_Salva le Impostazioni ora" -#: app/menubar.c:373 -#, fuzzy +#: app/menubar.c:450 msgid "/Settings/Save Settings on _Exit" msgstr "/Impostazioni/Salva le Impostazioni all'_Uscita" -#: app/menubar.c:374 -#, fuzzy +#: app/menubar.c:451 msgid "/_Help" msgstr "/_Aiuto" -#: app/menubar.c:375 -#, fuzzy +#: app/menubar.c:452 msgid "/Help/_About.." msgstr "/Aiuto/_Informazioni su.." -#: app/menubar.c:376 -#, fuzzy +#: app/menubar.c:453 msgid "/Help/-" msgstr "/Aiuto/-" -#: app/menubar.c:377 -#, fuzzy +#: app/menubar.c:454 msgid "/Help/Show _Tips.." msgstr "/Aiuto/Mostra i suggerimen_ti.." -#: app/menubar.c:378 -#, fuzzy +#: app/menubar.c:455 msgid "/Help/_XM Effects.." msgstr "/Aiuto/Effetti _XM.." -#: app/menubar.c:392 -#, fuzzy +#: app/menubar.c:469 msgid "/Settings/Display Oscilloscopes" msgstr "/Impostazioni/Mostra gli Oscilloscopi" -#: app/menubar.c:394 +#: app/menubar.c:471 msgid "/Settings/Use Backing Store" msgstr "/Impostazioni/Usa il Backing Store" -#: app/menubar.c:396 -#, fuzzy +#: app/menubar.c:473 msgid "/Settings/Save Settings on Exit" msgstr "/Impostazioni/Salva le Impostazioni all'Uscita" @@ -872,7 +903,7 @@ #: app/module-info.c:116 msgid "#smpl" -msgstr "#smpl" +msgstr "#campione" #: app/module-info.c:117 msgid "Sample Name" @@ -892,7 +923,7 @@ #: app/module-info.c:165 msgid "Songname:" -msgstr "Nome della Canzone:" +msgstr "Nome del brano:" #: app/module-info.c:180 msgid "Frequencies:" @@ -900,7 +931,7 @@ #: app/module-info.c:185 msgid "ProTracker Mode" -msgstr "Modo ProTracker" +msgstr "Modalità ProTracker" #: app/preferences.c:58 msgid "" @@ -912,7 +943,7 @@ #: app/sample-editor.c:166 msgid "No loop" -msgstr "Non ciclico" +msgstr "Nessun ciclo" #: app/sample-editor.c:168 msgid "PingPong" @@ -944,7 +975,7 @@ #: app/sample-editor.c:232 msgid "SelStart" -msgstr "Inizo Selezione" +msgstr "Inizio Selezione" #: app/sample-editor.c:233 msgid "SelEnd" @@ -955,9 +986,8 @@ msgstr "Reimposta la Selezione" #: app/sample-editor.c:241 -#, fuzzy msgid "RelNote" -msgstr "Nota d'effetto" +msgstr "Nota relativa" #: app/sample-editor.c:242 msgid "Length: 0" @@ -988,9 +1018,8 @@ msgstr "Monitor" #: app/sample-editor.c:290 -#, fuzzy msgid "Volume Ramp" -msgstr "Volume di Ramp" +msgstr "Rampa di Volume" #: app/sample-editor.c:300 msgid "Zoom to selection" @@ -1009,7 +1038,6 @@ msgstr "Zoom indietro (-50%)" #: app/sample-editor.c:324 -#, fuzzy msgid "Resample" msgstr "Ricampiona" @@ -1030,7 +1058,6 @@ msgstr "Incolla" #: app/sample-editor.c:359 -#, fuzzy msgid "Filter" msgstr "Filtro" @@ -1057,7 +1084,7 @@ #: app/sample-editor.c:1054 msgid "Can only handle mono 8 and 16 bit samples" -msgstr "Può solo trattare campioni mono da 8 e 16 bit" +msgstr "Può solo gestire campioni mono da 8 e 16 bit" #: app/sample-editor.c:1060 msgid "Out of memory for sample data." @@ -1102,20 +1129,19 @@ #: app/sample-editor.c:1366 msgid "Execute" -msgstr "Esegue" +msgstr "Esegui" #: app/sample-editor.c:1367 app/tips-dialog.c:165 msgid "Close" msgstr "Chiudi" #: app/sample-editor.c:1376 app/sample-editor.c:1379 -#, fuzzy msgid "Volume Ramping" -msgstr "Volume del Ramping" +msgstr "Rampa di Volume" #: app/sample-editor.c:1396 msgid "Perform linear volume fade on Selection" -msgstr "Esegue una dissolvenza lineare sulla Selezione" +msgstr "Esegue una dissolvenza lineare del volume sulla Selezione" #: app/sample-editor.c:1408 msgid "Left [%]:" @@ -1150,8 +1176,8 @@ msgstr "" "Benvenuto in SoundTracker!\n" "\n" -"Se sei nuovo a questo tipo di programma, prima deviprendere qualche\n" -"file XM o MOD e suonarli." +"Se non hai mai usato questo tipo di programma, prima faresti meglio a\n" +"prendere qualche file XM o MOD e giocarci un po'." #: app/tips-dialog.c:256 msgid "" @@ -1159,18 +1185,25 @@ "input by decreasing the mixing buffer size of the \"Editing\" object in\n" "the Audio Configuration." msgstr "" +"Puoi rendere l'edit di SoundTracker più sensibile all'input della\n" +"tastiera diminuendo la Dimensione del Buffer dell'oggetto\n" +"\"Editing\" nella Configurazione dell'Audio." #: app/tips-dialog.c:260 msgid "" "You can adjust the loop points in the sample editor by holding Shift\n" "and using the left and right mousebuttons.\n" msgstr "" +"Puoi regolare i punti del ciclo nell'Editor del Campione tenendo premuto \n" +"Shift e usando i tasti destro e sinistro del mouse.\n" #: app/tips-dialog.c:263 msgid "" "If you want to know more about tracking, and how the various commands\n" "work, have a look at http://www.united-trackers.org/" msgstr "" +"Se vuoi saperne di più sul tracking e su come funzionano i vari comandi,\n" +"dai un'occhiata all'url http://www.united-trackers.org/" #: app/tips-dialog.c:266 msgid "" @@ -1178,38 +1211,47 @@ "activating its sample and then clicking on the keyboard in the\n" "instrument editor page." msgstr "" +"Puoi assegnare i campioni di uno strumento ai singoli tasti attivando\n" +"il suo campione e poi cliccando sulla tastiera nella pagina dell'Editor\n" +"di strumento." + +#: app/track-editor.c:73 +msgid "/Pattern/_Cut" +msgstr "/Pattern/_Taglia" + +#: app/track-editor.c:74 +msgid "/Pattern/_Copy" +msgstr "/Pattern/_Copia" + +#: app/track-editor.c:75 +msgid "/Pattern/_Paste" +msgstr "/Pattern/_Incolla" -#: app/track-editor.c:80 +#: app/track-editor.c:139 msgid "Jazz Edit:" msgstr "Jazz Edit:" #: app/transposition.c:165 -#, fuzzy msgid "Whole Song" -msgstr "L'intera Canzone" +msgstr "L'intero brano" #: app/transposition.c:166 -#, fuzzy msgid "All Patterns" msgstr "Tutti i Pattern" #: app/transposition.c:167 -#, fuzzy msgid "Current Pattern" msgstr "L'attuale Pattern" #: app/transposition.c:168 -#, fuzzy msgid "Current Track" msgstr "L'attuale Traccia" #: app/transposition.c:172 -#, fuzzy msgid "Current Instrument" msgstr "Lo Strumento attuale" #: app/transposition.c:173 -#, fuzzy msgid "All Instruments" msgstr "Tutti gli Strumenti" @@ -1219,17 +1261,15 @@ #: app/transposition.c:178 msgid "Half note down" -msgstr "Un semitono giu`" +msgstr "Un semitono giù" #: app/transposition.c:179 -#, fuzzy msgid "Octave up" -msgstr "Ottava su" +msgstr "Un'ottava su" #: app/transposition.c:180 -#, fuzzy msgid "Octave down" -msgstr "Ottava giu`" +msgstr "Un'ottava giù" #: app/transposition.c:183 msgid "Exchange 1 <-> 2" @@ -1240,43 +1280,37 @@ msgstr "Cambia 1 -> 2" #: app/transposition.c:193 app/transposition.c:196 -#, fuzzy msgid "Transposition Tools" -msgstr "Atrezzi per il Trasporto di tono.." +msgstr "Atrezzi per la Trasposizione.." #: app/transposition.c:216 msgid "Scope of the operation:" -msgstr "Scopo dell'operazione:" +msgstr "Zona d'influenza dell'operazione:" #: app/transposition.c:223 -#, fuzzy msgid "Note Transposition" -msgstr "Trasporto di tono della Nota" +msgstr "Trasposizione della Nota" #: app/transposition.c:253 -#, fuzzy msgid "Instrument Changing" -msgstr "Cambio dello Strumento" +msgstr "Cambiamento dello Strumento" #: app/transposition.c:268 -#, fuzzy msgid "Instrument 1:" msgstr "Strumento 1:" #: app/transposition.c:270 app/transposition.c:280 -#, fuzzy msgid "Current instrument" -msgstr "Attuale strumento" +msgstr "Strumento attuale" #: app/transposition.c:278 -#, fuzzy msgid "Instrument 2:" msgstr "Strumento 2:" #: app/xm.c:161 #, c-format msgid "Pattern length out of range: %d.\n" -msgstr "La lunghezza del pattern è fuori intervallo: %d.\n" +msgstr "La lunghezza del pattern è fuori dall'intervallo: %d.\n" #: app/xm.c:441 app/xm.c:510 #, c-format @@ -1321,4 +1355,4 @@ "Maximum sample length is %d." msgstr "" "Il modulo contiene campioni che sono troppo lunghi per l'attuale mixer.\n" -"La lunghezza massima del campione e` %d." +"La lunghezza massima del campione è %d." Binary files soundtracker-0.3.4/po/ja.gmo and soundtracker-0.3.5/po/ja.gmo differ diff -urN soundtracker-0.3.4/po/ja.po soundtracker-0.3.5/po/ja.po --- soundtracker-0.3.4/po/ja.po Thu Sep 23 20:37:27 1999 +++ soundtracker-0.3.5/po/ja.po Wed Oct 6 14:34:11 1999 @@ -1,4 +1,4 @@ -# ja.po(0.3.3-1) for SoundTracker +# ja.po(0.3.4-0) for SoundTracker # Copyright (C) 1998-1999 Michael Krause . # Atsushi Yamagata , 1999. # Yuuki NINOMIYA , 1999. @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: SoundTracker 0.3.3\n" -"POT-Creation-Date: 1999-09-10 13:32+0200\n" -"PO-Revision-Date: 1999-09-17 12:23+09:00\n" +"Project-Id-Version: SoundTracker 0.3.4\n" +"POT-Creation-Date: 1999-09-25 17:25+0200\n" +"PO-Revision-Date: 1999-09-27 10:06+09:00\n" "Last-Translator: Atsushi Yamagata \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" @@ -199,39 +199,43 @@ msgid "End" msgstr "½ªÎ»" -#: app/gui-settings.c:66 +#: app/gui-settings.c:69 msgid "Scopes Frequency" msgstr "¥¹¥³¡¼¥×¼þÇÈ¿ô" -#: app/gui-settings.c:69 +#: app/gui-settings.c:72 msgid "Tracker Frequency" msgstr "¥È¥é¥Ã¥«¡¼¼þÇÈ¿ô" -#: app/gui-settings.c:134 app/gui-settings.c:137 +#: app/gui-settings.c:155 app/gui-settings.c:158 msgid "GUI Configuration" msgstr "GUIÀßÄê" -#: app/gui-settings.c:162 +#: app/gui-settings.c:183 msgid "Use Hexadecimal Numbers" msgstr "16¿Ê¿ô¤ò»ÈÍÑ" -#: app/gui-settings.c:169 +#: app/gui-settings.c:190 msgid "Advance Cursor in FX Columns" msgstr "FX¥«¥é¥à¤Ç¤Î¥¢¥É¥Ð¥ó¥¹¡¦¥«¡¼¥½¥ë" -#: app/gui-settings.c:176 +#: app/gui-settings.c:197 msgid "Use anti-aliased envelope editor" msgstr "¥¢¥ó¥Á¡¦¥¨¥¤¥ê¥¢¥¹¡¦¥¨¥ó¥Ù¥í¡¼¥×¡¦¥¨¥Ç¥£¥¿»ÈÍÑ" -#: app/gui-settings.c:182 +#: app/gui-settings.c:203 msgid "You need to restart SoundTracker for this change to come into effect." msgstr "¤³¤ÎÊѹ¹¤òÈ¿±Ç¤¹¤ë¤Ë¤ÏSoundTracker¤òºÆµ¯Æ°¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£" -#: app/gui-settings.c:191 +#: app/gui-settings.c:212 msgid "Scopes buffer size [MB]" msgstr "¥¹¥³¡¼¥×¡¦¥Ð¥Ã¥Õ¥¡¡¦¥µ¥¤¥º [MB]" -#: app/gui-settings.c:206 +#: app/gui-settings.c:231 +msgid "Highlight rows:" +msgstr "¹Ô¤Î¶¯Ä´:" + +#: app/gui-settings.c:249 msgid "`Save XM' saves all non-empty patterns" msgstr "`ÊݸXM'¤ÇÁ´¤Æ¤Î¶õ¤Ç¤Ê¤¤¥Ñ¥¿¡¼¥ó¤òÊݸ" @@ -733,7 +737,7 @@ #: app/menubar.c:419 msgid "/Edit/Pattern/C_ut" -msgstr "/ÊÔ½¸/¥Ñ¥¿¡¼¥ó/ÀÚ¼è(_U)" +msgstr "/ÊÔ½¸/¥Ñ¥¿¡¼¥ó/ÀÚ¼è(_u)" #: app/menubar.c:420 msgid "/Edit/Pattern/_Copy" @@ -749,7 +753,7 @@ #: app/menubar.c:423 msgid "/Edit/Track/C_ut" -msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ÀÚ¼è(_U)" +msgstr "/ÊÔ½¸/¥È¥é¥Ã¥¯/ÀÚ¼è(_u)" #: app/menubar.c:424 msgid "/Edit/Track/_Copy" @@ -769,7 +773,7 @@ #: app/menubar.c:428 msgid "/Edit/Selection/C_ut" -msgstr "/ÊÔ½¸/ÁªÂò/ÀÚ¼è(_U)" +msgstr "/ÊÔ½¸/ÁªÂò/ÀÚ¼è(_u)" #: app/menubar.c:429 msgid "/Edit/Selection/_Copy" @@ -793,7 +797,7 @@ #: app/menubar.c:434 msgid "/Pattern/C_lear Unused Patterns" -msgstr "/¥Ñ¥¿¡¼¥ó/̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî(_L)" +msgstr "/¥Ñ¥¿¡¼¥ó/̤»ÈÍѥѥ¿¡¼¥ó¾Ãµî(_l)" #: app/menubar.c:435 msgid "/Pattern/_Pack Patterns" diff -urN soundtracker-0.3.4/po/soundtracker.pot soundtracker-0.3.5/po/soundtracker.pot --- soundtracker-0.3.4/po/soundtracker.pot Sat Sep 25 17:25:54 1999 +++ soundtracker-0.3.5/po/soundtracker.pot Fri Oct 8 16:31:24 1999 @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 1999-09-25 17:25+0200\n" +"POT-Creation-Date: 1999-10-08 16:31+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,11 +26,11 @@ msgid "Sampling" msgstr "" -#: app/audioconfig.c:179 +#: app/audioconfig.c:178 msgid "Driver Module" msgstr "" -#: app/audioconfig.c:187 app/audioconfig.c:190 +#: app/audioconfig.c:186 app/audioconfig.c:189 msgid "Audio Configuration" msgstr "" @@ -40,33 +40,33 @@ msgstr "" #: app/drivers/alsa-input.c:128 app/drivers/alsa-output.c:138 -#: app/drivers/oss-output.c:136 +#: app/drivers/oss-output.c:139 #, c-format msgid "Estimated audio delay: %f microseconds" msgstr "" #: app/drivers/alsa-input.c:193 app/drivers/alsa-output.c:200 -#: app/drivers/oss-output.c:185 +#: app/drivers/oss-output.c:188 msgid "These changes won't take effect until you restart playing." msgstr "" #: app/drivers/alsa-input.c:205 app/drivers/alsa-output.c:212 -#: app/drivers/oss-output.c:197 +#: app/drivers/oss-output.c:200 msgid "Resolution:" msgstr "" #: app/drivers/alsa-input.c:215 app/drivers/alsa-output.c:222 -#: app/drivers/oss-output.c:207 +#: app/drivers/oss-output.c:210 msgid "Channels:" msgstr "" #: app/drivers/alsa-input.c:225 app/drivers/alsa-output.c:232 -#: app/drivers/oss-output.c:217 +#: app/drivers/oss-output.c:220 msgid "Frequency [Hz]:" msgstr "" #: app/drivers/alsa-input.c:235 app/drivers/alsa-output.c:242 -#: app/drivers/oss-output.c:227 +#: app/drivers/oss-output.c:230 msgid "Buffer Size:" msgstr "" @@ -86,7 +86,7 @@ msgstr "" #: app/drivers/alsa-input.c:426 app/drivers/alsa-output.c:427 -#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:387 +#: app/drivers/oss-input.c:221 app/drivers/oss-output.c:390 msgid "Required sound output format not supported.\n" msgstr "" @@ -112,12 +112,12 @@ "%s" msgstr "" -#: app/drivers/oss-output.c:170 +#: app/drivers/oss-output.c:173 #, c-format msgid "(%d samples)" msgstr "" -#: app/drivers/oss-output.c:354 +#: app/drivers/oss-output.c:357 #, c-format msgid "" "Couldn't open /dev/dsp for sound output:\n" @@ -148,11 +148,11 @@ msgid "Value" msgstr "" -#: app/envelope-box.c:749 app/gui.c:1074 +#: app/envelope-box.c:749 app/gui.c:1078 msgid "Insert" msgstr "" -#: app/envelope-box.c:755 app/gui.c:1081 +#: app/envelope-box.c:755 app/gui.c:1085 msgid "Delete" msgstr "" @@ -185,213 +185,213 @@ msgid "End" msgstr "" -#: app/gui-settings.c:69 +#: app/gui-settings.c:75 msgid "Scopes Frequency" msgstr "" -#: app/gui-settings.c:72 +#: app/gui-settings.c:78 msgid "Tracker Frequency" msgstr "" -#: app/gui-settings.c:155 app/gui-settings.c:158 +#: app/gui-settings.c:161 app/gui-settings.c:164 msgid "GUI Configuration" msgstr "" -#: app/gui-settings.c:183 +#: app/gui-settings.c:189 msgid "Use Hexadecimal Numbers" msgstr "" -#: app/gui-settings.c:190 +#: app/gui-settings.c:196 msgid "Advance Cursor in FX Columns" msgstr "" -#: app/gui-settings.c:197 +#: app/gui-settings.c:203 msgid "Use anti-aliased envelope editor" msgstr "" -#: app/gui-settings.c:203 +#: app/gui-settings.c:209 msgid "You need to restart SoundTracker for this change to come into effect." msgstr "" -#: app/gui-settings.c:212 +#: app/gui-settings.c:218 msgid "Scopes buffer size [MB]" msgstr "" -#: app/gui-settings.c:231 +#: app/gui-settings.c:237 msgid "Highlight rows:" msgstr "" -#: app/gui-settings.c:249 +#: app/gui-settings.c:255 msgid "`Save XM' saves all non-empty patterns" msgstr "" -#: app/gui-subs.c:374 +#: app/gui-subs.c:386 msgid "Question" msgstr "" -#: app/gui-subs.c:391 app/sample-editor.c:1172 +#: app/gui-subs.c:403 app/sample-editor.c:1172 msgid "Cancel" msgstr "" -#: app/gui-subs.c:409 +#: app/gui-subs.c:421 msgid "Warning" msgstr "" -#: app/gui-subs.c:435 +#: app/gui-subs.c:447 msgid "Error!" msgstr "" -#: app/gui.c:81 +#: app/gui.c:82 msgid "Tempo" msgstr "" -#: app/gui.c:209 +#: app/gui.c:211 msgid "" "Are you sure you want to free the current project?\n" "All changes will be lost!" msgstr "" -#: app/gui.c:221 +#: app/gui.c:225 msgid "Are you sure you want to overwrite the file?" msgstr "" -#: app/gui.c:1065 +#: app/gui.c:1069 msgid "Song length" msgstr "" -#: app/gui.c:1066 +#: app/gui.c:1070 msgid "Current pos" msgstr "" -#: app/gui.c:1067 app/gui.c:1222 +#: app/gui.c:1071 app/gui.c:1228 msgid "Pattern" msgstr "" -#: app/gui.c:1068 +#: app/gui.c:1072 msgid "Restart pos" msgstr "" -#: app/gui.c:1136 +#: app/gui.c:1140 msgid "Load XM..." msgstr "" -#: app/gui.c:1137 +#: app/gui.c:1142 msgid "Save XM..." msgstr "" -#: app/gui.c:1175 +#: app/gui.c:1181 msgid "Play Song" msgstr "" -#: app/gui.c:1181 +#: app/gui.c:1187 msgid "Play Pattern" msgstr "" -#: app/gui.c:1187 +#: app/gui.c:1193 msgid "Stop" msgstr "" -#: app/gui.c:1206 +#: app/gui.c:1212 msgid "Number of Channels:" msgstr "" -#: app/gui.c:1238 +#: app/gui.c:1244 msgid "PatLength" msgstr "" -#: app/gui.c:1330 +#: app/gui.c:1336 msgid "Octave" msgstr "" -#: app/gui.c:1338 +#: app/gui.c:1344 msgid "Jump" msgstr "" -#: app/gui.c:1346 +#: app/gui.c:1352 msgid "Instr" msgstr "" -#: app/gui.c:1361 +#: app/gui.c:1367 msgid "Sample" msgstr "" -#: app/instrument-editor.c:74 +#: app/instrument-editor.c:75 msgid "VolFade" msgstr "" -#: app/instrument-editor.c:75 +#: app/instrument-editor.c:76 msgid "VibSpeed" msgstr "" -#: app/instrument-editor.c:76 +#: app/instrument-editor.c:77 msgid "VibDepth" msgstr "" -#: app/instrument-editor.c:77 +#: app/instrument-editor.c:78 msgid "VibSweep" msgstr "" -#: app/instrument-editor.c:153 +#: app/instrument-editor.c:154 msgid "Can't open file." msgstr "" -#: app/instrument-editor.c:172 +#: app/instrument-editor.c:174 msgid "Saving Instruments not yet supported." msgstr "" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Sine" msgstr "" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Square" msgstr "" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Saw Down" msgstr "" -#: app/instrument-editor.c:180 +#: app/instrument-editor.c:182 msgid "Saw Up" msgstr "" -#: app/instrument-editor.c:184 +#: app/instrument-editor.c:186 msgid "Instrument Editor" msgstr "" -#: app/instrument-editor.c:193 +#: app/instrument-editor.c:195 msgid "Volume envelope" msgstr "" -#: app/instrument-editor.c:201 +#: app/instrument-editor.c:203 msgid "Panning envelope" msgstr "" -#: app/instrument-editor.c:218 +#: app/instrument-editor.c:220 msgid "Load Instrument.." msgstr "" -#: app/instrument-editor.c:219 +#: app/instrument-editor.c:222 msgid "Save Instrument.." msgstr "" -#: app/instrument-editor.c:221 +#: app/instrument-editor.c:224 msgid "Load XI" msgstr "" -#: app/instrument-editor.c:227 +#: app/instrument-editor.c:230 msgid "Save XI" msgstr "" -#: app/instrument-editor.c:247 +#: app/instrument-editor.c:250 msgid "Vibrato Type:" msgstr "" -#: app/instrument-editor.c:319 +#: app/instrument-editor.c:322 msgid "Note:" msgstr "" -#: app/instrument-editor.c:337 +#: app/instrument-editor.c:340 msgid "Initialize" msgstr "" @@ -496,367 +496,383 @@ "All changes will be lost!" msgstr "" -#: app/menubar.c:225 -msgid "_Open.." +#: app/menubar.c:227 +msgid "_Open..." msgstr "" -#: app/menubar.c:227 -msgid "Save _as.." +#: app/menubar.c:229 +msgid "Save _as..." msgstr "" -#: app/menubar.c:232 +#: app/menubar.c:234 msgid "_Quit" msgstr "" -#: app/menubar.c:239 +#: app/menubar.c:241 msgid "Clear _All" msgstr "" -#: app/menubar.c:241 +#: app/menubar.c:243 msgid "Clear _Patterns Only" msgstr "" -#: app/menubar.c:243 +#: app/menubar.c:245 msgid "_Optimize Module" msgstr "" -#: app/menubar.c:250 app/menubar.c:261 app/menubar.c:274 +#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:281 msgid "C_ut" msgstr "" -#: app/menubar.c:252 app/menubar.c:263 app/menubar.c:276 +#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:283 msgid "_Copy" msgstr "" -#: app/menubar.c:254 app/menubar.c:265 app/menubar.c:278 +#: app/menubar.c:256 app/menubar.c:267 app/menubar.c:285 msgid "_Paste" msgstr "" -#: app/menubar.c:272 +#: app/menubar.c:269 +msgid "_Insert" +msgstr "" + +#: app/menubar.c:271 +msgid "_Delete" +msgstr "" + +#: app/menubar.c:279 msgid "_Mark" msgstr "" -#: app/menubar.c:285 +#: app/menubar.c:292 msgid "_Jazz Edit Mode" msgstr "" -#: app/menubar.c:290 -msgid "_Transposition.." +#: app/menubar.c:297 +msgid "Transp_osition..." msgstr "" -#: app/menubar.c:295 app/menubar.c:373 +#: app/menubar.c:302 app/menubar.c:380 msgid "_Pattern" msgstr "" -#: app/menubar.c:296 +#: app/menubar.c:303 msgid "_Track" msgstr "" -#: app/menubar.c:297 +#: app/menubar.c:304 msgid "_Selection" msgstr "" -#: app/menubar.c:303 +#: app/menubar.c:310 msgid "_Find Unused Pattern" msgstr "" -#: app/menubar.c:305 +#: app/menubar.c:312 msgid "_Copy Current to Unused Pattern" msgstr "" -#: app/menubar.c:307 +#: app/menubar.c:314 msgid "C_lear Unused Patterns" msgstr "" -#: app/menubar.c:309 +#: app/menubar.c:316 msgid "_Pack Patterns" msgstr "" -#: app/menubar.c:316 -msgid "_Load XI.." +#: app/menubar.c:323 +msgid "_Load XI..." msgstr "" -#: app/menubar.c:321 +#: app/menubar.c:328 msgid "_Delete Unused Instruments" msgstr "" -#: app/menubar.c:329 +#: app/menubar.c:336 msgid "Display _Oscilloscopes" msgstr "" -#: app/menubar.c:331 +#: app/menubar.c:338 msgid "Use _Backing Store" msgstr "" -#: app/menubar.c:336 -msgid "_Keyboard Configuration.." +#: app/menubar.c:343 +msgid "_Keyboard Configuration..." msgstr "" -#: app/menubar.c:338 -msgid "_Audio Configuration.." +#: app/menubar.c:345 +msgid "_Audio Configuration..." msgstr "" -#: app/menubar.c:340 -msgid "_Playback Effects.." +#: app/menubar.c:347 +msgid "_Playback Effects..." msgstr "" -#: app/menubar.c:342 -msgid "_GUI Configuration.." +#: app/menubar.c:349 +msgid "_GUI Configuration..." msgstr "" -#: app/menubar.c:347 +#: app/menubar.c:354 msgid "_Save Settings now" msgstr "" -#: app/menubar.c:349 +#: app/menubar.c:356 msgid "Save Settings on _Exit" msgstr "" -#: app/menubar.c:356 -msgid "_About.." +#: app/menubar.c:363 +msgid "_About..." msgstr "" -#: app/menubar.c:361 -msgid "Show _Tips.." +#: app/menubar.c:368 +msgid "Show _Tips..." msgstr "" -#: app/menubar.c:363 -msgid "_XM Effects.." +#: app/menubar.c:370 +msgid "_XM Effects..." msgstr "" -#: app/menubar.c:370 +#: app/menubar.c:377 msgid "_File" msgstr "" -#: app/menubar.c:371 +#: app/menubar.c:378 msgid "_Module" msgstr "" -#: app/menubar.c:372 +#: app/menubar.c:379 msgid "_Edit" msgstr "" -#: app/menubar.c:374 +#: app/menubar.c:381 msgid "_Instrument" msgstr "" -#: app/menubar.c:375 +#: app/menubar.c:382 msgid "_Settings" msgstr "" -#: app/menubar.c:376 +#: app/menubar.c:383 msgid "_Help" msgstr "" -#: app/menubar.c:404 +#: app/menubar.c:411 msgid "/_File" msgstr "" -#: app/menubar.c:405 -msgid "/File/_Open.." +#: app/menubar.c:412 +msgid "/File/_Open..." msgstr "" -#: app/menubar.c:406 -msgid "/File/Save _as.." +#: app/menubar.c:413 +msgid "/File/Save _as..." msgstr "" -#: app/menubar.c:407 +#: app/menubar.c:414 msgid "/File/-" msgstr "" -#: app/menubar.c:408 +#: app/menubar.c:415 msgid "/File/_Quit" msgstr "" -#: app/menubar.c:409 +#: app/menubar.c:416 msgid "/_Module" msgstr "" -#: app/menubar.c:410 +#: app/menubar.c:417 msgid "/Module/Clear _All" msgstr "" -#: app/menubar.c:411 +#: app/menubar.c:418 msgid "/Module/Clear _Patterns Only" msgstr "" -#: app/menubar.c:412 +#: app/menubar.c:419 msgid "/Module/_Optimize Module" msgstr "" -#: app/menubar.c:413 +#: app/menubar.c:420 msgid "/_Edit" msgstr "" -#: app/menubar.c:414 +#: app/menubar.c:421 msgid "/Edit/_Jazz Edit Mode" msgstr "" -#: app/menubar.c:415 app/menubar.c:417 +#: app/menubar.c:422 app/menubar.c:424 msgid "/Edit/-" msgstr "" -#: app/menubar.c:416 -msgid "/Edit/_Transposition.." +#: app/menubar.c:423 +msgid "/Edit/_Transposition..." msgstr "" -#: app/menubar.c:418 +#: app/menubar.c:425 msgid "/Edit/_Pattern" msgstr "" -#: app/menubar.c:419 +#: app/menubar.c:426 msgid "/Edit/Pattern/C_ut" msgstr "" -#: app/menubar.c:420 +#: app/menubar.c:427 msgid "/Edit/Pattern/_Copy" msgstr "" -#: app/menubar.c:421 +#: app/menubar.c:428 msgid "/Edit/Pattern/_Paste" msgstr "" -#: app/menubar.c:422 +#: app/menubar.c:429 msgid "/Edit/_Track" msgstr "" -#: app/menubar.c:423 +#: app/menubar.c:430 msgid "/Edit/Track/C_ut" msgstr "" -#: app/menubar.c:424 +#: app/menubar.c:431 msgid "/Edit/Track/_Copy" msgstr "" -#: app/menubar.c:425 +#: app/menubar.c:432 msgid "/Edit/Track/_Paste" msgstr "" -#: app/menubar.c:426 +#: app/menubar.c:433 +msgid "/Edit/Track/_Insert" +msgstr "" + +#: app/menubar.c:434 +msgid "/Edit/Track/_Delete" +msgstr "" + +#: app/menubar.c:435 msgid "/Edit/_Selection" msgstr "" -#: app/menubar.c:427 +#: app/menubar.c:436 msgid "/Edit/Selection/_Mark" msgstr "" -#: app/menubar.c:428 +#: app/menubar.c:437 msgid "/Edit/Selection/C_ut" msgstr "" -#: app/menubar.c:429 +#: app/menubar.c:438 msgid "/Edit/Selection/_Copy" msgstr "" -#: app/menubar.c:430 +#: app/menubar.c:439 msgid "/Edit/Selection/_Paste" msgstr "" -#: app/menubar.c:431 app/track-editor.c:72 +#: app/menubar.c:440 msgid "/_Pattern" msgstr "" -#: app/menubar.c:432 +#: app/menubar.c:441 msgid "/Pattern/_Find Unused Pattern" msgstr "" -#: app/menubar.c:433 +#: app/menubar.c:442 msgid "/Pattern/_Copy Current to Unused Pattern" msgstr "" -#: app/menubar.c:434 +#: app/menubar.c:443 msgid "/Pattern/C_lear Unused Patterns" msgstr "" -#: app/menubar.c:435 +#: app/menubar.c:444 msgid "/Pattern/_Pack Patterns" msgstr "" -#: app/menubar.c:436 +#: app/menubar.c:445 msgid "/_Instrument" msgstr "" -#: app/menubar.c:437 -msgid "/Instrument/_Load XI.." +#: app/menubar.c:446 +msgid "/Instrument/_Load XI..." msgstr "" -#: app/menubar.c:438 +#: app/menubar.c:447 msgid "/Instrument/-" msgstr "" -#: app/menubar.c:439 +#: app/menubar.c:448 msgid "/Instrument/_Delete Unused Instruments" msgstr "" -#: app/menubar.c:440 +#: app/menubar.c:449 msgid "/_Settings" msgstr "" -#: app/menubar.c:441 +#: app/menubar.c:450 msgid "/Settings/Display _Oscilloscopes" msgstr "" -#: app/menubar.c:442 +#: app/menubar.c:451 msgid "/Settings/Use _Backing Store" msgstr "" -#: app/menubar.c:443 app/menubar.c:448 +#: app/menubar.c:452 app/menubar.c:457 msgid "/Settings/-" msgstr "" -#: app/menubar.c:444 -msgid "/Settings/_Keyboard Configuration.." +#: app/menubar.c:453 +msgid "/Settings/_Keyboard Configuration..." msgstr "" -#: app/menubar.c:445 -msgid "/Settings/_Audio Configuration.." +#: app/menubar.c:454 +msgid "/Settings/_Audio Configuration..." msgstr "" -#: app/menubar.c:446 -msgid "/Settings/_Playback Effects.." +#: app/menubar.c:455 +msgid "/Settings/_Playback Effects..." msgstr "" -#: app/menubar.c:447 -msgid "/Settings/_GUI Configuration.." +#: app/menubar.c:456 +msgid "/Settings/_GUI Configuration..." msgstr "" -#: app/menubar.c:449 +#: app/menubar.c:458 msgid "/Settings/_Save Settings now" msgstr "" -#: app/menubar.c:450 +#: app/menubar.c:459 msgid "/Settings/Save Settings on _Exit" msgstr "" -#: app/menubar.c:451 +#: app/menubar.c:460 msgid "/_Help" msgstr "" -#: app/menubar.c:452 -msgid "/Help/_About.." +#: app/menubar.c:461 +msgid "/Help/_About..." msgstr "" -#: app/menubar.c:453 +#: app/menubar.c:462 msgid "/Help/-" msgstr "" -#: app/menubar.c:454 -msgid "/Help/Show _Tips.." +#: app/menubar.c:463 +msgid "/Help/Show _Tips..." msgstr "" -#: app/menubar.c:455 -msgid "/Help/_XM Effects.." +#: app/menubar.c:464 +msgid "/Help/_XM Effects..." msgstr "" -#: app/menubar.c:469 +#: app/menubar.c:478 msgid "/Settings/Display Oscilloscopes" msgstr "" -#: app/menubar.c:471 +#: app/menubar.c:480 msgid "/Settings/Use Backing Store" msgstr "" -#: app/menubar.c:473 +#: app/menubar.c:482 msgid "/Settings/Save Settings on Exit" msgstr "" @@ -1027,10 +1043,6 @@ msgid "Length: %d" msgstr "" -#: app/sample-editor.c:865 -msgid "No memory for copybuffer.\n" -msgstr "" - #: app/sample-editor.c:957 msgid "" msgstr "" @@ -1047,10 +1059,6 @@ msgid "Can only handle mono 8 and 16 bit samples" msgstr "" -#: app/sample-editor.c:1060 -msgid "Out of memory for sample data." -msgstr "" - #: app/sample-editor.c:1065 msgid "Read error." msgstr "" @@ -1071,10 +1079,6 @@ msgid "Sampling Window" msgstr "" -#: app/sample-editor.c:1252 -msgid "out of memory while sampling..." -msgstr "" - #: app/sample-editor.c:1303 msgid "" msgstr "" @@ -1161,19 +1165,7 @@ "instrument editor page." msgstr "" -#: app/track-editor.c:73 -msgid "/Pattern/_Cut" -msgstr "" - -#: app/track-editor.c:74 -msgid "/Pattern/_Copy" -msgstr "" - -#: app/track-editor.c:75 -msgid "/Pattern/_Paste" -msgstr "" - -#: app/track-editor.c:139 +#: app/track-editor.c:82 msgid "Jazz Edit:" msgstr "" diff -urN soundtracker-0.3.4/soundtracker.spec soundtracker-0.3.5/soundtracker.spec --- soundtracker-0.3.4/soundtracker.spec Sat Sep 25 17:25:21 1999 +++ soundtracker-0.3.5/soundtracker.spec Fri Oct 8 16:30:32 1999 @@ -1,6 +1,6 @@ %define name soundtracker -%define version 0.3.4 -%define release 5 +%define version 0.3.5 +%define release 6 %define prefix /usr Summary: Sound modules editor/player @@ -26,7 +26,7 @@ %setup %build -LINGUAS="de it pl ja" CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} +LINGUAS="de es it pl ja" CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} gmake %install